Django
развертывание
Поиск…
Запуск приложения Django с помощью Gunicorn
Установить пушки
pip install gunicorn
Из папки проекта 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
После успешного запуска пушки, в консоли появятся следующие строки
Starting gunicorn 19.5.0
Listening at: http://127.0.0.1:[port number] ([pid])
....
(другая дополнительная информация о сервере пушки)
Развертывание с Heroku
Загрузить Heroku Toolbelt .
Перейдите в корень источников вашего приложения Django. Вам понадобится tk
Тип
heroku create [app_name]
. Если вы не укажете имя приложения, Heroku будет случайным образом генерировать его для вас. URL вашего приложения будетhttp://[app name].herokuapp.com
Создайте текстовый файл с именем
Procfile
. Не помещайте расширение в конец.web: <bash command to start production server>
Если у вас есть рабочий процесс, вы можете добавить его тоже. Добавьте еще одну строку в формате:
worker-name: <bash command to start worker>
Добавьте файл requirements.txt.
- Если вы используете виртуальную среду, запустите
pip freeze > requirements.txt
- В противном случае, получите виртуальную среду! , Вы также можете вручную указать пакеты Python, которые вам нужны, но это не будет описано в этом уроке.
Это время развертывания!
-
git push heroku master
Heroku нуждается в репозитории git или папке Dropbox для развертывания. Вы также можете настроить автоматическую перезагрузку из репозитория GitHub на сайте
heroku.com
, но мы не будемheroku.com
этом в этом уроке.-
heroku ps:scale web=1
Это увеличивает количество «динамиков» в сети. Здесь вы можете узнать больше о динамиках .
-
heroku open
или перейти наhttp://app-name.herokuapp.com
Совет:
heroku open
открывает URL-адрес вашего приложения heroku в браузере по умолчанию.-
Добавьте дополнения . Вам нужно настроить приложение 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)
Три основных инструмента.
- nginx - бесплатный, с открытым исходным кодом, высокопроизводительный HTTP-сервер и обратный прокси, с высокой производительностью;
- gunicorn - «Зеленый единорог» - это HTTP-сервер Python WSGI для UNIX (необходимый для управления вашим сервером);
- 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
вашего проекта.