Развёртывание Flask-приложения
Сервер разработки Flask удобен локально — но не для того, что доступно всему интернету.
Раздел 22.5 запускал приложение командой python app.py,
которая внутри вызывает app.run(debug=True). Это
сервер разработки (development server) — встроенный во Flask, удобный
для локальной работы, но не предназначенный для реальной эксплуатации. Раздел
«Deploying to Production» официальной документации Flask прямо предупреждает об этом.
| Среда разработки | Рабочее развёртывание | |
|---|---|---|
| Кто использует | Вы сами, локально | Реальные пользователи через интернет |
| Сервер | Встроенный сервер разработки Flask | Отдельный сервер приложений (раздел 22.19) |
| debug=True | Удобно — подробные ошибки, автоперезапуск | Опасно — может показать посторонним внутренние детали кода и данные |
| Секреты (SECRET_KEY и т.п.) | Можно временное значение для локальной работы | Обязательно отдельное, не публикуемое значение |
Путь запроса до рабочего приложения
Конфигурация через переменные окружения
Проект этой главы уже читает путь к базе данных и секретный ключ из переменных окружения, с явным резервным значением для локальной разработки:
app.config["DATABASE"] = os.environ.get("TODO_APP_DB", str(DEFAULT_DB_PATH))
app.config["SECRET_KEY"] = os.environ.get(
"TODO_APP_SECRET_KEY", "dev-only-secret-do-not-use-in-production"
)
Так один и тот же код работает и локально (без единой настройки), и в другом окружении — там, где нужно, значения переменных окружения просто задают иначе, не трогая сам код.
Логи, несколько процессов, персистентность
У рабочего развёртывания есть и другие практические заботы, которые выходят за рамки этой главы: логи (записанная история происходящего, чтобы разбирать проблемы постфактум), запуск нескольких процессов или потоков одновременно для обработки параллельных запросов, и то, что база данных должна физически находиться на надёжном, не исчезающем хранилище. Мы намеренно не превращаем эту главу в учебник по эксплуатации — где эта тема продолжается, показывает раздел 22.36.
Официальная документация: Flask — Deploying to Production.