Django 애플리케이션을 배포하는 방법 :

안녕하세요 여러분, 이것이 <»의 첫 번째 기사입니다. DesdeLinux (내 초안 xD에 있는 몇 가지 중) 이 내용이 여러분에게 도움이 되기를 바랍니다 😀

글쎄요, 저의 새 직장과 현재 직장에서 현재 여러 시스템을 Django로 마이그레이션하는 중이고 (얼마나 이상 하냐? xD) 제 작업 중 하나는 개발과는 별개로 이것들을 생산하는 것입니다. 실제 서버에서 애플리케이션을 프로덕션에 처음으로 넣었 기 때문에 좋은 견습생으로서 : $ 스택의 각 필수 패키지 (Gunicorn 및 Supervisord 무엇보다도)의 공식 문서를 읽기 시작했고 자습서 스페인어에서는 어떤 측면에서 나에게 명확하지 않았기 때문에 Django, Gunicorn, Supervisord, Nginx 및 Postgresql 스택을 기반으로 애플리케이션을 프로덕션에 적용하기 위해 따랐던 단계로 미니 가이드를 만들기로 결정했습니다.

내가 일하는 경우 서버는 여전히 Debian Squeeze에서 실행되지만 가이드는 다른 배포판에 대해 완전히 유효해야합니다. 그러니 요점으로 바로 들어가 시작하겠습니다.

저는 슈퍼 유저로 일할 것입니다. 먼저 다음 패키지가 필요합니다.

PIP -> Python 용 패키지 설치 및 관리 도구
aptitude install python-pip

Nginx에 -> 웹 서버 (역방향 프록시로 사용하고 정적 파일 'img, js, css'를 캐시하기 위해 사용합니다) 다음과 함께 설치합니다.
aptitude install nginx

슈퍼 바이저 -> 응용 프로그램은 훨씬 더 많이 사용되지만 우리 응용 프로그램을 관리하고 모니터링합니다. 다음과 함께 설치합니다.
aptitude install supervisor

가상 환경 -> 애플리케이션을위한 맞춤형 가상 실행 환경을 만드는 데 도움이됩니다. 다음과 함께 설치합니다.
aptitude install python-virtualenv

구니콘 -> 파이썬 용 웹 서버 (아직 설치하지 않을 것입니다)

이미 postgresql이 설치 및 구성되어 있어야한다고 가정합니다.

사이코프2 -> Python 용 Postgresql 커넥터 (아직 설치하지 않음)

virtualenv로 가상 환경 생성 :

먼저 프로덕션에 넣는 데 사용할 작업 디렉토리로 이동합니다.
cd /var/www/

그런 다음이 디렉토리에서 가상 환경을 만듭니다.
virtualenv ENV-nombreApp

방금 만든 virtualenv 디렉토리로 이동합니다.
cd ENV-nombreAPP

이 디렉토리에 애플리케이션을 복사하고 이제 다음을 사용하여 환경을 활성화합니다.
source bin/activate

프롬프트는 이제 다음과 같아야합니다. (ENV)usuario@host:

이제 우리가하는 모든 것이 디렉토리에 저장됩니다. / var / www / ENV- 앱 이름 / 시스템 패키지에 영향을주지 않고

이제 애플리케이션 디렉토리로 이동합니다.
cd nombreApp

필요한 경우 파일에 지정된 응용 프로그램 종속성 목록을 설치합니다. requirements.txt:
pip install -r requirements.txt

예를 들어, 패키지를 개별적으로 설치할 수도 있습니다. postgresql:
pip install psycopg2

GUnicorn 설치 및 구성 :

설치하려면 동일한 방법으로 수행합니다.
pip install gunicorn

이제 구성하겠습니다.이를 위해 다음과 같은 파일을 생성합니다. gunicorn-deploy.py 응용 프로그램의 루트에서 (이름은 무엇이든 될 수 있지만) 다음 내용을 포함합니다.

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

감독 구성 :

이제 설정하겠습니다 감독자,이를 위해 구성 파일을 생성합니다.

echo_supervisord_conf > /etc/supervisord.conf

이제 구성 파일을 편집합니다.
vim /etc/supervisord.conf

그리고 다음 줄을 제거하여 주석 처리를 제거합니다. (세미콜론):

[unix_http_server] 파일 = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50MB logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = false minfds = 1024 minprocs = 200 [rpcinterface : supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface : make_main_rpcinterface [supervisorctl] serverurl = unix : [프로그램 : appname] 명령 = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py 디렉토리 = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

이제 supervisord가 시스템에서 시작할 스크립트를 생성합니다.이를 위해 파일을 생성합니다.
vim /etc/init.d/supervisord

그리고 다음 내용을 추가합니다.

 # 감독자 자동 시작 # # 설명 : 감독자 자동 시작 # 프로세스 이름 : 감독자 # pidfile : /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 in start) echo -n "감독 시작 :"$ SUPERVISORD echo ;; stop) echo -n "감독 중단 :"$ SUPERVISORCTL 종료 echo ;; restart) echo -n "감독 중지 :"$ SUPERVISORCTL shutdown echo echo -n "감독 시작 :"$ SUPERVISORD echo ;; 그 C

이제 파일이 시스템에서 시작할 수 있도록 실행 권한을 부여합니다.
sudo chmod +x /etc/init.d/supervisord

서비스를 시작하기 위해 링크를 업데이트합니다.
sudo update-rc.d supervisord defaults

서비스를 시작합니다.
sudo /etc/init.d/supervisord start

nginx 설정 :

이 단계도 매우 간단합니다. 다음 구성 파일을 생성합니다. Nginx에 우리의 응용 프로그램 :

vim /etc/nginx/sites-enabled/nombreApp

그리고 우리는 당신에게 다음 내용을 추가 할 것입니다

서버 {listen 9001; # nginx가 수신 할 포트 server_name www.domain.com; # 또는 192.168.0.100, 액세스 할 주소 access_log /var/log/nginx/Appname.access.log; # 응용 프로그램 로그 위치가있는 위치 / {# www.dominio.com/ proxy_pass에 액세스 할 때 nginx가 호출하는 위치 http://127.0.0.1:8001; proxy_set_header 호스트 $ http_host; } location / static / {# www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles /;를 입력하면 nginx가 액세스합니다. }}

그리고 nginx를 다시 시작합니다.
service nginx restart

Django 설정 :

django 구성 파일을 수정 해 보겠습니다.
vim nombreApp/settings.py

우리는 말하는 라인을 찾습니다. 디버그 = True 그리고 우리는 가치를 변경합니다, 남음 DEBUG = 거짓

DB 매개 변수를 추가합니다.

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', # 또는 mysql, 또는 'NAME': 'DBName', 'USER': 'DBUser', 'PASSWORD'가 사용하고 있습니다. 'password DB', 'HOST': 'localhost', # 또는 필요한 항목 'PORT': '', # 또는 사용중인 항목}}

우리는 라인을 찾습니다 ALLOWED_HOSTS = [] 액세스 할 도메인이나 주소를 추가하고 ALLOWED_HOSTS = [ 'www.domain.com']

정적 파일에 대한 디렉토리를 구성하고 다음과 같은 줄을 찾습니다. STATIC_ROOT = ' ' 그리고 값을 변경하여 정적 파일이 될 절대 경로를 배치합니다. 제 경우에는 이렇게 두었습니다. STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

거의 완료되었으므로 다음 명령을 실행합니다.
./manage.py collectstatic

이름이 '인 폴더가 생성됩니다.통계 우리가 지정하는 경로 settings.py ', 여기에 모든 정적 파일이 있습니다.

마지막으로 감독자를 다시 시작하여 새로운 변경 사항을 적용합니다.
supervisorctl restart nombreApp

그리고 그게 다 였을 것입니다. 결국 그게 사실이 아니 었나요? 나에게는 간단 해 보였습니다 😀

나는 그것이 당신에게 유용하기를 바랍니다, 인사 😉

GUnicorn 문서

감독 문서


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   f3niX

    Django 앱이 웹 서버 폴더 (/ var / www)의 루트에 배치되어서는 안된다는 것을 이해합니다. 안전을 위해 내가 틀렸는 지 모르겠습니다.

    인사말.

    1.    우르크

      괜찮아 !!! 내가 완전히 알지 못했던 것이었고 항목 😛를 업데이트하고 월요일에 돌아 오자마자 xD 응용 프로그램을 변경합니다.
      감사합니다

  2.   로드리고 브라보 (고이 도르)

    Epale 형제 좋은 튜토리얼. 최근에 나도 똑같 았지만 데비안 7에서는 검색하고 읽어야 만했다. 숨겨진 폴더의 사용자 집에 virtualenv의 가상 환경을 만드는 것이 좋습니다.

    안녕하십니까!

  3.   펜리즈를 섬기다

    hahaha ctm 나는 어제 Django를 문서화하고 당신은 이미 은하계를 통과하고 있습니다 999999 Greetings men xD

  4.   다니엘 2ac

    아주 좋은 기사 =) 불과 일주일 전에 장고 앱을 배포했지만 uwsgi 및 nginx로 작업했습니다. gunicorn의 이점이 무엇인지 알고 있습니까? 나는 그것이 많이 언급되는 것을 보았다.
    django가 매우 인기를 얻고 있다는 것을 알게되어 기쁩니다. 진실은 제가 본 최고의 프레임 워크입니다 =)

  5.   오즈카르

    STATIC_ROOT의 경우 전역 변수를 정의합니다. 이 같은:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

    백엔드는 내가 만든 앱입니다. 따라서 프로젝트를 배포하는 곳의 전역 경로가 동일하다는 것을 확인합니다.

  6.   스마트

    흥미롭게도 앞으로 해보겠습니다.

    그건 그렇고, 누구든지 django 응용 프로그램에서 악센트 및 비 ASCII 문자를 활성화하는 방법을 알고 있습니까?

    나는 모든 곳을 보았지만 다음 방법 중 어느 것도 나를 위해 작동하지 않습니다.
    sys.setdefaultencoding ( 'utf-8') # in sites.py

    #-*-coding : utf-8-*-# 모든 파이썬 파일에서

    site.py를 편집하고 ascii 대신 utf-8을 넣으면 작동하지만 $ file models.py는 내 파일이 여전히 ascii임을 알려줍니다.

    제안 사항이 있습니까?

    1.    스마트

      작동했습니다 !!!!

  7.   anime230

    아주 좋은 튜토리얼이지만 이미 생산중인 웹 서버에 내 앱을 업로드하는 방법 중 하나를 수행 할 수 있습니까?
    감사