Close

Django на production. Nginx + uwsgi + supervisor

Сервер разработки для Django запускается просто – командой runserver. Для запуска Django на prod сервере попотеть нужно немного больше. В этой статье я расскажу как это сделать, используя uwsgi и supervisor.

Создадим директорию для проекта

Полный путь в нашем случае будет /home/myuser/myproject

В эту директорию нужно скопировать файлы вашего проекта с рабочей машины, через scp, filezilla, sshfs или любым другим способом. Не забыть поменять в конфигурации проекта DEBUG на False и добавить в ALLOWED_HOSTS активный хост. Также нужно провести миграции и сделать collectstatic.

Теперь нужно создать виртуальное окружение. Это нужно для того, чтобы избежать конфликтов между пакетами с другим проектом или же с системными.

Активируем его:

Теперь с помощью pip установим пакеты, использованные в проекте. Для этого воспользуемся файлом requirements.txt (если таковой имеется).

Установим uwsgi.

WSGI (Web Server Gateway Interface) — стандарт взаимодействия программ с веб-сервером, одной из реализаций этого стандарта является uWSGI. Взаимодействие между uwsgi и nginx происходит посредством unix-сокета.

Создадим в директории с проектом поддиректорию dpl, где будем хранить файлы конфигурации и логи.

Теперь там создадим файл uwsgi.ini и наполним его содержимым:

В разделе module конфигурации нужно указать имя django-проекта, myproject в нашем случае. Параметр touch-reload – это файл, изменения в котором будут вызывать перезапуск uwsgi. Его удобно использовать, например, вместе с git. Home указывает на путь к виртуальному окружению, chdir – к директории с самим проектом. Uwsgi использует огромное число настраиваемых параметров, изучить полный список которых можно здесь http://uwsgi-docs.readthedocs.org/en/latest/Options.html
Установим supervisor. Он будет следить за состоянием проекта и в случае ошибок и падений – перезапускать его.

Конфигурации проектов supervisor считывает из директории /etc/supervisor/conf.d
Создадим там файл myproject.conf с содержимым:

В параметрах указан user – наш пользователь, directory – путь к проекту, command – команда запуска uwsgi. Укажем пути для логов, чтобы следить за ошибками.

Теперь нужно перечитать конфигурацию:

Посмотреть статус процессов supervisor можно командой:

Перезапустить наш проект после изменений:

Пришло время веб-сервера. Установка nginx подробнее уже описана здесь. Установим его:

В директории /etc/nginx/sites-available создадим файл myproject.com.conf и пропишем в нем:

В uwsgi_pass указан путь до сокета, который мы создали для uwsgi. Далее, подключается файл с параметрами uwsgi_params. Он обязателен, его можно скачать отсюда https://github.com/phusion/nginx/blob/master/conf/uwsgi_params или просто создать пустой и наполнить содержимым:

Добавим ссылку на конфигурацию в sites-available:

Перезапустим nginx:

Наконец то мы сделали все что нужно!

Если ошибок не возникло, наш проект будет доступен по своему адресу в браузере. Большинство ошибок связано, как правило, с некорректными путями в конфигурациях, рекомендую перепроверять их дважды. Также много ошибок возникает из-за несоответствия пользователей и прав доступа к файлам.

Поделиться: