Добавление всех наработок за период практики.

This commit is contained in:
SkyForces
2026-07-24 00:46:19 +03:00
parent 24943b8a73
commit ae4141ba28
56 changed files with 3987 additions and 136 deletions
+46
View File
@@ -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-бот не требует
входящего сетевого порта. Изменение уже применённой миграции обнаруживается по
несовпадению контрольной суммы.