Добавление всех наработок за период практики.
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
# 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-бот не требует
|
||||
входящего сетевого порта. Изменение уже применённой миграции обнаруживается по
|
||||
несовпадению контрольной суммы.
|
||||
Reference in New Issue
Block a user