Развернем сайт на фреймворке Django на Nginx веб-сервере. Стек компонентов будет следующий: веб-сервер Nginx <-> Unix-cокет <-> uWSGI <-> Django. Компонент uWSGI — это интерфейс для веб-сервера, чтобы запускать Django приложения. Unix-сокет будет используется вместо веб-порта для повышения производительности.

Установка и настройка Nginx

Устанавливаем веб-сервер Nginx:

apt install nginx

Создаем конфигурационный файл сайта /etc/nginx/sites-available/board.adminkin.pro.conf:

touch /etc/nginx/sites-available/board.adminkin.pro.conf

Добавляем в файл следующее содержимое:

server {
        listen 80;
        server_name board.adminkin.pro www.board.adminkin.pro;
        root /var/www/html;
        index index.nginx-debian.html;
        location / {
                try_files $uri $uri/ =404;
        }
}

Создаем символическую ссылку:

ln -s /etc/nginx/sites-available/board.adminkin.pro.conf /etc/nginx/sites-enabled/board.adminkin.pro.conf

Запускаем веб-сервер Nginx:

nginx

В адресной строке браузера набираем http://board.adminkin.pro, чтобы проверить доступность сайта по протоколу HTTP на порту 80. Доступен? Время получать бесплатный SSL сертификат.

Устанавливаем Certbot, который сгенерирует и установит бесплатный SSL сертификат для сайта:

apt install certbot python3-certbot-nginx

Запускаем Certbot:

certbot --nginx -d board.adminkin.pro -d www.board.adminkin.pro --register-unsafely-without-email

Перезагружаем веб-сервер Nginx, чтобы применить изменения в конфигурационном файле /etc/nginx/sites-available/board.adminkin.pro.conf, которые внес Certbot по SSL сертификату и редиректу (переадресации) с небезопасного HTTP протокола на безопасный HTTPS протокол:

nginx -s reload

В адресной строке браузера опять набираем http://board.adminkin.pro, чтобы проверить редирект (переадресацию) с HTTP на HTTPS.

Команда проверки SSL сертификата и его обновления в случае, если срок действия SSL сертификата подходит к концу:

certbot renew

Для автоматизации процесса обновления SSL сертификата добавим эту команду в файл crontab пользователя root. Для этого под пользователем root открываем файл crontab для редактирования:

crontab -e

И добавляем строку:

30 2 * * 1 /usr/bin/certbot renew >> /var/log/certbot.log

Установка и настройка uWSGI

WSGI (Web Server Gateway Interface) — это стандарт взаимодействия приложений на Python, в том числе и на Django, и веб-сервера. uWSGI — одна из реализаций этого стандарта. uWSGI совместим с различными веб-серверами, включая Nginx.

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

apt install uwsgi uwsgi-plugin-python3
pip3 install uwsgi

Создаем конфигурационный файл /etc/uwsgi/apps-available/board.adminkin.pro.ini:

touch /etc/uwsgi/apps-available/board.adminkin.pro.ini

Добавляем в файл следующее содержимое:

[uwsgi]
chdir = /django/board/
wsgi-file = /django/board/board/wsgi.py
workers = 1
max-requests=5000
processes = 5
threads = 2
master = true
die-on-term = true
socket = /tmp/board.adminkin.pro.sock
chmod-socket = 664
vacuum = true
uid = www-data
gui = www-data
plugins=python3

где chdir — это директория проекта Django сайта;

wsgi-file — путь к файлу wsgi.py проекта Django сайта;

socket — путь к Unix-сокету.

Django Nginx uWSGI настройка

Создаем символическую ссылку:

ln -s /etc/uwsgi/apps-available/board.adminkin.pro.ini /etc/uwsgi/apps-enabled/board.adminkin.pro.ini

Перезапускаем сервис uWSGI:

systemctl stop uwsgi
systemctl start uwsgi

Если сервис uWSGI не запускается, то ошибки смотрим в логах /var/log/uwsgi/app/board.adminkin.pro.log.

Сбор статических файлов Django сайта

Соберем все статические файлы Django сайта в одной директории с именем static и настроим обработку статических файлов из директории static самим веб-сервером Nginx, не затрагивая Django, для повышения производительности.

В директории проекта Django сайта создаем директорию static:

mkdir static

Указываем путь к директории static в файле settings.py проекта Django сайта. Для этого в файле settings.py добавляем строки:

import os
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Собираем все статические файлы в директории static. Для этого в директории проекта Django сайта выполняем команду:

python3 manage.py collectstatic

Если статических файлов в проекте Django сайта много, то вместо копирования статических файлов в директорию static можно создать символические ссылки на статические файлы с помощью команды:

python3 manage.py collectstatic --link

Django Nginx uWSGI

Правим файл конфигурации /etc/nginx/sites-available/board.adminkin.pro.conf. Удаляем из файла старые строки:

        root /var/www/html;
        index index.nginx-debian.html;
        location / {
                try_files $uri $uri/ =404;
        }

Добавляем в файл конфигурации путь к статическим файлам Django сайта и путь к Unix-сокету:

        location /static {
                alias /django/board/static;
        }
        location /{
                include /etc/nginx/uwsgi_params;
                uwsgi_pass unix:///tmp/board.adminkin.pro.sock;
        }
Django Nginx настройка

Перезагружаем веб-сервер Nginx:

nginx -s reload

Все готово! Набираем в адресной строке браузера board.adminkin.pro, и должна отобразиться «веб-морда» Django сайта.

Выводы

Эта статья — практическое руководство по развертыванию сайта Django на Nginx веб-сервере. В статье рассматривается установка Nginx веб-сервера и uWSGI сервиса, подготовка Django сайта к развертыванию и настройка цепочки взаимодействия: Пользователь <-> Nginx <-> Unix-сокет <-> uWSGI <-> Django.

Обсуждаем статью в комментариях под статьей, присоединяйтесь!

Комментарии

Добавить комментарий

Этот сайт защищен reCAPTCHA, и к нему применяются Google Политика конфиденциальности и Условия использования.

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.