웹사이트 검색

Ubuntu 14.04에서 uWSGI 및 Nginx로 Django 애플리케이션을 제공하는 방법


소개

Django는 Python 애플리케이션이나 웹 사이트를 시작하는 데 도움이 되는 강력한 웹 프레임워크입니다. Django에는 로컬에서 코드를 테스트하기 위한 간소화된 개발 서버가 포함되어 있지만 생산과 관련된 약간의 작업이라도 더 안전하고 강력한 웹 서버가 필요합니다.

이 가이드에서는 Django 애플리케이션을 지원하고 제공하기 위해 Ubuntu 14.04에서 일부 구성 요소를 설치하고 구성하는 방법을 보여줍니다. 애플리케이션과 인터페이스하도록 uWSGI 애플리케이션 컨테이너 서버를 구성합니다. 그런 다음 uWSGI에 대한 리버스 프록시로 Nginx를 설정하여 앱을 제공하기 위한 보안 및 성능 기능에 액세스할 수 있습니다.

전제 조건 및 목표

이 가이드를 완료하려면 sudo 권한이 구성된 루트가 아닌 사용자가 있는 새로운 Ubuntu 14.04 서버 인스턴스가 있어야 합니다. 초기 서버 설정 가이드를 실행하여 이를 설정하는 방법을 배울 수 있습니다.

우리는 두 개의 서로 다른 가상 환경에 Django를 설치할 것입니다. 이렇게 하면 프로젝트와 해당 요구 사항을 별도로 처리할 수 있습니다. 다중 프로젝트 환경에서 단계를 실행할 수 있도록 두 개의 샘플 프로젝트를 만들 것입니다.

응용 프로그램이 있으면 uWSGI 응용 프로그램 서버를 설치하고 구성합니다. 이는 HTTP를 사용하여 클라이언트 요청을 애플리케이션이 처리할 수 있는 Python 호출로 변환하는 애플리케이션에 대한 인터페이스 역할을 합니다. 그런 다음 고성능 연결 처리 메커니즘과 구현하기 쉬운 보안 기능을 활용하기 위해 uWSGI 앞에 Nginx를 설정합니다.

시작하자.

VirtualEnv 및 VirtualEnvWrapper 설치 및 구성

각각의 요구 사항을 격리하기 위해 자체 가상 환경에 Django 프로젝트를 설치할 것입니다. 이를 위해 Python 가상 환경을 생성할 수 있는 virtualenvvirtualenv 작업에 사용성 개선을 추가하는 virtualenvwrapper를 설치합니다. 흐름.

Python 패키지 관리자인 pip를 사용하여 이 두 구성 요소를 모두 설치합니다. 이는 Ubuntu 리포지토리에서 얻을 수 있습니다.

sudo apt-get update
sudo apt-get install python-pip

이 가이드에서는 Python 버전 2를 사용하고 있습니다. 코드에서 Python 3을 사용하는 경우 python3-pip 패키지를 설치할 수 있습니다. 그런 다음 가상 환경 외부에서 작업할 때 이 가이드의 pip 명령을 pip3 명령으로 대체해야 합니다.

이제 pip가 설치되었으므로 다음을 입력하여 virtualenvvirtualenvwrapper를 전역적으로 설치할 수 있습니다.

sudo pip install virtualenv virtualenvwrapper

이러한 구성 요소가 설치되면 이제 virtualenvwrapper 스크립트와 함께 작동하는 데 필요한 정보로 셸을 구성할 수 있습니다. 우리의 가상 환경은 쉽게 액세스할 수 있도록 모두 Env라는 홈 폴더의 디렉터리 내에 배치됩니다. 이는 WORKON_HOME이라는 환경 변수를 통해 구성됩니다. 이것을 쉘 초기화 스크립트에 추가하고 가상 환경 래퍼 스크립트를 소싱할 수 있습니다.

Python 3 및 pip3 명령을 사용하는 경우 셸 초기화 스크립트에도 다음 줄을 추가해야 합니다.

echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.bashrc

사용 중인 Python 버전에 관계없이 다음 명령을 실행해야 합니다.

echo "export WORKON_HOME=~/Env" >> ~/.bashrc
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bashrc

이제 현재 세션에서 이 기능을 사용할 수 있도록 셸 초기화 스크립트를 소싱합니다.

source ~/.bashrc

이제 가상 환경 정보를 저장할 홈 폴더에 Env라는 디렉토리가 있어야 합니다.

Django 프로젝트 만들기

이제 가상 환경 도구가 있으므로 두 개의 가상 환경을 만들고 각 환경에 Django를 설치하고 두 개의 프로젝트를 시작합니다.

첫 번째 프로젝트 만들기

virtualenvwrapper 스크립트가 제공하는 몇 가지 명령을 사용하여 가상 환경을 쉽게 만들 수 있습니다.

다음을 입력하여 첫 번째 사이트 또는 프로젝트의 이름으로 첫 번째 가상 환경을 만듭니다.

mkvirtualenv firstsite

이렇게 하면 가상 환경이 생성되고 그 안에 Pythonpip가 설치되고 환경이 활성화됩니다. 이제 새로운 가상 환경 내에서 작업 중임을 나타내도록 프롬프트가 변경됩니다. 다음과 같이 표시됩니다: (firstsite)user@hostname:~$. 괄호 안의 값은 가상 환경의 이름입니다. pip를 통해 설치된 모든 소프트웨어는 이제 글로벌 시스템이 아닌 가상 환경에 설치됩니다. 이렇게 하면 프로젝트별로 패키지를 격리할 수 있습니다.

첫 번째 단계는 Django 자체를 설치하는 것입니다. 가상 환경에 로컬로 설치하기 때문에 sudo 없이 pip를 사용할 수 있습니다.

pip install django

Django가 설치되면 다음을 입력하여 첫 번째 샘플 프로젝트를 만들 수 있습니다.

cd ~
django-admin.py startproject firstsite

이렇게 하면 홈 디렉토리 내에 firstsite라는 디렉토리가 생성됩니다. 이 안에는 프로젝트의 다양한 측면을 처리하는 데 사용되는 관리 스크립트와 실제 프로젝트 코드를 저장하는 데 사용되는 동일한 이름의 다른 디렉토리가 있습니다.

샘플 프로젝트에 대한 최소 요구 사항 설정을 시작할 수 있도록 첫 번째 수준 디렉터리로 이동합니다.

cd ~/firstsite

데이터베이스를 마이그레이션하여 프로젝트에서 사용할 SQLite 데이터베이스를 초기화합니다. 원하는 경우 응용 프로그램에 대한 대체 데이터베이스를 설정할 수 있지만 이 가이드의 범위를 벗어납니다.

./manage.py migrate

이제 프로젝트 디렉터리에 db.sqlite3라는 데이터베이스 파일이 있어야 합니다. 이제 다음을 입력하여 관리 사용자를 만들 수 있습니다.

./manage.py createsuperuser

사용자 이름을 선택하고 연락처 이메일 주소를 제공한 다음 암호를 선택하고 확인해야 합니다.

다음으로 텍스트 편집기로 프로젝트의 설정 파일을 엽니다.

nano firstsite/settings.py

사이트를 제공하기 위해 Nginx를 설정할 것이므로 사이트의 정적 자산을 보관할 디렉토리를 구성해야 합니다. 이렇게 하면 Nginx가 이를 직접 제공할 수 있으며 이는 성능에 긍정적인 영향을 미칠 것입니다. Django에게 프로젝트의 기본 디렉토리에 있는 static이라는 디렉토리에 배치하도록 지시할 것입니다. 이 동작을 구성하려면 파일 맨 아래에 다음 행을 추가하십시오.

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

완료되면 파일을 저장하고 닫습니다. 이제 사이트의 정적 요소를 수집하고 다음을 입력하여 해당 디렉토리에 배치합니다.

./manage.py collectstatic

"yes\를 입력하여 작업을 확인하고 정적 콘텐츠를 수집할 수 있습니다. 프로젝트 디렉터리에 static이라는 새 디렉터리가 있을 것입니다.

모든 것이 중단되면 개발 서버를 임시로 시작하여 프로젝트를 테스트할 수 있습니다. 유형:

./manage.py runserver 0.0.0.0:8080

이렇게 하면 포트 8080에서 개발 서버가 시작됩니다. 브라우저에서 8080 다음에 서버의 도메인 이름 또는 IP 주소를 방문하십시오.

http://server_domain_or_IP:8080

다음과 같은 페이지가 표시됩니다.

브라우저 주소 표시줄의 URL 끝에 /admin을 추가하면 관리자 로그인 페이지로 이동합니다.

createsuperuser 명령으로 선택한 관리 로그인 자격 증명을 사용하여 서버에 로그인합니다. 그러면 관리 인터페이스에 액세스할 수 있습니다.

이 기능을 테스트한 후 터미널에 CTRL-C를 입력하여 개발 서버를 중지합니다. 이제 두 번째 프로젝트로 넘어갈 수 있습니다.

두 번째 프로젝트 만들기

두 번째 프로젝트는 첫 번째와 정확히 같은 방식으로 생성됩니다. 이미 한 번 완료한 것으로 간주하여 이 섹션의 설명을 요약합니다.

홈 디렉터리로 돌아가 새 프로젝트를 위한 두 번째 가상 환경을 만듭니다. 활성화되면 이 새 환경 내부에 Django를 설치합니다.

cd ~
mkvirtualenv secondsite
pip install django

새 환경이 생성 변경되어 이전 가상 환경을 그대로 둡니다. 이 Django 인스턴스는 구성한 다른 인스턴스와 완전히 별개입니다. 이를 통해 독립적으로 관리하고 필요에 따라 사용자 정의할 수 있습니다.

두 번째 프로젝트를 만들고 프로젝트 디렉터리로 이동합니다.

django-admin.py startproject secondsite
cd ~/secondsite

데이터베이스를 초기화하고 관리 사용자를 생성합니다.

./manage.py migrate
./manage.py createsuperuser

설정 파일을 엽니다.

nano secondsite/settings.py

이전 프로젝트에서와 마찬가지로 정적 파일의 위치를 추가합니다.

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

파일을 저장하고 닫습니다. 이제 다음을 입력하여 해당 디렉터리에 정적 요소를 수집합니다.

./manage.py collectstatic

마지막으로 개발 서버를 실행하여 사이트를 테스트합니다.

./manage.py runserver 0.0.0.0:8080

다음에서 일반 사이트를 확인해야 합니다.

http://server_domain_or_IP:8080

또한 관리 사이트에 로그인합니다.

http://server_domain_or_IP:8080/admin

모든 것이 예상대로 작동하는지 확인했으면 터미널에 CTRL-C를 입력하여 개발 서버를 중지합니다.

가상 환경에서 물러나기

이제 가이드의 Django 부분이 완료되었으므로 두 번째 가상 환경을 비활성화할 수 있습니다.

deactivate

Django 사이트 중 하나에서 다시 작업해야 하는 경우 해당 환경을 다시 활성화해야 합니다. workon 명령을 사용하여 이를 수행할 수 있습니다.

workon firstsite

또는:

workon secondsite

다시 말하지만 사이트 작업이 끝나면 비활성화하십시오.

deactivate

uWSGI 애플리케이션 서버 설정

이제 두 개의 Django 프로젝트를 설정하고 사용할 준비가 되었으므로 uWSGI를 구성할 수 있습니다. uWSGI는 WSGI라는 표준 인터페이스를 통해 애플리케이션과 통신할 수 있는 애플리케이션 서버입니다. 이에 대해 자세히 알아보려면 Ubuntu 14.04에서 uWSGI 및 Nginx 설정에 대한 가이드의 이 섹션을 읽으십시오.

uWSGI 설치

위에 링크된 가이드와 달리 이 튜토리얼에서는 uWSGI를 전역적으로 설치합니다. 이렇게 하면 여러 Django 프로젝트를 처리할 때 마찰이 줄어듭니다. uWSGI를 설치하기 전에 소프트웨어가 의존하는 Python 개발 파일이 필요합니다. 우분투 리포지토리에서 직접 설치할 수 있습니다.

sudo apt-get install python-dev

이제 개발 파일을 사용할 수 있으므로 다음을 입력하여 pip를 통해 전역적으로 uWSGI를 설치할 수 있습니다.

sudo pip install uwsgi

사이트 중 하나에 대한 정보를 전달하여 이 애플리케이션 서버를 빠르게 테스트할 수 있습니다. 예를 들어 다음을 입력하여 첫 번째 프로젝트를 제공하도록 지시할 수 있습니다.

uwsgi --http :8080 --home /home/user/Env/firstsite --chdir /home/user/firstsite -w firstsite.wsgi

여기서는 uWSGI에게 ~/Env 디렉토리에 있는 가상 환경을 사용하고, 프로젝트 디렉토리로 변경하고, 저장된 wsgi.py 파일을 사용하도록 지시했습니다. 내부 firstsite 디렉토리 내에서 파일을 제공합니다. 데모를 위해 포트 8080에서 HTTP를 제공하도록 지시했습니다. 브라우저에서 서버의 도메인 이름 또는 IP 주소로 이동한 다음 :8080을 입력하면 사이트가 다시 표시됩니다(/admin 인터페이스의 정적 요소는 아직 작동하지 않음). 이 기능의 테스트를 마쳤으면 터미널에 CTRL-C를 입력합니다.

구성 파일 생성

명령줄에서 uWSGI를 실행하는 것은 테스트에 유용하지만 실제 배포에는 특별히 도움이 되지 않습니다. 대신 uWSGI를 "Emperor 모드\로 실행하여 마스터 프로세스가 구성 파일 집합이 제공된 별도의 애플리케이션을 자동으로 관리할 수 있도록 합니다.

구성 파일을 보관할 디렉토리를 만듭니다. 이것은 전역 프로세스이므로 구성 파일을 저장할 /etc/uwsgi/sites라는 디렉터리를 만듭니다. 만든 후 디렉터리로 이동합니다.

sudo mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites

이 디렉토리에 구성 파일을 배치합니다. 우리가 제공하는 각 프로젝트에 대한 구성 파일이 필요합니다. uWSGI 프로세스는 다양한 형식의 구성 파일을 사용할 수 있지만 단순성 때문에 .ini 파일을 사용합니다.

첫 번째 프로젝트에 대한 파일을 만들고 텍스트 편집기에서 엽니다.

sudo nano firstsite.ini

내부에서는 [uwsgi] 섹션 헤더로 시작해야 합니다. 모든 정보는 이 헤더 아래에 표시됩니다. 또한 변수를 사용하여 구성 파일을 더 재사용할 수 있도록 만들 것입니다. 헤더 뒤에 첫 번째 프로젝트의 이름으로 project라는 변수를 설정합니다. 사용자의 홈 디렉터리 경로와 함께 base라는 변수를 추가합니다.

[uwsgi]
project = firstsite
base = /home/user

다음으로 프로젝트를 올바르게 처리하도록 uWSGI를 구성해야 합니다. chdir 옵션을 설정하여 루트 프로젝트 디렉토리로 변경해야 합니다. %(variable_name) 구문을 사용하여 이전에 설정한 홈 디렉토리와 프로젝트 이름 설정을 결합할 수 있습니다. 이는 구성을 읽을 때 변수 값으로 대체됩니다.

비슷한 방식으로 프로젝트의 가상 환경을 표시합니다. 모듈을 설정함으로써 프로젝트와 인터페이스하는 방법을 정확히 나타낼 수 있습니다(프로젝트 디렉토리 내의 wsgi.py 파일에서 호출 가능한 "응용 프로그램\ 가져오기). 이러한 항목의 구성은 다음과 같습니다. 이와 같이:

[uwsgi]
project = firstsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

5명의 작업자가 있는 마스터 프로세스를 만들고 싶습니다. 다음을 추가하여 이를 수행할 수 있습니다.

[uwsgi]
project = firstsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = 5

다음으로 uWSGI가 연결을 수신하는 방법을 지정해야 합니다. uWSGI 테스트에서는 HTTP와 네트워크 포트를 사용했습니다. 그러나 Nginx를 리버스 프록시로 사용할 예정이므로 더 나은 옵션이 있습니다.

네트워크 포트를 사용하는 대신 모든 구성 요소가 단일 서버에서 작동하므로 Unix 소켓을 사용할 수 있습니다. 이것은 더 안전하고 더 나은 성능을 제공합니다. 이 소켓은 HTTP를 사용하지 않고 대신 uWSGI의 uwsgi 프로토콜을 구현합니다. 이 프로토콜은 다른 서버와 통신하기 위해 설계된 빠른 바이너리 프로토콜입니다. Nginx는 기본적으로 uwsgi 프로토콜을 사용하여 프록시할 수 있으므로 이것이 최선의 선택입니다.

또한 웹 서버에 쓰기 액세스 권한을 부여하므로 소켓의 권한도 수정할 것입니다. 서비스가 중지될 때 소켓 파일이 자동으로 정리되도록 vacuum 옵션을 설정합니다.

[uwsgi]
project = firstsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 664
vacuum = true

이로써 첫 번째 프로젝트의 uWSGI 구성이 완료되었습니다. 파일을 저장하고 닫습니다.

변수를 사용하여 파일을 설정하는 이점은 재사용이 매우 간단하다는 것입니다. 두 번째 구성 파일의 기반으로 사용할 첫 번째 프로젝트의 구성 파일을 복사합니다.

sudo cp /etc/uwsgi/sites/firstsite.ini /etc/uwsgi/sites/secondsite.ini

텍스트 편집기로 두 번째 구성 파일을 엽니다.

sudo nano /etc/uwsgi/sites/secondsite.ini

두 번째 프로젝트에서 작동하도록 하려면 이 파일에서 단일 값만 변경하면 됩니다. 두 번째 프로젝트에 사용한 이름으로 project 변수를 수정합니다.

[uwsgi]
project = secondsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 664
vacuum = true

완료되면 파일을 저장하고 닫습니다. 이제 두 번째 프로젝트를 시작할 준비가 되었습니다.

uWSGI용 Upstart 스크립트 생성

이제 Django 프로젝트를 제공하는 데 필요한 구성 파일이 있지만 아직 프로세스를 자동화하지 않았습니다. 다음으로 부팅 시 uWSGI를 자동으로 시작하는 Upstart 스크립트를 생성합니다.

다음 파일을 확인하는 /etc/init 디렉토리에 Upstart 스크립트를 생성합니다.

sudo nano /etc/init/uwsgi.conf

uWSGI 서비스에 대한 설명을 설정하고 자동으로 실행되어야 하는 런레벨을 지정하는 것으로 시작하십시오. 기존의 다중 사용자 런레벨인 런레벨 2, 3, 4 및 5에서 실행되도록 설정합니다.

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

다음으로 프로세스가 실행될 사용자 이름과 그룹을 설정해야 합니다. 우리는 모든 파일을 소유하고 있기 때문에 우리 자신의 사용자 이름으로 프로세스를 실행할 것입니다. 그룹의 경우 Nginx가 실행될 www-data 그룹으로 설정해야 합니다. uWSGI 구성 파일의 소켓 설정은 웹 서버가 소켓에 쓸 수 있도록 허용해야 합니다. 아래의 사용자 이름을 서버의 사용자 이름과 일치하도록 변경하십시오.

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

setuid user
setgid www-data

마지막으로 실행할 실제 명령을 지정해야 합니다. 황제 모드에서 uWSGI를 시작하고 구성 파일을 저장한 디렉토리를 전달해야 합니다. uWSGI는 파일을 읽고 각 프로젝트를 제공합니다.

description "uWSGI application server in Emperor mode"

start on runlevel [2345]
stop on runlevel [!2345]

setuid user
setgid www-data

exec /usr/local/bin/uwsgi --emperor /etc/uwsgi/sites

완료되면 파일을 저장하고 닫습니다. Nginx를 설치하기 전까지는 www-data 그룹을 사용할 수 없기 때문에 아직 uWSGI를 시작하지 않을 것입니다.

Nginx를 역방향 프록시로 설치 및 구성

uWSGI를 구성하고 사용할 준비가 되었으면 이제 Nginx를 리버스 프록시로 설치하고 구성할 수 있습니다. 이는 Ubuntu의 기본 리포지토리에서 다운로드할 수 있습니다.

sudo apt-get install nginx

Nginx가 설치되면 계속 진행하여 각 프로젝트에 대한 서버 블록 구성 파일을 만들 수 있습니다. 서버 블록 구성 파일을 생성하여 첫 번째 프로젝트부터 시작합니다.

sudo nano /etc/nginx/sites-available/firstsite

내부에서 첫 번째 프로젝트에 액세스할 수 있는 포트 번호와 도메인 이름을 표시하여 서버 블록을 시작할 수 있습니다. 각각에 대한 도메인 이름이 있다고 가정합니다.

server {
    listen 80;
    server_name firstsite.com www.firstsite.com;
}

다음으로 파비콘을 찾지 못해도 걱정하지 말라고 Nginx에 알릴 수 있습니다. 또한 사이트의 정적 요소를 수집한 정적 파일 디렉토리의 위치를 가리킬 것입니다.

server {
    listen 80;
    server_name firstsite.com www.firstsite.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/firstsite;
    }
}

그런 다음 uwsgi_pass 지시문을 사용하여 트래픽을 소켓 파일로 전달할 수 있습니다. 우리가 구성한 소켓 파일은 firstproject.sock이며 프로젝트 디렉터리에 있습니다. include 지시문을 사용하여 연결을 처리하는 데 필요한 uwsgi 매개변수를 포함합니다.

server {
    listen 80;
    server_name firstsite.com www.firstsite.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/firstsite;
    }

    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/home/user/firstsite/firstsite.sock;
    }
}

이것이 실제로 필요한 모든 구성입니다. 완료되면 파일을 저장하고 닫습니다.

이것을 두 번째 프로젝트의 Nginx 구성 파일의 기초로 사용할 것입니다. 지금 복사하십시오.

sudo cp /etc/nginx/sites-available/firstsite /etc/nginx/sites-available/secondsite

텍스트 편집기에서 새 파일을 엽니다.

sudo nano /etc/nginx/sites-available/secondsite

여기에서 secondsite에 대한 참조로 firstsite에 대한 참조를 변경해야 합니다. 또한 두 번째 프로젝트가 다른 도메인 이름에 응답하도록 server_name을 수정해야 합니다. 완료되면 다음과 같이 표시됩니다.

server {
    listen 80;
    server_name secondsite.com www.secondsite.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/user/secondsite;
    }

    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/home/user/secondsite/secondsite.sock;
    }
}

완료되면 파일을 저장하고 닫습니다.

다음으로 새 구성 파일을 모두 Nginx의 sites-enabled 디렉토리에 연결하여 활성화합니다.

sudo ln -s /etc/nginx/sites-available/firstsite /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-available/secondsite /etc/nginx/sites-enabled

다음을 입력하여 구성 구문을 확인하십시오.

sudo service nginx configtest

구문 오류가 감지되지 않으면 Nginx 서비스를 다시 시작하여 새 구성을 로드할 수 있습니다.

sudo service nginx restart

앞에서 기억한다면 실제로 uWSGI 서버를 시작한 적이 없습니다. 다음을 입력하여 지금 수행하십시오.

sudo service uwsgi start

이제 각각의 도메인 이름으로 이동하여 두 프로젝트에 연결할 수 있습니다. 공용 인터페이스와 관리 인터페이스 모두 예상대로 작동해야 합니다.

결론

이 가이드에서는 각각 자체 가상 환경에서 두 개의 Django 프로젝트를 설정했습니다. 각 프로젝트에 대해 구성된 가상 환경을 사용하여 각 프로젝트를 독립적으로 제공하도록 uWSGI를 구성했습니다. 그런 다음 클라이언트 연결을 처리하고 클라이언트 요청에 따라 올바른 프로젝트를 제공하기 위해 리버스 프록시 역할을 하도록 Nginx를 설정했습니다.

Django는 고유한 요소에 집중할 수 있도록 많은 공통 부분을 제공하여 프로젝트 및 애플리케이션 생성을 간단하게 만듭니다. 이 문서에서 설명하는 일반 도구 체인을 활용하면 단일 서버에서 생성한 애플리케이션을 쉽게 제공할 수 있습니다.