Web/flask

[Flask] 01. Python, Apache를 연동해서 Python 웹애플리케이션을 구동하는 방법

moomyung_s 2018. 5. 8. 00:17

환경

Ubuntu 16.04

Python3 3.5.2


아파치 웹서버 설치

1
2
sudo apt-get update
sudo apt-get install apache2
cs


웹서버가 설치된 컴퓨터의 IP 주소가 알고 싶다면 콘솔창에서 아래 명령을 실행합니다.

1
hostname -I
cs


아파치 index.html 페이지가 잘 나오는지 확인


Apache와 Python을 CGI로 연동하는 방법

Apache 웹서버가 동작하는 방법을 변경하기 위해서 설정 파일을 편집합니다.

1
sudo vi /etc/apache2/sites-enabled/000-default.conf
cs


원본 000-default.conf 파일


Document root(웹서버가 요청한 파일을 찾는 최상위 디렉토리)에 있는 파일 중 확장자가 py인 파일은 Python으로서 시행 되도록 합니다. 추가한 내용은 4~7행입니다.

1
2
3
4
5
6
7
8
9
10
<VirtualHost *:80 *:3000>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        <Directory /var/www/html>
                AddHandler cgi-script .py
                Options ExecCGI
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
cs


수정본 000-default.conf 파일


cgi가 동작하도록 cgi 기능을 켜고 웹서버를 재시작합니다.

1
2
sudo a2enmod cgi
sudo service apache2 restart
cs



helloword.py 파일의 권한이 실행 권한 있는지 확인 후 접속!


오류가 발생하면 오류 메시지를 확인해봅니다.

1
2
sudo tail /var/log/apache2/error.log
sudo tail -/var/log/apache2/error.log
cs


-f 옵션을 이용하면 실시간으로 에러를 확인할 수 있다.


웹브라우저에 header값을 줘야하는데 malformed 형식에 문제가 있다라는 의미.
해결하기 위해서는 .py 파일에 content-type과 charset 내용을 추가해야 함.



잘 동작됨


CGI 소개

CGI의 핵심은 웹서버가 사용자의 요청을 받았을 때 그 요청과 관련해서 웹 애플리케이션이 어떤 처리를 할 수 있도록 QUERY_STRING과 같은 약속되어 있는 이름의 데이터를 환경 변수라는 형태로 전달해 주는 것이다.

중요한 것은 CGI는 언어와는 상관없이 웹서버와 언어들 사이에 서로 약속이다.