В процессе изучения технологий, получения новых знаний и выбор технологий настройки своих приложений был примерно таким: 1. Apache modwsgi 2. nginx django init script 3. lighttpd fastcgi (иногда с nginx в качестве frontend)
Последняя связка была прекрасна. Но пришло время перемен. Использоваение fastcgi для деплоя django приложений разработчики посчитали не правильным путем развития django и в версии django 1.9 удалили поддержку fastcgi. Последняя в свою очередь не поддерживается из коробки в Python 3 (как было просто pip install Flup). Единственным нормальным вариантом стало использование nginx (или lighttpd) и supervisor с приложением.
Настраиваем nginx
Конфигурация nginx (в привилигированном режиме)
# nano /etc/nginx/sites-available/my_application
server {
listen 80;
server_name my_application.ru www.my_application.ru;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8888/;
}
location /static/ {
root /web/my_aplication/project/;
}
location /media/ {
root /web/my_application/project/;
}
}
Проксируем все запросы с заголовками на порт 8888. Подключаем эту конфигурацию
# ln -s /etc/nginx/sites-available/my_application /etc/nginx/sites-enabled
Перезагружаем nginx
# service nginx restart
Устанавливаем gunicorn
Cоздадим файл gunicorn_config.py в корневой директории проекта:
command = '/web/application_name/env/bin/gunicorn'
pythonpath = '/web/application_name/project'
bind = '127.0.0.1:8888'
workers = 3
user = 'nobody'
Переходиим в папку с приложением и активируем виртуальное окружение
$ cd /web/application_name/project
$ source ../env/bin/activate
(env) $
Устанавливаем gunicorn в виртуальное окружение
(env) $ pip install gunicorn
Тестируем запуск приложения через gunicorn
# sudo -u www-data /web/application_name/env/bin/gunicorn -c /web/application_name/env/gunicorn_config.py application.wsgi:application
Если все нормально в консоли увидим лог работы gunicorn
[2016-04-05 14:16:02 +0000] [48965] [INFO] Starting gunicorn 19.4.5
[2016-04-05 14:16:02 +0000] [48965] [INFO] Listening at: http://127.0.0.1:8888 (48965)
[2016-04-05 14:16:02 +0000] [48965] [INFO] Using worker: sync
[2016-04-05 14:16:02 +0000] [48968] [INFO] Booting worker with pid: 48968
[2016-04-05 14:16:02 +0000] [48969] [INFO] Booting worker with pid: 48969
[2016-04-05 14:16:02 +0000] [48970] [INFO] Booting worker with pid: 48970
Устанавливаем supervisor
# apt-get install supervisor
Настраиваем supervisord
Создаем команду которую будет запускать supervisor
# nano /etc/supervisor/my_application.sh
#!/bin/bash
cd /web/my_application/project
source ../env/bin/activate
/web/application_name/env/bin/gunicorn -c /web/application_name/env/gunicorn_config.py application.wsgi:application
Добавляем права на запуск
# chmod +x /etc/supervisor/my_application.sh
Создаем конфигурацию (обязательно расширение .conf):
# nano /etc/supervisor/conf.d/my_application.conf
[program:my_application]
command=/etc/supervisor/my_application.sh
user=www-data
numprocs=1
stdout_logfile=/web/my_appliction/logs/supervisor.log
stderr_logfile=/web/my_appliction/logs/supervisor.log
autostart=true
autorestart=true
startsecs=10
Перезапускаем supervisor
# service supervisor restart
Все готово!