Ще разгънем уеб сайта на Django фреймуърк на Nginx уеб сървър. Стекът на компонентите ще бъде следният: Nginx уеб сървър <-> Unix сокет <-> 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 сокета в конфигурационния файл: статичните файлове на 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 в адресната лента на браузъра и трябва да се появи „web face“ на сайта Django.

Изводи

Тази статия е практическо ръководство за разгъване на сайт на Django на уеб сървър Nginx. В статията се разглежда инсталирането на уеб сървър Nginx и uWSGI услуга, подготовката на сайта на Django за разгъване и настройката на веригата на взаимодействие: Потребител <-> Nginx <-> Unix-сокет <-> uWSGI <-> Django.

Обсъждаме статията в коментарите под статията, присъединете се!

Коментари

Вашият коментар

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

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.