Настройка gunicorn

Настройка gunicorn обычно нужна для Django. gunicorn является производительным сервером приложений. Обычно он используется с Nginx.

 

 

Установка и настройка gunicorn для Django приложения

gunicorn устанавливается в виртуальное окружение через pip

 

После установки можно запустить процесс вручную

Сначала нужно перейти в каталог со скриптами приложения

cd ~/app

 

Точкой входа традиционно является wsgi.py, если это так команда для запуска примет следующий вид:

gunicorn —bind 0.0.0.0:5000 wsgi:app

В wsgi.py идет обращение к переменной app.

 

После запуска в тестовом режиме на порту 5000 вывод в консоль будет таким:

[2018-11-12 21:14:28 +0000] [24344] [INFO] Starting gunicorn 19.9.0
[2018-11-12 21:14:28 +0000] [24344] [INFO] Listening at: http://0.0.0.0:5000 (28217)
[2018-11-12 21:14:28 +0000] [24344] [INFO] Using worker: sync
[2018-11-12 21:14:28 +0000] [24344] [INFO] Booting worker with pid: 28220

 

Современные Ubuntu и CentOS в качестве системы инициализации используют systemd. Чтобы управлять сервисом gunicorn потребуется добавить Unit файл

 

mcedit /etc/systemd/system/app.service

[Unit]
Description=Gunicorn
After=network.target

[Service]
User=django
Group=www-data
WorkingDirectory=/home/django/app
Environment="PATH=/home/django/app/myprojectenv/bin"
ExecStart=/home/django/app/djangoenv/bin/gunicorn --workers 3 --bind unix:app.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

 

 

В нем задается пользователь и группа с правами которых запускается процесс application сервера.

Сам gunicorn запускается командой /home/django/app/djangoenv/bin/gunicorn —workers 3 —bind unix:app.sock -m 007 wsgi:app

 

Будет использоваться 3 воркера и unix сокета вместо IP адреса и порта. Это более безопасное и более быстрое решение, но подходит оно только для случаев когда приложение работает на одной машине.

Если применяется кластер и веб-сервер находится на одном сервере, а приложение на другом использовать получится только TCP сокет.

 

Чтобы использовать gunicorn — в него настраивают проксирование — обычно средствами Nginx с портов 80 и 443.

Конфигурационный файл Nginx полностью соответствует тому, что используется для другого способа деплоя приложений на Python — wsgi.