웹사이트 검색

Postgres, Nginx 및 Gunicorn으로 Django를 설치 및 구성하는 방법


전제 조건

이 자습서에서는 Debian 7 또는 유사한 Linux 배포판(예: Ubuntu)을 사용하여 드롭릿(VPS)을 이미 설정했다고 가정합니다. 아직 이 작업을 수행하지 않은 경우 여기에서 물방울 설정에 대한 자습서를 따르십시오.

편의상 이 튜토리얼을 두 부분으로 나누었습니다. 첫 번째 부분(1~6단계)에서는 설치만 다룹니다. 설치하는 데 도움이 필요한 고급 Django 사용자라면 6단계에서 멈출 수 있습니다. 이미 모든 것이 설치되어 있고 모든 것을 구성하는 방법을 알고 싶다면 7단계로 건너뛰십시오. 처음부터 끝까지 도움이 필요한 경우 단계를 순서대로 진행하면 문제가 없을 것입니다. 시작하자!

1단계: 패키지 업데이트

무엇을 하기 전에 VPS에 설치된 모든 패키지가 최신인지 확인해야 합니다. 이렇게 하려면 SSH를 통해 원하는 VPS에 연결하고 다음 명령을 실행합니다.

sudo apt-get 업데이트

sudo apt-get 업그레이드

첫 번째 명령은 apt-get을 통해 관리되는 패키지의 모든 업데이트를 다운로드합니다. 두 번째 명령은 다운로드한 업데이트를 설치합니다. 설치할 업데이트가 있는 경우 위 명령을 실행한 후 업데이트를 설치할지 여부를 묻는 메시지가 표시될 수 있습니다. 이 경우 "y\를 입력한 다음 프롬프트가 표시되면 "Enter\를 누르십시오.

2단계: Virtualenv 설치 및 생성

virtualenv 설치는 매우 간단합니다. 아래 명령을 실행하십시오.

sudo apt-get install python-virtualenv

그게 전부입니다! 이제 virtualenv를 생성하여 Django 및 기타 Python 패키지를 그 안에 설치할 수 있습니다.

sudo virtualenv /opt/myenv

새 디렉토리 \myenv가 \/opt 디렉토리에 생성되었음을 알 수 있습니다. 이것은 우리의 virtualenv가 살게 될 곳입니다. "/opt/myenv”를 virtualenv를 설치하려는 경로로 바꾸십시오. 저는 일반적으로 내 환경을 /opt에 넣지만 이것은 엄격하게 선호됩니다. 어떤 사람들은 루트에 "webapps”라는 디렉토리를 만듭니다. VPS의. 가장 적합한 방법을 선택하십시오.

3단계: Django 설치

이제 virtualenv를 활성화하여 Python 패키지를 설치할 때 virtualenv에 설치되도록 해야 합니다. 다음은 virtualenv를 활성화하는 방법입니다.

source /opt/myenv/bin/activate

이제 "(myenv)\가 터미널 프롬프트의 시작 부분에 추가된 것을 볼 수 있습니다. 이것은 VPS에 여러 개의 virtualenv가 있는 경우 virtualenv가 언제 활성화되고 어떤 virtualenv가 활성화되는지 알 수 있도록 도와줍니다.

virtualenv가 활성화되면 이제 Django를 설치할 수 있습니다. 이를 위해 easy_install과 매우 유사한 Python 패키지 관리자인 pip를 사용합니다. 실행할 명령은 다음과 같습니다.

pip 설치 django

이제 virtualenv에 Django가 설치되었습니다! 이제 데이터베이스 서버를 가동해 보겠습니다.

4단계: PostgreSQL 설치

대부분의 Django 사용자는 PostgreSQL을 데이터베이스 서버로 사용하는 것을 선호합니다. MySQL보다 훨씬 강력하며 Django ORM은 MySQL, MSSQL 등보다 PostgreSQL에서 훨씬 더 잘 작동합니다.

이 부분에 대해 virtualenv를 활성화할 필요가 없으므로 다음 명령을 실행하여 비활성화합니다.

비활성화

이것은 현재 활성화된 virtualenv를 항상 비활성화합니다. 이제 다음 명령으로 Django와 함께 작동하려면 PostgreSQL에 대한 종속성을 설치해야 합니다.

sudo apt-get install libpq-dev python-dev

이제 이 작업을 완료했으므로 다음과 같이 PostgreSQL을 설치합니다.

sudo apt-get install postgresql postgresql-contrib

이제 PostgreSQL이 컴퓨터에 설치되었으며 사용할 준비가 되었습니다.

5단계: NGINX 설치

NGINX는 놀랍도록 빠르고 가벼운 웹 서버입니다. Django 앱의 정적 파일을 제공하는 데 사용할 것입니다. 설치하려면 다음 명령을 실행하십시오.

sudo apt-get install nginx

여전히 NGINX를 시작해야 하지만 VPS 구성을 시작할 때 이를 검토할 것입니다.

6단계: Gunicorn 설치

Gunicorn은 매우 강력한 Python WSGI HTTP 서버입니다. Python 패키지이므로 설치하려면 먼저 virtualenv를 활성화해야 합니다. 그 방법은 다음과 같습니다.

source /opt/myenv/bin/activate

터미널 프롬프트 시작 부분에 추가된 "myenv\가 보이는지 확인하세요. 이제 virtualenv가 활성화된 상태에서 다음 명령을 실행하세요.

pip install gunicorn

이제 Gunicorn이 virtualenv에 설치됩니다.

원하는 모든 것이 설치되는 것이라면 여기에서 중단하십시오. 그렇지 않으면 함께 작동하도록 모든 것을 구성하고 웹에서 다른 사람이 앱에 액세스할 수 있도록 하는 방법에 대한 지침을 계속 확인하십시오.

7단계: PostgreSQL 구성

PostgreSQL로 작업하여 구성을 시작하겠습니다. PostgreSQL을 사용하여 데이터베이스를 생성하고, 사용자를 생성하고, 생성한 사용자에게 생성한 데이터베이스에 대한 액세스 권한을 부여해야 합니다. 다음 명령을 실행하여 시작합니다.

sudo su - 포스트그레스

이제 터미널 프롬프트에 "postgres@yourserver”가 표시되어야 합니다. 이 경우 다음 명령을 실행하여 데이터베이스를 생성하십시오.

createdb mydb

이제 데이터베이스가 생성되었으며 명령을 변경하지 않은 경우 "mydb\라는 이름이 지정됩니다. 원하는 대로 데이터베이스 이름을 지정할 수 있습니다. 이제 다음 명령을 사용하여 데이터베이스 사용자를 생성하십시오.

createuser -P

이제 일련의 6가지 프롬프트를 만나게 됩니다. 첫 번째 사용자는 새 사용자의 이름을 묻습니다. 원하는 이름을 사용하십시오. 다음 두 프롬프트는 비밀번호와 새 사용자의 비밀번호 확인을 위한 것입니다. 마지막 3개의 프롬프트는 "n\을 입력하고 "enter\를 누르십시오. 이렇게 하면 새 사용자가 액세스 권한을 부여한 항목에만 액세스할 수 있으며 다른 것은 없습니다. 이제 다음과 같이 PostgreSQL 명령줄 인터페이스를 활성화합니다.

<코드>psql

마지막으로 다음 명령을 사용하여 이 새 사용자에게 새 데이터베이스에 대한 액세스 권한을 부여합니다.

myuser에게 데이터베이스 mydb의 모든 권한 부여

이제 PostgreSQL 데이터베이스와 해당 데이터베이스에 액세스할 수 있는 사용자가 있습니다. 이제 Django를 설치하고 새 데이터베이스를 사용하도록 설정할 수 있습니다.

8단계: Django 프로젝트 생성

더 나아가려면 테스트할 Django 프로젝트가 필요합니다. 이를 통해 우리가 하고 있는 일이 제대로 작동하는지 확인할 수 있습니다. 다음과 같이 디렉토리를 virtualenv(제 경우에는 /opt/myenv)의 디렉토리로 변경합니다.

<코드>cd /opt/myenv

이제 virtualenv가 활성화되어 있는지 확인하십시오. 확실하지 않은 경우 다음 명령을 실행하여 활성화되었는지 확인하십시오.

source /opt/myenv/bin/activate

이제 virtualenv가 활성화된 상태에서 다음 명령을 실행하여 새 Django 프로젝트를 시작합니다.

django-admin.py startproject myproject

virtualenv 디렉터리 안에 "myproject\라는 새 디렉터리가 표시되어야 합니다. 여기에 새 Django 프로젝트 파일이 있습니다.

Django가 데이터베이스와 통신할 수 있으려면 PostgreSQL용 백엔드를 설치해야 합니다. 이를 위해 virtualenv가 활성화되어 있는지 확인하고 다음 명령을 실행합니다.

pip 설치 psycopg2

디렉토리를 새 "myproject\ 디렉토리로 변경한 다음 다음과 같이 "myproject\라고도 하는 하위 디렉토리로 변경합니다.

cd /opt/myenv/myproject/myproject

선택한 편집기로 settings.py 파일을 편집합니다.

나노 설정.py

데이터베이스 설정을 찾아 다음과 같이 편집합니다.

	DATABASES = {
    	'default': {
        	'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        	'NAME': 'mydb',                      # Or path to database file if using sqlite3.
        	# The following settings are not used with sqlite3:
        	'USER': 'myuser',
        	'PASSWORD': 'password',
        	'HOST': 'localhost',                      # Empty for localhost through domain sockets or 			'127.0.0.1' for localhost through TCP.
        	'PORT': '',                      # Set to empty string for default.
    	}
	}

파일을 저장하고 종료합니다. 이제 기본 Django 프로젝트 디렉토리(/opt/myenv/myproject)에서 한 디렉토리 위로 이동하십시오.

cd /opt/myenv/myproject

아직 다음 명령을 사용하지 않은 경우 virtualenv를 활성화하십시오.

source /opt/myenv/bin/activate

virtualenv가 활성화된 상태에서 Django가 초기 구성 및 기타 테이블을 데이터베이스에 추가할 수 있도록 다음 명령을 실행합니다.

python manage.py syncdb

어떤 테이블이 설치되었는지 설명하는 일부 출력과 수퍼유저를 만들 것인지 묻는 메시지가 표시되어야 합니다. 이것은 선택 사항이며 Django의 인증 시스템을 사용할 것인지 Django 관리자를 사용할 것인지에 따라 다릅니다.

9단계: Gunicorn 구성

Gunicorn 구성은 애플리케이션 요구 사항에 매우 구체적입니다. 여기에서 몇 가지 다른 설정으로 Gunicorn을 실행하는 방법에 대해 간단히 살펴보겠습니다.

먼저 기본 설정으로 Gunicorn을 실행해 보겠습니다. 기본 Gunicorn을 실행하는 명령은 다음과 같습니다.

gunicorn_django --bind yourdomainorip.com:8001

"yourdomainorip.com:8001을 교체하고 결과를 확인하십시오. Django 시작 화면이 표시되어야 합니다.

그러나 위 명령의 출력을 자세히 살펴보면 Gunicorn 작업자 하나만 부팅되었음을 알 수 있습니다. 대규모 VPS에서 대규모 애플리케이션을 시작한다면 어떨까요? 두려워하지 마세요! 명령을 다음과 같이 수정하기만 하면 됩니다.

gunicorn_django --workers=3 --bind yourdomainorip.com:8001

이제 1개의 작업자가 아닌 3개의 작업자가 부팅되었음을 알 수 있습니다. 필요에 따라 이 번호를 변경할 수 있습니다.

Gunicorn을 루트로 시작하는 명령을 실행했으므로 이제 Gunicorn이 루트로 실행됩니다. 원하지 않는다면? 다시 말하지만, 위의 명령을 약간 변경하여 다음을 수용할 수 있습니다.

gunicorn_django --workers=3 --user=nobody --bind yourdomainorip.com:8001

Gunicorn에 대한 추가 옵션을 설정하려면 Gunicorn을 실행할 때 호출할 수 있는 구성 파일을 설정하는 것이 가장 좋습니다. 이렇게 하면 Gunicorn 명령을 훨씬 더 짧고 쉽게 읽고 구성할 수 있습니다.

gunicorn에 대한 구성 파일을 원하는 위치에 배치할 수 있습니다. 간단히 하기 위해 virtualenv 디렉토리에 배치합니다. 다음과 같이 virtualenv의 디렉토리로 이동합니다.

<코드>cd /opt/myenv

이제 원하는 편집기로 구성 파일을 엽니다(아래 예에서는 nano가 사용됨).

sudo nano gunicorn_config.py

파일에 다음 콘텐츠를 추가합니다.

	command = '/opt/myenv/bin/gunicorn'
	pythonpath = '/opt/myenv/myproject'
	bind = '127.0.0.1:8001'
	workers = 3
	user = nobody

파일을 저장하고 종료합니다. 이 옵션이 하는 일은 gunicorn 바이너리에 대한 경로를 설정하고, Python 경로에 프로젝트 디렉토리를 추가하고, Gunicorn을 바인딩할 도메인 및 포트를 설정하고, gunicorn 작업자 수를 설정하고, Gunicorn이 실행될 사용자를 설정하는 것입니다.

이번에는 서버를 실행하기 위해 조금 더 긴 명령이 필요합니다. 프롬프트에 다음 명령을 입력합니다.

/opt/myenv/bin/gunicorn -c /opt/myenv/gunicorn_config.py myproject.wsgi

위의 명령에서 "-c\ 플래그를 전달한다는 것을 알 수 있습니다. 이것은 우리가 사용하려는 구성 파일이 있음을 gunicorn에 알리고 "-c\ 플래그 바로 뒤에 전달합니다. 마지막으로 Gunicorn이 WSGI 파일의 위치를 알 수 있도록 WSGI 파일에 Python 점선 표기법 참조를 전달합니다.

이러한 방식으로 Gunicorn을 실행하려면 자체 화면 세션에서 Gunicorn을 실행하거나(화면 사용에 익숙한 경우) "ctrl+z\를 누른 다음 "bg\ 및 "를 입력하여 프로세스를 백그라운드로 실행해야 합니다. Gunicorn 명령을 실행한 후 \입력하십시오. 이렇게 하면 현재 세션이 닫힌 후에도 프로세스가 계속 실행되도록 백그라운드에서 실행됩니다. VPS가 재부팅되거나 충돌이 발생한 경우 Gunicorn을 수동으로 시작하거나 다시 시작해야 하는 문제도 있습니다. 이 문제를 해결하기 위해 대부분의 사람들은 Supervisord를 사용하여 Gunicorn을 관리하고 필요에 따라 시작/재시작합니다.

마지막으로 이것은 Gunicorn에 대한 구성 옵션의 전체 목록이 결코 아닙니다. 이 주제에 대한 자세한 내용은 gunicorn.org에 있는 Gunicorn 설명서를 참조하십시오.

10단계: NGINX 구성

너무 몰두하기 전에 먼저 다음과 같이 NGINX를 시작하겠습니다.

sudo 서비스 nginx 시작

정적 파일을 처리하도록 NGINX만 설정하고 있으므로 먼저 정적 파일을 저장할 위치를 결정해야 합니다. Django 프로젝트의 settings.py 파일을 열고 STATIC_ROOT 줄을 다음과 같이 편집합니다.

	STATIC_ROOT = "/opt/myenv/static/"

이 경로는 원하는 위치에 있을 수 있습니다. 그러나 청결을 위해 일반적으로 Django 프로젝트 폴더 외부에 있지만 virtualenv 디렉토리 안에 있습니다.

이제 정적 파일이 위치할 위치를 설정했으므로 해당 파일을 처리하도록 NGINX를 구성하겠습니다. 다음 명령을 사용하여 새 NGINX 구성 파일을 엽니다("nano\를 선택한 편집기로 바꿀 수 있음).

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

파일 이름은 원하는 대로 지정할 수 있지만 일반적으로 구성 중인 사이트와 관련된 이름을 지정하는 것이 표준입니다. 이제 파일에 다음을 추가합니다.

	server {
        server_name yourdomainorip.com;

        access_log off;

		location /static/ {
        	alias /opt/myenv/static/;
    	}

    	location / {
                proxy_pass http://127.0.0.1:8001;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        }
	}

파일을 저장하고 종료합니다. 위의 구성은 NGINX가 yourdomainorip.com에서 요청한 모든 것을 제공하도록 설정했으며 Gunicorn이 실행하도록 지시한 포트 8001에서 localhost로 프록시됩니다. 다른 줄은 요청의 호스트 이름과 IP 주소가 Gunicorn에 전달되도록 합니다. 이것이 없으면 모든 요청의 IP 주소는 127.0.0.1이 되고 호스트 이름은 VPS 호스트 이름일 뿐입니다.

이제 이 구성 파일을 가리키는 /etc/nginx/sites-enabled 디렉토리에 심볼릭 링크를 설정해야 합니다. 그것이 NGINX가 이 사이트가 활성 상태임을 아는 방법입니다. 다음과 같이 디렉토리를 /etc/nginx/sites-enabled로 변경합니다.

cd /etc/nginx/sites-enabled

여기에서 다음 명령을 실행합니다.

sudo ln -s ../sites-available/myproject

이렇게 하면 NGINX가 사이트의 새 구성 파일을 존중하는 것을 알 수 있도록 필요한 심볼릭 링크가 생성됩니다.

또한 기본 nginx 서버 블록을 제거합니다.

\sudo rm 기본값'

하지만 NGINX가 변경 사항을 찾을 수 있도록 다시 시작해야 합니다. 이렇게 하려면 다음을 실행합니다.

sudo 서비스 nginx 재시작

그리고 그게 다야! 이제 Django가 설치되어 있고 PostgreSQL로 작업하고 있으며 정적 콘텐츠를 제공하는 NGINX와 앱 서버 역할을 하는 Gunicorn을 통해 앱에 웹 액세스가 가능합니다. 질문이나 추가 조언이 있으면 댓글 섹션에 남겨주세요.