웹사이트 검색

Debian VPS의 virtualenv Python 환경에서 mod_wsgi 및 Apache로 Django를 실행하는 방법


소개

Django 애플리케이션 및 일반적으로 Python 애플리케이션으로 작업하는 것은 사용 중인 많은 도구가 있는 복잡한 문제입니다. 동일한 목표를 달성하는 방법에는 여러 가지가 있으며 일을 수행하는 단일 방법이 없는 경우가 많습니다.

Django 애플리케이션을 전용 서버의 웹에 배포하는 가장 인기 있는 방법 중 하나는 Gunicorn과 페어링된 Nginx를 사용하는 것입니다. 이를 수행하는 좋은 방법은 이미 이 기사에서 자세히 설명했습니다. 그러나 Apache를 사용하여 제공되는 기존 웹사이트와 함께 Django 애플리케이션을 호스팅하는 것은 꽤 인기 있는 시나리오입니다. 우리는 특정 목표를 달성하기 위한 빠른 경로를 다루려고 노력할 것입니다. 그러나 이것은 Django와 Apache 페어링에 대한 최종 가이드가 아니며 여기에서 다루지 않은 구성 측면이 있다는 점에 유의하십시오.

이 텍스트는 몇 가지 가정을 합니다.

  • Debian 7.0 이상에서 이미 드롭릿을 설정했습니다. 서로 다른 Linux 배포판 간에는 많은 차이점이 있습니다. 따라서 명확성을 위해 데비안 서버에 초점을 맞출 것입니다.\n
  • 가상 환경을 만들기 위한 pip 패키지 관리자 및 virtualenv와 같은 일반적인 Python 도구에 적어도 어느 정도 익숙합니다. 이러한 도구는 이 기사에서 훌륭하게 설명됩니다.\n
  • 이 문서는 Django 자체를 사용하고 구성하는 과정을 안내하기 위한 것이 아니므로 Django 프로젝트 구조에 어느 정도 익숙합니다.\n
  • 이 자습서에서는 서버 자체의 간단한 설치와 Django와 Apache를 페어링하는 데 필요한 구성 변경만 다루므로 기본 Apache 관리에 익숙합니다.\n

전제 조건

새 패키지를 설치하기 전에 항상 시스템 패키지와 패키지 색인을 업데이트하는 것이 좋습니다. 그렇게 하려면 다음을 실행하십시오.

apt-get update
apt-get upgrade

아파치 설치

이 텍스트는 Apache를 사용하여 애플리케이션을 제공하는 데 중점을 두므로 서버 자체가 필요합니다. 필요한 패키지를 설치하려면 다음을 실행하십시오.

apt-get install apache2

설치 직후 Apache는 이미 실행 중일 것입니다. 웹 브라우저를 열고 서버 IP 주소를 가리키면 Apache 웹 서버가 제대로 설정되었는지 확인할 수 있습니다. 간단한 It works! 화면의 페이지.

pip 및 virtualenv 설치

웹 서버에서 Python 및 Django 작업을 시작하려면 먼저 pip 및 virtualenv를 설치해야 합니다. Pip은 Django 자체와 같은 Python 소프트웨어 패키지 설치를 용이하게 하는 Python 패키지 관리자인 반면, virtualenv는 서로 다른 애플리케이션에 필요한 라이브러리를 분리하고 이들 사이의 버전 충돌을 피하기 위해 Python 애플리케이션을 위한 별도의 가상 환경을 생성할 수 있습니다.

그렇게 하려면 다음을 실행하십시오.

apt-get install python-pip python-virtualenv

이 명령은 Debian 패키지 저장소에서 pip 및 virtualenv를 설치합니다. --version 스위치로 두 도구를 실행하여 두 도구가 제대로 설치되었는지 확인할 수 있습니다.

root@django:~# virtualenv --version
1.7.1.2
root@django:~# pip --version
pip 1.1 from /usr/lib/python2.7/dist-packages (python 2.7)
root@django:~#

virtualenv를 사용하여 가상 환경 만들기

Apache 설치 시 기본 웹 서버 루트가 설정된 /var/www 디렉토리가 자동으로 생성됩니다. 우리는 새로운 Django 애플리케이션을 모든 종속성과 함께 배치할 것입니다.

해당 디렉터리 안에 sampleapp라는 새 디렉터리를 만들고 새 디렉터리를 입력해 보겠습니다.

cd /var/www
mkdir sampleapp
cd sampleapp

그런 다음 virtualenv를 사용하여 새로운 가상 환경을 만들어 봅시다. Python 가상 환경은 기본적으로 Python 인터프리터와 pip의 로컬 인스턴스가 상주하는 디렉토리입니다. pip의 로컬 인스턴스는 가상 환경 내에 모든 패키지를 설치합니다. 그렇게 하면 설치된 패키지가 전역 Python 설치를 오염시키지 않으며 두 개의 다른 버전의 Django 또는 다른 라이브러리를 실행하는 두 애플리케이션의 가상 시나리오에서 패키지 버전 충돌의 가능성도 없습니다.

새 가상 환경을 만들려면 다음을 입력하십시오.

virtualenv env

여기서 env는 가상 환경 이름입니다. 다른 단어일 수 있습니다. 이 명령의 출력은 다음과 같아야 합니다.

root@django:/var/www/sampleapp# virtualenv env
New python executable in env/bin/python
Installing distribute.............................................................................................................................................................................................done.
Installing pip...............done.
root@django:/var/www/sampleapp#

이제 가상 환경이 준비되었으며 두 가지 방법으로 사용할 수 있습니다.

한 가지 방법은 가상 환경 인터프리터를 직접 사용하여 명령을 실행하는 것입니다. 이 방법을 사용하면 시스템 전체에서 실행할 가능성이 있으므로 올바른 인터프리터 또는 pip 인스턴스를 실행하는 것을 항상 기억해야 합니다.

root@django:/var/www/sampleapp# env/bin/pip --version
pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
root@django:/var/www/sampleapp# env/bin/python --version
Python 2.7.3
root@django:/var/www/sampleapp#

다른 방법은 환경을 먼저 활성화하는 것입니다.

source env/bin/activate

그러면 환경 이름이 명령줄 앞에 추가됩니다.

root@django:/var/www/sampleapp# source env/bin/activate
(env)root@django:/var/www/sampleapp#

실행되는 모든 명령은 로컬 가상 환경 버전을 사용합니다.

(env)root@django:/var/www/sampleapp# pip --version
pip 1.1 from /var/www/sampleapp/env/lib/python2.7/site-packages/pip-1.1-py2.7.egg (python 2.7)
(env)root@django:/var/www/sampleapp# python --version
Python 2.7.3
(env)root@django:/var/www/sampleapp#

그런 식으로 작업하는 것이 더 쉽습니다. 그러나 다음 명령을 사용하여 작업이 완료된 후 환경을 비활성화해야 합니다.

deactivate

쉘을 정상으로 되돌립니다.

(env)root@django:/var/www/sampleapp# deactivate
root@django:/var/www/sampleapp#

새로 생성된 환경은 Django 및 관련 라이브러리를 포함하여 필요한 모든 종속성을 저장하는 데 사용됩니다. 또한 올바른 종속성을 사용하여 애플리케이션을 제공하기 위해 나중에 Apache 및 mod_wsgi에서 사용됩니다.

가상 환경에 Django 설치

다음으로 필요한 단계는 가상 환경 내에 Django를 설치하는 것입니다. 다음을 사용하여 미리 환경을 활성화하지 않고 그렇게 합시다.

env/bin/pip install django

이 명령을 실행한 후 표시되는 마지막 메시지는 다음과 같아야 합니다.

Successfully installed django
Cleaning up...

Django는 이제 가상 환경에 설치되며 시스템 전체 Python 설치 내에서 사용할 수 없습니다. 두 인터프리터를 사용하여 django 모듈을 가져와 동작을 확인할 수 있습니다.

root@django:/var/www/sampleapp# python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named django
>>> exit()

시스템 전체 인터프리터를 사용하여 가져오기에 실패했지만

root@django:/var/www/sampleapp# env/bin/python
Python 2.7.3 (default, Mar 13 2014, 11:03:55)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>

가상 환경 내에서 실행된 것이 성공했습니다.

첫 Django 프로젝트 만들기

간단하고 기본적인 예제 프로젝트를 만들기 위해 다음과 같이 django-admin.py 스크립트를 사용할 수 있습니다.

 env/bin/django-admin.py startproject sampleapp .

명령에서 후행 .에 유의하십시오. 이 없이 프로젝트는 추가 하위 디렉토리에 생성됩니다. 해당 명령을 실행하면 새 sampleapp 디렉토리와 manage.py 스크립트가 /var/www/sampleapp에 생성됩니다. manage.py 스크립트는 이 특정 프로젝트에 대한 Django 명령을 실행하는 데 사용됩니다. manage.py의 가능한 용도 중 하나는 테스트 서버 인스턴스를 실행하여 모든 것이 의도한 대로 작동하는지 확인하는 것입니다.

실행하십시오:

env/bin/python manage.py runserver 0.0.0.0:8000

이렇게 하면 포트 8000의 모든 인터페이스에 바인딩된 테스트 서버가 실행됩니다. 출력은 다음과 같아야 합니다.

Validating models...

0 errors found
April 08, 2014 - 12:29:31
Django version 1.6.2, using settings 'sampleapp.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

브라우저에서 포트 8000으로 서버 IP 주소를 열면(주소는 http://:8000/와 같아야 함) It works! 예제 Django 페이지. 내장된 Django 개발 서버 대신 Apache 웹 서버를 사용하기 위해 작업할 결과입니다.

Django 애플리케이션이 제대로 작동하고 있으므로 Apache와 애플리케이션 페어링을 진행할 수 있습니다.

Apache용 mod_wsgi 설치

Apache를 사용하여 Python 애플리케이션을 제공하는 가장 쉽고 권장되는 방법은 mod_wsgi 모듈을 사용하는 것입니다. Python도 Apache도 기본적으로 설치되어 있지 않으므로 추가 패키지를 설치해야 합니다.

apt-get install libapache2-mod-wsgi

다음 단계는 기사의 시작 부분에서 제공된 기본 Apache 가상 호스트를 구성하는 것입니다. 작동합니다! Django 애플리케이션을 제공하는 페이지입니다.

기본 가상 호스트에서 mod_wsgi 구성

Apache의 다른 가상 호스트에 대해 mod_wsgi를 구성하는 아이디어는 여기에 제시된 것과 동일합니다. 단순성을 위해 기본 가상 호스트를 사용합니다. 기본 가상 호스트는 새로 설치한 Apache에서 이미 제공한 것이기 때문입니다.

nano 편집기에서 기본 가상 호스트 구성 파일 열기

nano /etc/apache2/sites-enabled/000-default 

바로 아래에 다음 세 줄을 추가합니다.

WSGIDaemonProcess sampleapp python-path=/var/www/sampleapp:/var/www/sampleapp/env/lib/python2.7/site-packages
WSGIProcessGroup sampleapp
WSGIScriptAlias / /var/www/sampleapp/sampleapp/wsgi.py

첫 번째 줄은 Django 애플리케이션 서비스를 담당할 sampleapp라는 WSGI 데몬 프로세스를 생성합니다. 데몬 이름은 기본적으로 무엇이든 될 수 있지만 *여기서는 응용 프로그램 이름과 같은 설명적인 이름을 사용하는 것이 좋습니다.

전역 Python 설치 및 전역 Django 인스턴스를 사용하는 경우 python-path 지시문이 필요하지 않습니다. 그러나 가상 환경을 사용하면 mod_wsgi가 Python 패키지를 찾을 위치를 알 수 있도록 대체 Python 경로를 지정해야 합니다.

경로에는 Django 프로젝트 자체의 디렉터리( /var/www/sampleapp)와 해당 프로젝트의 가상 환경 내부에 있는 Python 패키지의 디렉터리( /var/www/sampleapp)가 포함되어야 합니다. /env/lib/python2.7/site-packages. 경로 정의의 디렉토리는 콜론 기호를 사용하여 구분됩니다.

두 번째 줄은 특정 가상 호스트가 미리 생성된 WSGI 데몬을 사용하도록 지시하므로 데몬 이름은 이 둘 사이에서 일치해야 합니다. 두 줄 모두 sampleapp을 사용했습니다.

세 번째 줄은 Apache와 mod_wsgi에게 WSGI 구성을 찾을 위치를 알려주므로 가장 중요합니다. Django에서 제공하는 wsgi.py에는 제대로 작동하는 Django 애플리케이션을 제공하기 위한 WSGI의 베어본 기본 구성이 포함되어 있으며 이 파일에서 구성을 변경하는 것은 이 문서 범위를 벗어납니다.

이러한 변경 후에는 Apache를 다시 시작해야 합니다.

service apache2 restart

그런 다음 추가 포트 없이 서버 IP 주소에서 웹 브라우저를 열면 초기가 아니라 이전과 동일한 Django 페이지가 표시됩니다. 작동합니다! 이전에 본 페이지입니다.

그러면 구성이 완료됩니다.

참고: 추가 관리 없이 기본 가상 호스트를 사용하는 것은 권장되는 프로덕션 서버 구성 방법이 아닙니다. 데모용으로 사용됩니다.

추가 자료

mod_wsgi 및 Django 자체를 구성하는 주제는 방대합니다. 많은 구성 측면은 애플리케이션에 따라 다르며 실제 Django 애플리케이션으로 작업하지 않고는 설명하거나 시연하기 어렵습니다. 이 가이드는 Apache를 사용하여 Django 애플리케이션을 배포하기 위한 완전한 하우투가 아니라 시작하는 방법에 대한 빠른 시작 가이드입니다.

가장 좋은 리소스 중 하나는 공식 Django 문서입니다. Django를 검색 키워드로 사용하여 찾을 수 있는 DigitalOcean에 대한 훌륭한 기사도 있습니다.

기사 제출자: Mateusz Papiernik