장고(Django) 개발 환경: 리눅스에서 아파치 웹서버로 돌리기

히즈웨드 |

    장고 프로젝트를 아파치 서버에 올리는 방법을 살펴보자.


    작년에 장고(Django) 프레임워크로 프로젝트를 진행하면서 정리했던 개발 지식을 블로그에 다시 한번 정리하려고 합니다. 리눅스 운영서버를 구성하는 것부터 윈도우 개발환경 구성, 개발 도구 분석이 일단 한 단락이고, 이 후에는 장고 프레임워크의 사용방법을 정리할 것입니다.


    개인 위키에 정리했던 것을 옮기는 수준이라 친절한 설명은 어려울 것 같지만, 댓글 남기시면 설명해드릴 의향은 있습니다 :) 말투가 존대와 반말이 섞여있어도 이해바랍니다.





    장고를 아파치로 돌리기 위해서는 mod_wsgi 아파치 모듈이 필요하다. 이를 설정해주고, 아파치 가상 호스트 설정까지 알아보도록 하겠다.


    1. 대상 및 준비

    2. Apache 설치 및 설정

    3. mod_wsgi 설치

    4. wsgi.py 수정

    5. Apache 가상호스트 설정

    6. mod_wsgi express as root 방식 설치

    7. 참고




    1. 대상 및 준비

    대상

    • 리눅스 환경(CentOS 6.5)의 서버
    • Python 2.x가 이미 설치된 CentOS 6.5

    파이썬 버전 확인

    [root@centos6dev ~]# python -V
    Python 2.6.6



    2. Apache 설치 및 설정

    YUM 설치 방법

    yum install httpd

    Apache 설정

    # Apache 설정 파일
    vi /etc/httpd/conf/httpd.conf
     
    # Apache 설정 파일 백업
    cp -av /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.ori

    설정 사항

    # KeepAlive 항목은 Off 에서 On 으로 변경 : 사용량이 너무 많아 서비스가 멈출 정도가 아니라면 대부분의 경우 On 이 빠른 응답으로 유리
    sed -i 's/KeepAlive Off/KeepAlive On/' /etc/httpd/conf/httpd.conf
     
    # ServerName 은 아파치 시작시 경고 문구가 나오지 않도록 127.0.0.1 으로라도 입력
    sed -i 's/#ServerName www.example.com:80/ServerName 127.0.0.1:80/' /etc/httpd/conf/httpd.conf
     
    # AddDefaultCharset 항목은 UTF-8이 아닌 페이지를 사용한다면, 주석 처리
    sed -i 's/AddDefaultCharset UTF-8/#AddDefaultCharset UTF-8/' /etc/httpd/conf/httpd.conf
     
    # 외부에서 Apache 버전을 알 수 없도록 숨김
    sed -i 's/ServerTokens OS/ServerTokens Prod/' /etc/httpd/conf/httpd.conf
    sed -i 's/ServerSignature On/ServerSignature Off/' /etc/httpd/conf/httpd.conf
     
    # 변경한 설정값 확인
    grep -P 'KeepAlive O|^ServerName|AddDefaultCharset|ServerTokens|ServerSignature' /etc/httpd/conf/httpd.conf

    Apache 실행 및 자동 시작 등록

    /etc/init.d/httpd start
    # 이후부터 service httpd restart
     
    chkconfig httpd on

    Apache 실행 테스트

    웹브라우저에서 127.0.0.1:80 접속



    3. mod_wsgi 설치

    mod_wsgi 아파치 모듈을 사용하여 장고 프로젝트를 서비스한다.
    파이썬 및 장고의 버전에 따라 방법이 크게 바뀌었기 때문에 인터넷에 나온 자료를 참고하지 말 것. 

    mod_wsgi를 설치하기 앞서, selinux를 비활성 시켜야함

    # 영구적으로
    $ vim /etc/selinux/config
    SELINUX=disabled
     
    # 임시적으로
    $ setenforce 0

    소스 설치 방법

    안정 버전인 3.5버전 사용

    $ cd /tmp
    $ wget https://github.com/GrahamDumpleton/mod_wsgi/archive/3.5.tar.gz
    $ tar zxvf 3.5.tar.gz mod_wsgi-3.5
    $ cd mod_wsgi-3.5
    $ ./configure --with-python=/usr/bin/python
    $ make && make install

    apxs 오류가 나오는 경우,

    $ yum install httpd httpd-devel

    YUM 설치 방법

    yum install mod_wsgi



    4. wsgi.py 수정

    장고 프로젝트에 기본으로 생성되어 있는, 프로젝트명/프로젝트명/wsgi.py 파일 수정한다.

    import os
    import sys
    sys.path.append("/프로젝트까지경로/프로젝트명")
    os.environ.setdefault("DJANGO_SETTINGS_MODULE""프로젝트명.settings")
     
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()



    5. Apache 가상호스트 설정

    /etc/httpd/conf.d/vhost.conf 파일 새로 생성

    WSGISocketPrefix /var/run/wsgi
     
    <VirtualHost *:80>
     
    WSGIDaemonProcess 서버이름 user=유저이름 group=그룹이름 python-path=/장고프로젝트까지의경로/장고프로젝트:/usr/local/lib/python2.7/site-packages
     
    WSGIProcessGroup 서버이름
     
    WSGIScriptAlias / /장고프로젝트까지의경로/장고프로젝트/장고프로젝트/wsgi.py
     
    <Directory /장고프로젝트까지의경로/장고프로젝트/장고프로젝트>
    <Files wsgi.py>
    Order allow,deny
    Allow from all
    </Files>
    </Directory>
     
    </VirtualHost>

    아래는 mod_wsgi 아파치 가상 호스트 파일 예제이다. 참고만 하자.

    $ vim /etc/httpd/conf.d/vhost.conf
     
    WSGISocketPrefix /var/run/wsgi
     
    # VirtualHost JAM SERVER
    <VirtualHost *:80>
    ServerName 127.0.0.1
    #ServerAlias */
    #ServerAdmin jamadmin@localhost
     
    WSGIDaemonProcess JAM_SERVER user=jamadmin group=jamadmin python-path=/home/jamadmin/jam/jam_server:/usr/local/lib/python4.7/site-packages
     
    WSGIProcessGroup JAM_SERVER
     
    WSGIScriptAlias / /home/jamadmin/jam/jam_server/jam_server/wsgi.py
     
    #Alias /robots.txt /home/jamadmin/jam/jam_server/robots.txt
    #Alias /favicon.ico /home/jamadmin/jam/jam_server/favicon.ico
    #Alias /images /home/jamadmin/jam/jam_server/images
    #Alias /static /home/jamadmin/jam/jam_server/static
     
    <Directory /home/jamadmin/jam/jam_server/jam_server>
    <Files wsgi.py>
    Order allow,deny
    Allow from all
    </Files>
    </Directory>
     
    ErrorLog /var/log/jam_server-error.log
    CustomLog /var/log/jam_server-access.log combined
     
    </VirtualHost>

    Apache 재시작

    $ service httpd restart



    6. mod_wsgi express as root 방식 설치

    위에서 설치한 mod_wsgi의 사용법과는 또 다른 방식으로, mod_wsgi-express 명령을 직접 사용하여 아파치 서버를 띄우는 방법이 있다. (최근 권장됨)

    mod_wsgi-express start-server wsgi.py --port=80 --user www-data --group www-data



    7. 참고

    mod_wsgi 설치 참고 : http://powerpython.org/blog/how-to-run-django-on-apache-and-mod_wsgi/

    mod_wsgi express as root 방식 설치 참고 : https://github.com/GrahamDumpleton/mod_wsgi