Используемые термины: NGINX, uWSGI, Python, Ubuntu.
В нашей инструкции будет рассмотрена настройка веб-сервера для поддержки приложений, разработанных на языке Python. Руководство рассчитано для операционных систем семейства Deb (Ubuntu, Debian, Mint).
Устанавливаем python и дополнительные компоненты:
apt-get update
apt-get install python3 python3-dev python3-pip
* где:
Устанавливаем дополнительные пакеты для python:
pip3 install virtualenv uwsgi
uWSGI установлен — посмотрим версию приложения:
uwsgi —version
Создаем каталог, в котором разместим наше тестовое приложение:
mkdir -p /var/www/python_app
… и перейдем в созданный каталог:
cd /var/www/python_app
Создадим файл со следующим содержимым:
vi wsgi.py
#!/usr/bin/env python3# -*- encoding: utf-8 -*-
def application(env, start_response): start_response(‘200 OK’, [(‘Content-Type’,’text/html’)]) return [b»<h1>Hello World</h1>»]
* в данном примере мы просто выводим на экран знаменитую фразу «Hello World».
Если в нашей системе используется брандмауэр с запрещающими правилами, открываем порт 8080:
iptables -I INPUT -p tcp —dport 8080 -j ACCEPT
Сохраняем правила:
apt-get install iptables-persistent
netfilter-persistent save
Создаем виртуальное окружение:
virtualenv myappenv
Активируем созданное окружение командой:
source myappenv/bin/activate
Запускаем веб-сервер на порту 8080:
uwsgi —socket 0.0.0.0:8080 —protocol=http -w wsgi
Открываем браузер и переходим по адресу http://<IP-адрес нашего сервера>:8080 — мы должны увидеть нашу страницу «Hello World».
Веб-сервер работает. Остановим его работу комбинацией клавиш Ctrl + С и деактивируем виртуальную среду:
deactivate
Переходим к настройке uWSGI в качестве демона.
Чтобы не запускать сервис для каждого приложения вручную, необходимо настроить веб-сервер uWSGI. Он будет контролировать процесс работы с каждым приложением и позволит задать индивидуальные параметры с помощью конфигурационных файлов.
Устанавливаем веб-сервер командой:
apt-get install uwsgi uwsgi-plugin-python3
Создаем конфигурационный файл следующего содержания:
vi /etc/uwsgi/apps-enabled/python_app.ini
[uwsgi]module = wsgi:applicationchdir = /var/www/python_appplugins = python3max-requests = 5000processes = 5threads = 2master = truehttp = 0.0.0.0:8080die-on-term = true
Разрешаем и стартуем сервис:
systemctl enable uwsgi
systemctl restart uwsgi
Открываем браузер и переходим по адресу http://<IP-адрес нашего сервера>:8080/ — должна открываться наша страница Hello World.
По сути, наш сервер готов к работе, но очень часто, uWSGI настраивается в связке с NGINX, который берет на себя задачи по проксированию запросов http и отдачи статики. Рассмотрим пример настройки данной связки.
Откроем на редактирование ранее созданный конфигурационный файл:
Закомментируем строку:
#http = 0.0.0.0:8080
* мы будем обращаться к uWSGI через сокетный файл, таким образом, держать сервис на отдельном порту избыточно.
Добавим к нашей настройке:
[uwsgi]…socket = wsgi.sockchmod-socket = 660vacuum = trueuid = www-datagui = www-data
Меняем владельца каталога нашего проекта на пользователя, под которым работает NGINX (в Ubuntu это, как правило, www-data):
chown -R www-data:www-data /var/www/python_app
Перезапускаем uwsgi:
Переходим к настройке NGINX. Для начала, установим его:
apt-get install nginx
Разрешим автозапуск:
systemctl enable nginx
Откроем на редактирование конфигурационный файл default:
vi /etc/nginx/sites-enabled/default
* это самый простой путь для тестирования нашей настройки. Для продуктивной среды хорошим тоном будет настройка виртуальных доменов.
Приведем location / к следующему виду:
location / { #try_files $uri $uri/ =404; include uwsgi_params; uwsgi_pass unix:/var/www/python_app/wsgi.sock; try_files $uri $uri/ /wsgi.py?$query_string; }
* в данном примере мы все запросы переводим на файл wsgi.py с передачей в качестве аргументов строки запроса. Все запросы передадутся на uWSGI через сокетный файл wsgi.sock, находящийся в каталоге нашего проекта.
Проверим корректность настройки nginx:
Перезапустим его:
systemctl restart nginx
Готово, открываем браузер и переходим по адресу http://<IP-адрес нашего сервера>/ (уже без указания на порт) — должна открываться все та же страница Hello World.
Развертывание Django проекта на сервере NGINX в Linux Ubuntu
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies