Files
BitrixDealsBot/docs/adr/007-container-deployment.md

3.2 KiB
Raw Permalink Blame History

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-бот не требует входящего сетевого порта. Изменение уже применённой миграции обнаруживается по несовпадению контрольной суммы.