Поиск…


Запуск приложения Django с помощью Gunicorn

  1. Установить пушки

    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. После успешного запуска пушки, в консоли появятся следующие строки

    Starting gunicorn 19.5.0

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

    .... (другая дополнительная информация о сервере пушки)

Развертывание с Heroku

  1. Загрузить Heroku Toolbelt .

  2. Перейдите в корень источников вашего приложения Django. Вам понадобится tk

  3. Тип heroku create [app_name] . Если вы не укажете имя приложения, Heroku будет случайным образом генерировать его для вас. URL вашего приложения будет http://[app name].herokuapp.com

  4. Создайте текстовый файл с именем Procfile . Не помещайте расширение в конец.

    web: <bash command to start production server>
    

    Если у вас есть рабочий процесс, вы можете добавить его тоже. Добавьте еще одну строку в формате: worker-name: <bash command to start worker>

  5. Добавьте файл requirements.txt.

  • Если вы используете виртуальную среду, запустите pip freeze > requirements.txt
  • В противном случае, получите виртуальную среду! , Вы также можете вручную указать пакеты Python, которые вам нужны, но это не будет описано в этом уроке.
  1. Это время развертывания!

    1. git push heroku master

    Heroku нуждается в репозитории git или папке Dropbox для развертывания. Вы также можете настроить автоматическую перезагрузку из репозитория GitHub на сайте heroku.com , но мы не будем heroku.com этом в этом уроке.

    1. heroku ps:scale web=1

    Это увеличивает количество «динамиков» в сети. Здесь вы можете узнать больше о динамиках .

    1. heroku open или перейти на http://app-name.herokuapp.com

    Совет: heroku open открывает URL-адрес вашего приложения heroku в браузере по умолчанию.

  2. Добавьте дополнения . Вам нужно настроить приложение Django для привязки к базам данных, предоставленным в Heroku, в качестве «надстроек». Этот пример не охватывает этого, но еще один пример находится в стадии разработки при развертывании баз данных в Heroku.

Простое удаленное развертывание fabfile.py

Fabric - это библиотека Python (2.5-2.7) и средство командной строки для оптимизации использования SSH для задач развертывания приложений или системного администрирования. Он позволяет выполнять произвольные функции Python через командную строку.

Установить ткань через 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`

Примечание. Вы не можете настроить ssh-ключи для github и просто ввести логин и пароль вручную, в то время как fabfile работает, то же самое с ключами.

Использование шаблона Starter Heroku Django.

Если вы планируете разместить свой сайт Django на Heroku, вы можете начать свой проект с использованием шаблона Starter Heroku Django:

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

Он имеет готовые готовые конфигурации для статических файлов, настроек базы данных, Gunicorn и т. Д. И улучшений для использования функций статического файла Django через WhiteNoise. Это сэкономит ваше время, это All-Ready для хостинга на Heroku, Просто создайте свой сайт в верхней части этого шаблона

Чтобы развернуть этот шаблон на Heroku:

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

heroku create
git push heroku master

heroku run python manage.py migrate

Это оно!

Инструкции по развертыванию Django. Nginx + Gunicorn + Supervisor для Linux (Ubuntu)

Три основных инструмента.

  1. nginx - бесплатный, с открытым исходным кодом, высокопроизводительный HTTP-сервер и обратный прокси, с высокой производительностью;
  2. gunicorn - «Зеленый единорог» - это HTTP-сервер Python WSGI для UNIX (необходимый для управления вашим сервером);
  3. supervisor - система клиент / сервер, которая позволяет своим пользователям контролировать и контролировать ряд процессов в UNIX-подобных операционных системах. Используется при сбое приложения или системы, перезапускает вашу камеру django / celery / celery, и т. Д .;

Чтобы сделать это простым, предположим, что ваше приложение находится в этом каталоге: /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, который попытается запустить вашу службу с помощью файла сокета; Позже будет конфигурация пушки. Файл сокета используется здесь для связи между 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 .

#!/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=-

чтобы иметь возможность запускать сценарий запуска пушки, он должен иметь режим выполнения, поэтому

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

теперь вы сможете запустить свой сервер для пушек, просто используя ./gunicorn_start


РУКОВОДИТЕЛЬ

Как сказано в начале, мы хотим, чтобы наше приложение было перезапущено при сбое супервизора. Если диспетчер еще не установлен на сервере с помощью sudo apt-get install supervisor .

Сначала установите диспетчер. Затем создайте файл .conf в основном каталоге /etc/supervisor/conf.d/your_conf_file.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.

Для Ubuntu version 14.04 or lesser , просто запустите эти команды:

sudo supervisorctl reread reread -> перечитывает все файлы конфигурации внутри каталога супервизора, это должно распечатывать: yourappname: доступно

sudo supervisorctl update -> обновляет супервизор до новых добавленных файлов конфигурации; должен распечатать yourappname: добавлена ​​группа процессов

Для Ubuntu 16.04 Запуск:

sudo service supervisor restart

и чтобы проверить, правильно ли работает приложение, выполните

sudo supervisorctl status yourappname

Это должно отображать:

yourappname RUNNING pid 18020, uptime 0:00:50

Чтобы получить живую демонстрацию этой процедуры, просмотрите это видео .

Развертывание локально без настройки apache / nginx

Рекомендуемый способ развертывания приложений требует использования Apache / Nginx для обслуживания статического контента. Таким образом, когда DEBUG ошибочно статична, а содержимое мультимедиа не загружается. Однако мы можем загружать статический контент в развертывание без необходимости установки сервера 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