1.9 KiB
Развёртывание
Одна команда локально: скопировать .env.example в .env, затем docker compose --profile tools run --rm migrate и docker compose up --build. Compose поднимает приложение и PostgreSQL. Контейнер PostgreSQL создаёт отдельную роль krona_staff_app с NOSUPERUSER NOBYPASSRLS; миграции выполняются только ролью krona_migrator. Redis и object storage не включаются до появления реального сценария очередей или файлов.
Production: один stateless app container/process, отдельный PostgreSQL, TLS/reverse proxy, secret manager и централизованные logs/metrics/traces. Приложению выдаётся только роль без SUPERUSER и BYPASSRLS; миграционный URL хранится отдельно и не передаётся runtime-контейнеру. /api/v1/staff/live проверяет процесс, /api/v1/staff/ready — обязательные зависимости, /api/v1/staff/version — release и runtime mode. Container работает non-root, read-only filesystem.
HA сейчас не требуется. Для будущего scale-out: общий PostgreSQL/Redis/S3, несколько API/worker nodes, leader election для scheduler, outbox relay и идемпотентные consumers. Локальные вложения запрещены. Linux и Windows deployment сохраняют паритет на уровне Node/container contract.
Миграции запускаются отдельным one-shot job до rollout, учитываются в schema_migrations и защищены advisory lock. Down откатывает только последнюю миграцию и требует backup плюс ALLOW_MIGRATION_DOWN=true.