수색…


Gunicorn으로 Django 응용 프로그램 실행하기

  1. gunicorn 설치

    pip install gunicorn

  1. django 프로젝트 폴더 (manage.py가있는 폴더)에서 다음 명령을 실행하여 현재 django 프로젝트를 gunicorn으로 실행합니다

    gunicorn [projectname].wsgi:application -b 127.0.0.1:[port number]

    --env 옵션을 사용하여 설정을로드 할 경로를 설정할 수 있습니다

    gunicorn --env DJANGO_SETTINGS_MODULE=[projectname].settings [projectname].wsgi

    또는 -D 옵션을 사용하여 데몬 프로세스로 실행

  1. gunicorn이 성공적으로 시작되면 콘솔에 다음 줄이 나타납니다.

    Starting gunicorn 19.5.0

    Listening at: http://127.0.0.1:[port number] ([pid])

    .... (gunicorn 서버에 대한 기타 추가 정보)

Heroku로 배포

  1. Heroku Toolbelt를 다운로드하십시오.

  2. 장고 앱 소스의 루트로 이동하십시오. 너는 tk을 필요로 할 것이다.

  3. heroku create [app_name] . 앱 이름을 지정하지 않으면 Heroku가 임의로 앱 이름을 생성합니다. 앱 URL은 http://[app name].herokuapp.com

  4. Procfile 이라는 이름의 텍스트 파일을 Procfile . 끝 부분에 확장을 넣지 마십시오.

    web: <bash command to start production server>
    

    작업자 프로세스가있는 경우 추가 할 수도 있습니다. worker-name: <bash command to start worker> 형식으로 다른 줄을 추가하십시오 worker-name: <bash command to start worker>

  5. requirements.txt를 추가하십시오.

  • 가상 환경을 사용하는 경우 pip freeze > requirements.txt 실행 pip freeze > requirements.txt
  • 그렇지 않으면 가상 환경을 얻으십시오! . 필요한 파이썬 패키지를 수동으로 나열 할 수도 있지만이 튜토리얼에서는 다루지 않을 것이다.
  1. 배포 시간입니다!

    1. git push heroku master

    Heroku는 배포를 위해 자식 저장소 또는 보관 용 폴더가 필요합니다. heroku.com 의 GitHub 저장소에서 자동 재로드를 설정할 수도 있지만이 튜토리얼에서는이를 다루지 않을 것입니다.

    1. heroku ps:scale web=1

    이것은 웹 "dynos"의 수를 1로 조정합니다. dynos에 대한 자세한 내용은 여기를 참조 하십시오.

    1. heroku openhttp://app-name.herokuapp.com 이동하십시오.

    팁 : heroku open 은 기본 브라우저에서 heroku 앱의 URL을 heroku open 다.

  2. 추가 기능을 추가 하십시오 . Django 응용 프로그램을 Heroku에서 "추가 기능"으로 제공되는 데이터베이스와 바인딩하도록 구성해야합니다. 이 예에서는이 내용을 다루지 않지만 Heroku에서 데이터베이스를 배포하는 경우 파이프 라인에 다른 예가 나와 있습니다.

간단한 원격 배포 fabfile.py

Fabric은 응용 프로그램 배포 또는 시스템 관리 작업을 위해 SSH 사용을 능률화하기위한 Python (2.5-2.7) 라이브러리 및 명령 줄 도구입니다. 명령 줄을 통해 임의의 파이썬 함수를 실행할 수 있습니다.

pip install fabric 설치 패브릭을 통해 패브릭 pip install fabric
루트 디렉토리에 fabfile.py 를 만듭니다.

#myproject/fabfile.py    
from fabric.api import *

@task
def dev():
    # details of development server
    env.user = # your ssh user
    env.password = #your ssh password
    env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
    env.key_filename = # pass to ssh key for github in your local keyfile

@task
def release():
    # details of release server
    env.user = # your ssh user
    env.password = #your ssh password
    env.hosts = # your ssh hosts (list instance, with comma-separated hosts)
    env.key_filename = # pass to ssh key for github in your local keyfile

@task
def run():
    with cd('path/to/your_project/'):
        with prefix('source ../env/bin/activate'): 
        # activate venv, suppose it appear in one level higher
            # pass commands one by one
            run('git pull')
            run('pip install -r requirements.txt')
            run('python manage.py migrate --noinput')
            run('python manage.py collectstatic --noinput')
            run('touch reload.txt')

파일을 실행하려면 fab 명령을 사용하십시오.

$ fab dev run  # for release server, `fab release run`

참고 : github에 ssh 키를 구성 할 수는 없으며 로그인 및 암호를 수동으로 입력하고 fabfile은 키와 동일하게 실행합니다.

Heroku Django 스타터 템플릿 사용하기.

Heroku에서 Django 웹 사이트를 호스트하려는 경우 Heroku Django Starter Template을 사용하여 프로젝트를 시작할 수 있습니다.

django-admin.py startproject --template=https://github.com/heroku/heroku-django-template/archive/master.zip --name=Procfile YourProjectName

정적 파일, 데이터베이스 설정, Gunicorn 등을위한 프로덕션 준비 구성과 WhiteNoise를 통한 Django의 정적 파일 제공 기능 향상을 제공합니다. 이렇게하면 시간을 절약 할 수 있습니다. Heroku에서 호스팅 할 수있는 모든 준비가되었습니다.이 템플릿의 상단에 웹 사이트를 만드십시오.

Heroku에서이 템플릿을 배포하려면

git init
git add -A
git commit -m "Initial commit"

heroku create
git push heroku master

heroku run python manage.py migrate

그게 다야!

장고 배포 지침. Linux의 Nginx + Gunicorn + Supervisor (Ubuntu)

세 가지 기본 도구.

  1. nginx - 무료, 오픈 소스, 고성능 HTTP 서버 및 리버스 프록시, 고성능;
  2. gunicorn - 'Green Unicorn'은 UNIX 용 파이썬 WSGI HTTP 서버입니다 (서버 관리 필요).
  3. 수퍼바이저 - 사용자가 UNIX와 유사한 운영 체제에서 여러 프로세스를 모니터하고 제어 할 수있는 클라이언트 / 서버 시스템. 당신이 응용 프로그램 또는 시스템 충돌, 당신의 장고 / 셀러리 / 셀러리 캠 등을 다시 시작할 때 사용됩니다;

간단하게하기 위해, 앱이 /home/root/app/src/ 디렉토리에 있다고 가정 해 봅시다. 우리는 root 사용자를 사용할 것입니다.하지만 앱용으로 별도의 사용자를 만들어야합니다. 또한 가상 환경은 /home/root/app/env/ path에 있습니다.

NGINX

nginx로 시작합시다. nginx가 아직 시스템에 없다면 sudo apt-get install nginx . 나중에 nginx 디렉토리 /etc/nginx/sites-enabled/yourapp.conf 에 새 구성 파일을 만들어야합니다. default.conf 라는 파일이 있으면 제거하십시오.

소켓 파일을 사용하여 서비스를 실행하려고 시도하는 nginx conf 파일의 벨로우즈 코드. 나중에 gunicorn의 구성이있을 것입니다. 소켓 파일은 여기 nginx와 gunicorn 사이의 통신에 사용됩니다. 또한 포트를 사용하여 수행 할 수 있습니다.

# your application name; can be whatever you want
upstream yourappname {
    server        unix:/home/root/app/src/gunicorn.sock fail_timeout=0;
}

server {
    # root folder of your application
    root        /home/root/app/src/;
 
    listen        80;
    # server name, your main domain, all subdomains and specific subdomains
    server_name   yourdomain.com *.yourdomain.com somesubdomain.yourdomain.com
 
    charset       utf-8;

    client_max_body_size                        100m;
 
    # place where logs will be stored;
    # folder and files have to be already located there, nginx will not create
    access_log        /home/root/app/src/logs/nginx-access.log; 
    error_log         /home/root/app/src/logs/nginx-error.log;
    
    # this is where your app is served (gunicorn upstream above)
    location / {
        uwsgi_pass  yourappname;
        include     uwsgi_params; 
    }

    # static files folder, I assume they will be used
    location /static/ {
        alias         /home/root/app/src/static/;
    }
 
    # media files folder
    location /media/ {
        alias         /home/root/app/src/media/;
    }

}

GUNICORN

이제 우리의 GUNICORN 스크립트는 서버에서 django 응용 프로그램을 실행할 책임이 있습니다. 첫째로, pip install gunicorn gunicorn으로 설치하여 가상 환경에 gunicorn을 설치하는 것입니다.

#!/bin/bash

ME="root"
DJANGODIR=/home/root/app/src # django app dir
SOCKFILE=/home/root/app/src/gunicorn.sock # your sock file - do not create it manually
USER=root
GROUP=webapps
NUM_WORKERS=3 
DJANGO_SETTINGS_MODULE=yourapp.yoursettings
DJANGO_WSGI_MODULE=yourapp.wsgi  
echo "Starting $NAME as `whoami`"
 
# Activate the virtual environment
cd $DJANGODIR

source /home/root/app/env/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
 
# Create the run directory if it doesn't exist
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
 
# Start your Django Gunicorn
# Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)
exec /home/root/app/env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
  --name root \
  --workers $NUM_WORKERS \
  --user=$USER --group=$GROUP \
  --bind=unix:$SOCKFILE \
  --log-level=debug \
  --log-file=-

gunicorn 시작 스크립트를 실행하려면 실행 모드를 활성화해야합니다.

sudo chmod u+x /home/root/app/src/gunicorn_start

./gunicorn_start를 사용하여 ./gunicorn_start 서버를 시작할 수 있습니다.


감독자

처음에 말했듯이 관리자가 실패 할 경우 응용 프로그램을 다시 시작하기를 원합니다. 관리자가 아직 sudo apt-get install supervisor 서버에 설치하지 않은 경우 sudo apt-get install supervisor .

먼저 관리자를 설치하십시오. 그런 다음 주 디렉토리 /etc/supervisor/conf.d/your_conf_file.conf.conf 파일을 만듭니다.

구성 파일 내용 :

[program:yourappname]
command = /home/root/app/src/gunicorn_start
user = root
stdout_logfile = /home/root/app/src/logs/gunicorn_supervisor.log
redirect_stderr = true

빠른 요약, [program:youappname] 은 처음에 필요하며, 우리의 식별자가됩니다. 또한 stdout_logfile 은 로그가 액세스 및 오류 모두에 저장되는 파일입니다.

그렇게하면 감독자에게 새로운 구성 파일을 추가했다는 사실을 알려야합니다. 그것을하기 위해, 다른 우분투 버전에 대한 다른 프로세스가 있습니다.

Ubuntu version 14.04 or lesser 경우 다음 명령을 실행하십시오.

sudo supervisorctl reread -> 감독자 카탈로그 내의 모든 설정 파일을 다시 읽습니다. 출력해야합니다 : yourappname : available

sudo supervisorctl update -> 새로 추가 된 설정 파일에 관리자를 업데이트합니다. yourappname을 출력해야합니다 : 추가 된 프로세스 그룹

Ubuntu 16.04 실행 :

sudo service supervisor restart

앱이 제대로 실행되고 있는지 확인하려면

sudo supervisorctl status yourappname

다음과 같이 표시됩니다.

yourappname RUNNING pid 18020, uptime 0:00:50

이 절차의 실시간 데모를 보려면이 비디오를 서핑하십시오.

아파치 / nginx 설정없이 로컬로 배포하기

정적 인 콘텐츠를 제공하기 위해 Apache / Nginx를 사용하기위한 프로덕션 배포 권장 방법. 따라서 DEBUG 가 false이면 정적 및 미디어 내용이로드되지 않습니다. 그러나 다음과 같은 방법을 사용하여 Apache / Nginx 서버를 설치하지 않고도 정적 컨텐트를 배포 할 수 있습니다.

python manage.py runserver --insecure

이는 로컬 배포 (예 : LAN)에만 사용되며 프로덕션 환경에서 사용해서는 안되며 staticfiles 앱이 프로젝트의 INSTALLED_APPS 설정에있는 경우에만 사용할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow