3.2 KiB
ADR-007: развёртывание приложения с помощью Docker Compose
Статус: Принято
Дата: 2026-07-23
Контекст
Программное решение состоит из PostgreSQL, сервиса миграций, Telegram-бота и Flask-сайта. База данных должна быть готова до запуска приложений, а SQL-миграции должны выполняться последовательно с сохранением истории применения.
Решение
Для развёртывания используется Docker Compose из четырёх основных сервисов:
db, site, bot и migrate. Сервисы базы данных и миграций используют
готовые образы на основе Alpine Linux. Модули приложения собираются с помощью
Dockerfile на базе среды выполнения Python 3.13 и включают необходимые
библиотеки.
Первым запускается контейнер db с PostgreSQL, который также импортирует
первичные настройки ролей. Контейнер PostgreSQL не публикует порт на хост и
остаётся доступным только внутри сети Compose.
Затем запускается контейнер migrate. Он последовательно применяет SQL-скрипты
из db/migrations и сохраняет историю их применения в таблице
public.schema_migrations. Для каждой миграции хранится контрольная сумма. Если
уже применённый файл был изменён, выполнение завершается с ошибкой.
После успешного завершения миграций запускаются Telegram-бот и Flask-сайт.
Условиями их запуска являются нормальное состояние контейнера базы данных и
успешное завершение контейнера migrate.
Сайт доступен только через loopback-адрес 127.0.0.1. Внешний nginx принимает
HTTPS-трафик и передаёт заголовки X-Forwarded-*. Бот не имеет входящего порта
и получает обновления методом long polling.
Контейнеры приложения выполняются от системного пользователя runtime, а не от
root.
Последствия
Миграции выполняются до запуска прикладных процессов. PostgreSQL не публикуется наружу, сайт доступен извне только через HTTPS-прокси, а Telegram-бот не требует входящего сетевого порта. Изменение уже применённой миграции обнаруживается по несовпадению контрольной суммы.