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

히즈웨드 |
장고(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