г.Пятигорск Тел:+7(928)911-74-69
г.Пятигорск, пер.Первомайский 10а
Работаем с 9-00 до 18-00 ПН-ПТВ соц.сетях
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