Блог Синявского
  • Разделы
  • Метки
  • Все статьи

Деплой Django приложения Nginx, Gunicorn, Supervisor

1

В процессе изучения технологий, получения новых знаний и выбор технологий настройки своих приложений был примерно таким: 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

Все готово!



  • ← сюда
  • туда →

comments powered by Disqus

Опубликовано

05.04.2016

Обновление

17.07.2017

Категории

django

Тэги

  • bash 10
  • django 12
  • gunicorn 2
  • nginx 11
  • python 30
  • ubuntu 36

Всегда на связи

  • Блог Синявского - Ничего не переносить на завтра, это тоже проблема с прокастинацией?
  • © Алексей Синявский, по лицензии CC BY-SA если не указано иное.
  • С использованием Pelican. Тема: Elegant от Talha Mansoor