Ubuntu 14.04에서 Apache 및 mod_wsgi로 Django 애플리케이션을 제공하는 방법
소개
Django는 Python 애플리케이션이나 웹 사이트를 빠르게 시작하는 데 도움이 되는 강력한 웹 프레임워크입니다. Django에는 로컬에서 코드를 테스트하기 위한 간소화된 개발 서버가 포함되어 있지만 생산과 관련된 약간의 작업이라도 더 안전하고 강력한 웹 서버가 필요합니다.
이 가이드에서는 Python 가상 환경에서 Django를 설치하고 구성하는 방법을 보여줍니다. 그런 다음 애플리케이션 로직이 필요한 요청을 Django 앱에 전달하기 전에 직접 클라이언트 요청을 처리할 수 있도록 애플리케이션 앞에 Apache를 설정합니다. WSGI 인터페이스 사양을 통해 Django와 통신할 수 있는 mod_wsgi
Apache 모듈을 사용하여 이를 수행합니다.
전제 조건 및 목표
이 가이드를 완료하려면 sudo
권한이 구성된 루트가 아닌 사용자가 있는 새로운 Ubuntu 14.04 서버 인스턴스가 있어야 합니다. 초기 서버 설정 가이드를 실행하여 이를 설정하는 방법을 배울 수 있습니다.
Python 가상 환경에 Django를 설치할 것입니다. 프로젝트에 특정한 환경에 Django를 설치하면 프로젝트와 해당 요구 사항을 별도로 처리할 수 있습니다.
애플리케이션을 실행하고 나면 Django 앱과 인터페이스하도록 Apache를 구성합니다. HTTP 요청을 WSGI라는 사양으로 정의된 예측 가능한 애플리케이션 형식으로 변환할 수 있는 mod_wsgi
Apache 모듈로 이 작업을 수행합니다. 이 가이드의 링크된 섹션을 읽으면 WSGI에 대해 자세히 알아볼 수 있습니다.
시작하자.
Ubuntu 리포지토리에서 패키지 설치
프로세스를 시작하려면 Ubuntu 리포지토리에서 필요한 모든 항목을 다운로드하여 설치합니다. 여기에는 Apache 웹 서버, Django 앱과 인터페이스하는 데 사용되는 mod_wsgi
모듈 및 Python 관련 다운로드에 사용할 수 있는 Python 패키지 관리자인 pip
가 포함됩니다. 도구.
필요한 모든 것을 얻으려면 서버의 로컬 패키지 색인을 업데이트한 다음 적절한 패키지를 설치하십시오.
Python 2와 함께 Django를 사용하는 경우 필요한 명령은 다음과 같습니다.
sudo apt-get update
sudo apt-get install python-pip apache2 libapache2-mod-wsgi
대신 Python 3과 함께 Django를 사용하는 경우 대체 Apache 모듈이 필요합니다. 이 경우 적절한 명령은 다음과 같습니다.
sudo apt-get update
sudo apt-get install python3-pip apache2 libapache2-mod-wsgi-py3
튜토리얼의 나머지 부분을 위해 가상 환경 외부에서 작업할 때 Python 3를 사용하는 경우 pip
를 pip3
로 바꿉니다.
Python 가상 환경 구성
이제 Ubuntu 리포지토리의 구성 요소가 있으므로 Django 프로젝트 작업을 시작할 수 있습니다. 첫 번째 단계는 Django 프로젝트가 시스템 도구 및 작업 중인 다른 Python 프로젝트와 분리되도록 Python 가상 환경을 만드는 것입니다.
이러한 환경을 만들려면 virtualenv
명령을 설치해야 합니다. pip
를 사용하여 얻을 수 있습니다.
sudo pip install virtualenv
virtualenv
가 설치되면 프로젝트 구성을 시작할 수 있습니다. 프로젝트를 보관할 디렉터리를 만들고 디렉터리로 이동합니다.
mkdir ~/myproject
cd ~/myproject
프로젝트 디렉터리 내에서 다음을 입력하여 Python 가상 환경을 만듭니다.
virtualenv myprojectenv
이렇게 하면 myproject
디렉토리 내에 myprojectenv
라는 디렉토리가 생성됩니다. 내부에는 로컬 버전의 Python과 로컬 버전의 pip
가 설치됩니다. 이를 사용하여 프로젝트에 대해 격리된 Python 환경을 설치하고 구성할 수 있습니다.
프로젝트의 Python 요구 사항을 설치하기 전에 가상 환경을 활성화해야 합니다. 다음을 입력하면 됩니다.
source myprojectenv/bin/activate
이제 Python 가상 환경 내에서 작업 중임을 나타내도록 프롬프트가 변경되어야 합니다. 다음과 같이 표시됩니다. (myprojectenv)user@host:~/myproject$
.
가상 환경이 활성화된 상태에서 다음을 입력하여 pip
의 로컬 인스턴스로 Django를 설치합니다.
pip install django
새 Django 프로젝트 생성 및 구성
이제 Django가 가상 환경에 설치되었으므로 실제 Django 프로젝트 파일을 만들 수 있습니다.
장고 프로젝트 생성
이미 프로젝트 디렉토리가 있으므로 Django에게 여기에 파일을 설치하도록 지시합니다. 실제 코드가 포함된 두 번째 수준의 디렉터리를 생성하고 이 디렉터리에 관리 스크립트를 배치합니다. 이것의 핵심은 Django가 현재 디렉토리에 파일을 생성하도록 지시하는 끝에 있는 점입니다.
django-admin.py startproject myproject .
프로젝트 설정 조정
새로 만든 프로젝트 파일로 가장 먼저 해야 할 일은 설정을 조정하는 것입니다. 텍스트 편집기로 설정 파일을 엽니다.
nano myproject/settings.py
이 가이드에서는 단순화를 위해 기본 SQLite 데이터베이스를 사용할 것이므로 실제로 너무 많이 변경할 필요는 없습니다. 우리는 Django가 정적 파일을 배치하여 웹 서버가 이러한 파일을 쉽게 제공할 수 있도록 정적 파일 디렉토리를 구성하는 데 중점을 둘 것입니다.
파일 맨 아래에 이 디렉토리를 구성하는 행을 추가합니다. Django는 STATIC_ROOT
설정을 사용하여 이러한 파일이 있어야 하는 디렉토리를 결정합니다. 프로젝트의 기본 디렉토리에서 "static\이라는 디렉토리를 사용하도록 Python을 약간 사용할 것입니다.
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
완료되면 파일을 저장하고 닫습니다.
초기 프로젝트 설정 완료
이제 관리 스크립트를 사용하여 초기 데이터베이스 스키마를 SQLite 데이터베이스로 마이그레이션할 수 있습니다.
cd ~/myproject
./manage.py makemigrations
./manage.py migrate
다음을 입력하여 프로젝트의 관리 사용자를 만듭니다.
./manage.py createsuperuser
사용자 이름을 선택하고 이메일 주소를 제공하고 암호를 선택하고 확인해야 합니다.
다음을 입력하여 구성한 디렉터리 위치에 모든 정적 콘텐츠를 수집할 수 있습니다.
./manage.py collectstatic
작업을 확인해야 합니다. 정적 파일은 프로젝트 디렉토리 내의 static
디렉토리에 배치됩니다.
마지막으로 다음 명령으로 Django 개발 서버를 시작하여 프로젝트를 테스트할 수 있습니다.
./manage.py runserver 0.0.0.0:8000
웹 브라우저에서 서버의 도메인 이름 또는 IP 주소를 방문하고 :8000
:
http://server_domain_or_IP:8000
기본 Django 색인 페이지가 표시되어야 합니다.

주소 표시줄의 URL 끝에 /admin
을 추가하면 createsuperuser
명령으로 생성한 관리 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다.

인증 후 기본 Django 관리 인터페이스에 액세스할 수 있습니다.

탐색이 끝나면 터미널 창에서 CTRL-C를 눌러 개발 서버를 종료합니다.
이제 당분간은 Django 사용이 끝났으므로 다음을 입력하여 가상 환경을 종료할 수 있습니다.
deactivate
아파치 구성
이제 Django 프로젝트가 작동하므로 Apache를 프런트 엔드로 구성할 수 있습니다. 수신하는 클라이언트 연결은 mod_wsgi
모듈을 사용하여 Django 애플리케이션이 예상하는 WSGI 형식으로 변환됩니다. 이전에 설치할 때 자동으로 활성화되어 있어야 합니다.
WSGI 패스를 구성하려면 기본 가상 호스트 파일을 편집해야 합니다.
sudo nano /etc/apache2/sites-available/000-default.conf
파일에 이미 있는 지시문을 유지할 수 있습니다. 몇 가지 추가 항목만 추가하면 됩니다.
시작하려면 정적 파일을 구성하겠습니다. 우리는 별칭을 사용하여 /static
로 시작하는 모든 요청을 프로젝트 폴더 내의 "static\ 디렉토리에 매핑하도록 Apache에 지시할 것입니다. 이전에 정적 자산을 수집했습니다. 별칭을 설정하고 그런 다음 디렉터리 블록을 사용하여 해당 디렉터리에 대한 액세스 권한을 부여합니다.
<VirtualHost *:80>
. . .
Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>
</VirtualHost>
다음으로 Django 코드가 저장된 두 번째 수준 프로젝트 디렉토리 내의 wsgi.py
파일에 대한 액세스 권한을 부여합니다. 이를 위해 내부에 파일 섹션이 있는 디렉토리 섹션을 사용합니다. 이 중첩 구조 내부의 파일에 대한 액세스 권한을 부여합니다.
<VirtualHost *:80>
. . .
Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>
<Directory /home/user/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
이것이 구성되면 실제로 WSGI 패스를 처리하는 파일 부분을 구성할 준비가 된 것입니다. 데몬 모드를 사용하여 권장 구성인 WSGI 프로세스를 실행합니다. WSGIDaemonProcess
지시문을 사용하여 이를 설정할 수 있습니다.
이 지시문은 프로세스에 대해 임의의 이름을 사용합니다. 일관성을 유지하기 위해 myproject
를 사용할 것입니다. 그런 다음 프로젝트의 상위 디렉토리에 대한 Python 경로를 설정합니다. 이 가이드에서는 /home/user/myproject
가 됩니다. 가상 환경을 사용했기 때문에 Python 홈도 가상 환경의 루트로 설정해야 합니다. 이렇게 하면 Apache가 프로젝트를 실행하는 데 필요한 다른 모든 Python 코드를 찾을 수 있습니다.
그런 다음 프로세스 그룹을 지정해야 합니다. 이것은 WSGIDaemonProcess
지시문(이 경우 myproject
)에 대해 선택한 것과 동일한 이름을 가리켜야 합니다. 마지막으로 Apache가 루트 도메인에 대한 요청을 wsgi.py
파일에 전달하도록 스크립트 별칭을 설정해야 합니다.
<VirtualHost *:80>
. . .
Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
Require all granted
</Directory>
<Directory /home/user/myproject/myproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess myproject python-path=/home/user/myproject python-home=/home/user/myproject/myprojectenv
WSGIProcessGroup myproject
WSGIScriptAlias / /home/user/myproject/myproject/wsgi.py
</VirtualHost>
이러한 변경을 마치면 파일을 저장하고 닫습니다.
일부 권한 문제 마무리
이 문서에서 사용되는 기본값인 SQLite 데이터베이스를 사용하는 경우 이 파일에 대한 Apache 프로세스 액세스를 허용해야 합니다.
그렇게 하려면 먼저 데이터베이스의 그룹 소유자가 읽고 쓸 수 있도록 권한을 변경해야 합니다. 데이터베이스 파일은 기본적으로 db.sqlite3
라고 하며 기본 프로젝트 디렉토리에 있어야 합니다.
chmod 664 ~/myproject/db.sqlite3
그런 다음 Apache가 실행되는 그룹, www-data
그룹, 파일의 그룹 소유권을 부여해야 합니다.
sudo chown :www-data ~/myproject/db.sqlite3
파일에 쓰려면 데이터베이스의 상위 디렉토리에 대한 Apache 그룹 소유권도 부여해야 합니다.
sudo chown :www-data ~/myproject
이러한 단계가 완료되면 변경 사항을 구현하기 위해 Apache 서비스를 다시 시작할 준비가 된 것입니다. 다음을 입력하여 Apache를 다시 시작합니다.
sudo service apache2 restart
이제 포트를 지정하지 않고 서버의 도메인 이름이나 IP 주소로 이동하여 Django 사이트에 액세스할 수 있습니다. 일반 사이트와 관리 인터페이스가 예상대로 작동해야 합니다.
결론
이 가이드에서는 자체 가상 환경에서 Django 프로젝트를 설정했습니다. 우리는 클라이언트 요청을 처리하고 Django 앱과 인터페이스하기 위해 mod_wsgi
로 Apache를 구성했습니다.
Django는 고유한 요소에 집중할 수 있도록 많은 공통 부분을 제공하여 프로젝트 및 애플리케이션 생성을 간단하게 만듭니다. 이 문서에서 설명하는 일반 도구 체인을 활용하면 단일 서버에서 생성한 애플리케이션을 쉽게 제공할 수 있습니다.