Администрирование

Установка Gunicorn и настройка Nginx для Django-проектов

Просмотры: 4781
Категория: Администрирование
Создано: 19 января 2021
Тэги: Linux Python Ubuntu Django WSGI

Я уже поднимал тему о том, как запускать на продакшне django-проекты, используя связку uwsgi+nginx. Сегодня рассмотрим другую возможность поднять django-проект на боевом сервере. Для этих целей будем использовать WSGI-сервер Gunicorn. Он представляет собой портированный на Python проект Unicorn для Ruby. Gunicorn прост в настройке, лекго устанавливается. Многие админы рекомендуют его в качестве WSGI-сервера для Django-проектов.

Начнём с установки. Перейдём в директорию с нашим django-проектом и активируем виртуальное окружение

cd /path/to/my/django/project

source venv/bin/activate

Устанавливаем Gunicorn

pip install gunicorn

Теперь создадим файл сокета Gunicorn

sudo nano /etc/systemd/system/gunicorn.socket

Он будет состоять из трёх разделов: [Unit] для описания сокета, [Socket] для определения расположения сокета и [Install] для обеспечения установки этого сокета в нужное время.

[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/run/gunicorn.sock

[Install]
WantedBy=sockets.target

Теперь необходимо создать служебный файл systemd для Gunicorn

sudo nano /etc/systemd/system/gunicorn.service

Начинаем с раздела [Unit]. Здесь добавляем описание службы. С помощью директивы Required указываем на необходимый сокет. Также указываем, что запускать службу нужно после запуска сети.

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

В разделе [Service] указываем владельца и группу, которые будут запускать эту службу. Задаём рабочий каталог (путь до директории, где лежит manage.py). Также привяжем службу к Unix-сокету, который создает процесс gunicorn.socket

[Service]
User=our_user
Group=nginx
WorkingDirectory=/home/our_user/path/to/django/project
ExecStart=/home/our_user/path/to/django/project/venv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          myproject.wsgi:application

Наконец добавляем раздел [Install], который указывает, когда запускать Gunicorn. Нам необходимо, чтобы он запускался в многопользовательском режиме

[Install]
WantedBy=multi-user.target

Запускаем и активируем сокет.

sudo systemctl start gunicorn.socket

sudo systemctl enable gunicorn.socket

Проверяем, удалось ли запустить сокет:

sudo systemctl status gunicorn.socket

Проверяем наличие gunicorn.sock файла в директории /run:

file /run/gunicorn.sock

Если systemctl status указывает на ошибку и файл gunicorn.sock отсутствует в директории /run, находим ошибки и исправляем. Если ошибок нет, двигаемся дальше.

В самом начале, когда мы запустили только gunicorn.socket служба gunicorn.service не будет активна из-за отсутствия подключения к сокету. Проверяем это

sudo systemctl status gunicorn

Теперь тестируем активацию службы при подключении к сокету:

curl --unix-socket /run/gunicorn.sock localhost

Если всё настроено правильно, получим на консоль html-файл главной страницы. В противном случае отлавливаем и устраняем ошибки.

Ещё раз проверяем, запущен ли сервис gunicorn.

sudo systemctl status gunicorn

Если вносились какие-то изменения в конфигурационные файлы службы gunicorn.service, перезапускаем systemd и gunicorn:

sudo systemctl daemon-reload

sudo systemctl restart gunicorn

Если всё работает как часы и нет ошибок, идём настраивать nginx. Тут всё как обычно. Только лишь в разделе server дописываем следующее

location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }

Проверяем конфиг-файл nginx-а на ошибки

sudo nginx -t

И перезапускаем его

sudo systemctl restart nginx

Конфигурация Gunicorn+Nginx закончена!

Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене

Новое видео
Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»
Поддержать автора сайта!
​ Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.
Расписание пробников Статграда в 2026/27 учебном году
Информатика ОГЭ 9 класс
  1. 13 октября 2026 года
  2. 3 декабря 2026 года
  3. 21 января 2027 года
  4. 19 февраля 2027 года
  5. 23 марта 2027 года
  6. 27 апреля 2027 года
Математика ОГЭ 9 класс
  1. 23 сентября 2026 года
  2. 1 декабря 2026 года
  3. 22 января 2027 года
  4. 3 марта 2027 года
  5. 14 апреля 2027 года
Физика ОГЭ 9 класс
  1. 19 октября 2026 года
  2. 10 декабря 2026 года
  3. 29 января 2027 года
  4. 17 марта 2027 года
  5. 22 апреля 2027 года
Математика ЕГЭ 10 класс
  1. 3 февраля 2027 года
  2. 11 мая 2027 года
Информатика ЕГЭ 11 класс
  1. 22 октября 2026 года
  2. 15 декабря 2026 года
  3. 26 января 2027 года
  4. 2 марта 2027 года
  5. 13 апреля 2027 года
Математика ЕГЭ 11 класс
  1. 30 сентября 2026 года
  2. 17 декабря 2026 года
  3. 9 февраля 2027 года
  4. 16 марта 2027 года
  5. 21 апреля 2027 года
Физика ЕГЭ 11 класс
  1. 14 октября 2026 года
  2. 16 декабря 2026 года
  3. 4 февраля 2027 года
  4. 12 марта 2027 года
  5. 9 апреля 2027 года