Site Deployment (Apache)

Django Deployment : Apache 서버

이번 아티클에서는 Ubuntu (16.04)에 Apache 웹서버를 설치하고 Django 프로젝트를 Deploy 하는 방법에 대해 소개한다. Django 프로젝트는 파이썬 가상환경에서 실행된다고 가정한다.

1. Ubuntu에 Apache 서버 설치

먼저 아래와 같은 명령을 통해 Ubuntu 16.04에 Apache 웹 서버를 설치하고, Apache의 WSGI 모듈인 mod-wsgi를 설치한다.

# apt-get install apache2
# apt-get install libapache2-mod-wsgi-py3

2. Django 프로젝트 소스 복사

파이썬 Django 프로젝트 소스코드를 웹 디렉토리에 복사한다. 개발서버의 소스코드를 Git이나 SVN 같은 소스 컨트롤 시스템에 체크인하고 이를 다운 받는 방식을 사용할 수 있으며, 또한 FTP 등을 통해 서버에 압축파일을 전송할 수도 있다. 본 Deployment에서는 소스코드를 /var/www/myweb 에 복사하였다고 가정하자.

복사후 /var/www/myweb 폴더와 서브폴더를 Apache2의 디폴트 계정인 "www-data"가 사용할 수 있도록 권한을 설정한다.

# cd /var/www
# chown -R www-data:www-data myweb

3. 파이썬 가상환경

Ubuntu 16.04에는 디폴트로 Python 3.5.1 버젼이 미리 설치되어 있다. 하지만, 파이썬 가상환경 도구인 pyvenv은 설치되어 있지 않으므로, 아래와 같이 python3-venv 를 설치한 후 pyvenv를 실행한다. 이어 파이썬 가상환경을 활성화하고 Django를 설치한다.

# apt-get install -y python3-venv

# pyvenv venv

# . venv/bin/activate
(venv) pip install django

4. Apache 서버 설정

Apache에서 디폴트 서버 혹은 가상서버를 설정한다. 한 Apache에서 여러 도메인을 핸들링하기 위해서는 가상서버를 설정한다.
"/etc/apache2/sites-available"에 있는 000-default.conf 파일을 복사해서 새로운 .conf 파일을 만들고 (예: myweb.conf) 아래와 같은 내용으로 편집한다 (서버명 및 파일경로 등을 환경에 맞게 변경).

<VirtualHost *:80>
        ServerName myweb.com
        ServerAlias www.myweb.com
        ServerAdmin admin@myweb.com
        DocumentRoot /var/www/myweb

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        Alias /static /var/www/myweb/static
        <Directory /var/www/myweb/static>
                Require all granted
        </Directory>
        <Directory /var/www/myweb/cashcheck>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIDaemonProcess myweb python-path=/var/www/myweb python-home=/var/www/myweb/venv
        WSGIProcessGroup myweb
        WSGIScriptAlias / /var/www/myweb/myweb/wsgi.py
</VirtualHost>

다음으로 Apache 서버에서 위 myweb.conf 파일에 있는 웹사이트를 Enable 하고, Apache 서버를 재구동한다.

# a2ensite myweb.com      
# service apache2 reload  (혹은 service apache2 restart)

5. 추가 설정

Django 프로젝트에서 Sqlite3 DB를 사용하면, 아래와 같이 데이타 파일 권한 설정을 해준다.

# cd /var/www/myweb
# chmod 664 db.sqlite3

또한, Django 프로젝트를 Production에서 쓸 때, 흔히 발생하는 에러로 외부에서 브라우져로 접속시 "DisallowedHost at / Invalid HTTP_HOST header" 에러가 발생할 수 있는데, 이는 settings.py (예: /var/www/myweb/myweb/settings.py) 파일의 ALLOWED_HOSTS를 수정하면 된다. 예를 들어, myweb.com이 공식 도메인일 때 아래와 같이 지정한다.

ALLOWED_HOSTS = ['myweb.com', 'localhost', '127.0.0.1']
Python 프로그래밍 실습

본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.