Запуск Production серверa - moevm/mse_teacher_plan GitHub Wiki
DEV-сервер, встроенный в Flask, непригоден для выпуска приложения. DEV-север негибкий, низкопроизводительный и заточен скорее под debug, чем под эффективную работу с приложением.
Прежде чем запустить Production-сервер, нужно убедится, что запускается DEV-сервер.
Чтобы запускать Flask-приложения в Production Enviroment, можно использовать, например, uWSGI
В конфигурации данного проекта указаны следующие параметры:
-
chdir
- рабочая директория -
logto
- файл с логом -
callable
- имя вызываемого модуля -
wsgi-file
- файл, содержащий приложение -
virtualenv
- Virtual Enviroment проекта master
-
processes
- количество процессов -
threads
- количество потоков, создаваемых процессом -
protocol
- протокол. По умолчанию uwsgi (не путать с uWSGI. uWSGI - приложение-сервер, uwsgi - протокол). Для тестирование работоспособности можно поставить протокол http и попытаться открыть страницы на сервере localhost:порт -
socket
- адрес сокета, на котором будет работать сервер -
stats
- сокет для статистики -
vacuum
- удаление временных файлов после выхода
uWSGI может работать и напрямую с клиентом через http, но делать это не рекомендуется по соображениям безопасности. Также в таком случае http-порт будет занят только одним сервером, тогда как может быть необходимость разворачивать несколько серверов на одном порту (например, uwsgi по localhost:80/api и express по localhost:80).
Кроме того, не рекомендуется запускать uWSGI как root-пользователя. В таком случае стоит в конфиг добавить uid
и gid
и дать нужному пользователю и группе права на работу с приложением
Для тестирования приложение можно запустить с помощью команды uwsgi <файл ini>
. Но это занимает текущий командный интерпретатор и требует участия администратора. Лучше написать небольшого демона, запускающий uwsgi с нужными параметрами, например так, как в в файле mse_teacher_plan.service
После этого можно использовать команды systemctl и service
Nginx в данном проекте настроен работать на 80-порту (стандартный порт http). Сокет uWSGI находится на 5000-м порту. Конфигурация nginx в данном случае выглядит так: mse_Teacher_plan.conf
Как уже было сказано, на одном хосте может работать несколько серверов. В этом случае можно создать отдельный файл .conf, который будет проксировать (proxy_pass) другие порты.
Sentry - сервис для удобного трекинга ошибок. Его можно легко подключить к Flask, например, такм образом: init.py
Goaccess - анализатор логов nginx. Он может предоставлять интересную и удобную инфографику о работе на сервере. Для real-time обновления необходимо, чтобы был открыт порт 7890. Вариант демона, запускающего goaccess: goaccess.service.
Файлы с конфигурацией логично хранить где-нибудь в одном месте, и в нужные места системы класть не копии файлов, а символические ссылки.
Для того, чтобы сервер был доступен из интернета, необходимо сделать Port Forwarding на локальном роутере. Port Forwarding заключается в перенаправлении всех запросов из интернета по этому порту на устройство, IP которого указан в конфигурации. Соответственно, рекомендуется настроить DCHP-сервер на выдачу определённого локального IP серверу. Теперь сервер доступен по ip-адресу сервера. Но ip может быть динамическим. Чтобы обойти эту проблему, можно организовать DDNS (Dynamic DNS). Есть и бесплатные сервисы такого рода, например no-ip.com