Звони
Контактная информация

г.Пятигорск, пер.Первомайский 10а

Работаем с 9-00 до 18-00 ПН-ПТ

+7(8793)33-16-17

+7(928)911-74-69

В соц.сетях

Django + nginx + uwsgi

Django + nginx + uwsgi
Админ
  • 2 марта 2021 г.
Django + nginx + uwsgi

Сервер приложений uWSGI

Теперь нужно настроить uWSGI – сервер приложений, взаимодействующий с приложениями с помощью простого интерфейса WSGI.

Установка uWSGI

В данном руководстве нужно установить uWSGI глобально – так будет проще обрабатывать несколько проектов Django.

Установите зависимости сервера:

# Python 2:
sudo apt-get install python-dev
# Python 3:
sudo apt-get install python3-dev

Теперь установите uWSGI.

# Python 2:
sudo pip install uwsgi
# Python 3:
sudo pip3 install uwsgi

Чтобы быстро протестировать сервер, передайте ему данные одного из сайтов. Например, можно попробовать обслужить первый проект:

uwsgi --http :8080 --home /home/username/djangoprojectname/env --chdir /homeusername/djangoprojectname -w djangoprojectname.wsgi

Теперь uWSGI использует виртуальное окружение каталога ~/env, чтобы получить доступ к каталогу проекта и использовать файл wsgi.py для обслуживания проекта.

Создание конфигурационного файла

Запуск uWSGI из командной строки хорошо подходит для тестирования, но в реальном развёртывании это очень неудобно. Запустите сервер в режиме Emperor mode, что позволяет ведущему процессу управлять отдельными приложениями автоматически. Для этого используются конфигурационные файлы.

Создайте каталог для хранения таких файлов.

sudo mkdir -p /etc/uwsgi/sites
cd /etc/uwsgi/sites

Теперь нужно создать конфигурационный файл для каждого проекта. uWSGI может читать конфигурации разных форматов. В данном руководстве используется формат ini.

Создайте файл для первого проекта:

sudo nano djangoprojectname.ini

Добавьте заголовок [uwsgi], под которым нужно поместить все настройки. Добавьте несколько переменных, чтобы сделать файл более универсальным. Сразу после заголовка добавьте переменную project с именем проекта. Переменная uid будет хранить имя пользователя с доступом к sudo.

Затем добавьте переменную base, в которой нужно указать путь к домашнему каталогу. Для этого используется синтаксис: %(переменная).

[uwsgi]

project = djangoprojectname
uid = username
base = /home/%(uid)
chdir = %(base)/%(project)
home = %(base)/%(project)/env
module = %(project).wsgi:application
master = true
processes = 5
socket = /run/uwsgi/%(project).sock
chown-socket = %(uid):www-data
chmod-socket = 660
vacuum = true

Настройка первого проекта завершена. Сохраните и закройте файл.

Unit-файл для uWSGI

Django-проекты обслуживаются сервером приложений. Теперь нужно автоматизировать этот процесс. Для этого создайте unit-файл.

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

Файл начинается с раздела [Unit], в котором хранятся метаданные и другая информация о сервисе (например, его описание).

[Unit]

Description=uWSGI Emperor
[Service]

ExecStartPre=/bin/bash -c 'mkdir -p /run/uwsgi; chown username:www-data /run/uwsgi'
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
[Install]

WantedBy=multi-user.target

Сохраните и закройте файл.

Пока что запустить этот сервис невозможно, поскольку он зависит от пользователя www-data. Сервис будет доступен после установки и настройки Nginx.

Nginx как обратный прокси-сервер

Загрузите пакет Nginx из стандартного репозитория Debian.

sudo apt-get install nginx

После установки Nginx создайте виртуальный хост (блок server) для каждого проекта.

sudo nano /etc/nginx/sites-available/djangoprojectname

Теперь у вас есть конфигурационный файл для первого проекта.

Чтобы указать домен первого проекта, добавьте в файл такой код:

server {
listen 80;
server_name sitename.com www.sitename.com;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/username/djangoprojectname;
}
location / {
include         uwsgi_params;
uwsgi_pass      unix:/run/uwsgi/djangoprojectname.sock;
}
}

Сохраните виртуальный хост.

Создайте ссылки на новые конфигурационные файлы в каталоге sites-enabled.

sudo ln -s /etc/nginx/sites-available/djangoprojectname /etc/nginx/sites-enabled

Проверьте файлы на наличие ошибок:

sudo nginx –t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если ошибок нет, перезапустите сервис Nginx:

sudo systemctl restart nginx

Теперь можно запустить сервер приложений uWSGI.

sudo systemctl start uwsgi

Теперь проект доступен по доменному имени. Проверьте работу проектов и интерфейсов. Если всё работает должным образом, настройте автозапуск сервисов:

sudo systemctl enable nginx
sudo systemctl enable uwsgi

Категории

Давайте работать вместе

Нужен сайт?

Напиши нам
Или позвони по номеру +7(928)911-74-69