Запуск Production серверa - moevm/mse_teacher_plan GitHub Wiki

DEV-сервер, встроенный в Flask, непригоден для выпуска приложения. DEV-север негибкий, низкопроизводительный и заточен скорее под debug, чем под эффективную работу с приложением.
Прежде чем запустить Production-сервер, нужно убедится, что запускается DEV-сервер.
Чтобы запускать Flask-приложения в Production Enviroment, можно использовать, например, uWSGI

uWSGI

Конфигурация 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

Nginx в данном проекте настроен работать на 80-порту (стандартный порт http). Сокет uWSGI находится на 5000-м порту. Конфигурация nginx в данном случае выглядит так: mse_Teacher_plan.conf
Как уже было сказано, на одном хосте может работать несколько серверов. В этом случае можно создать отдельный файл .conf, который будет проксировать (proxy_pass) другие порты.

Sentry

Sentry - сервис для удобного трекинга ошибок. Его можно легко подключить к Flask, например, такм образом: init.py

Goaccess

Goaccess - анализатор логов nginx. Он может предоставлять интересную и удобную инфографику о работе на сервере. Для real-time обновления необходимо, чтобы был открыт порт 7890. Вариант демона, запускающего goaccess: goaccess.service.

Некоторые замечания

Файлы с конфигурацией логично хранить где-нибудь в одном месте, и в нужные места системы класть не копии файлов, а символические ссылки.

Настройка сервера

Для того, чтобы сервер был доступен из интернета, необходимо сделать Port Forwarding на локальном роутере. Port Forwarding заключается в перенаправлении всех запросов из интернета по этому порту на устройство, IP которого указан в конфигурации. Соответственно, рекомендуется настроить DCHP-сервер на выдачу определённого локального IP серверу. Теперь сервер доступен по ip-адресу сервера. Но ip может быть динамическим. Чтобы обойти эту проблему, можно организовать DDNS (Dynamic DNS). Есть и бесплатные сервисы такого рода, например no-ip.com

⚠️ **GitHub.com Fallback** ⚠️