Документация

К списку статей
08. Эксплуатация: запуск, health, бэкап, диагностика

Аудитория: ИТ-администратор, суперадминистратор. Сценарий: день-в-день эксплуатация стенда/пилота: поднять, проверить «живость», снять бэкап, разобрать инцидент.

Эта статья собирает самое частое в эксплуатации в одном месте: поднять стенд, проверить «живость», снять бэкап, разобрать инцидент. Полные регламенты установки и восстановления ведутся отдельными эксплуатационными документами поставки.

Запуск
cd licenziar
# чистый том ОБЯЗАТЕЛЕН, если менялись миграции (иначе already_seeded их пропустит):
docker compose -f docker-compose.phase1.yml down -v
ANON_SALT=test-salt docker compose -f docker-compose.phase1.yml up --build -d
# web:  http://localhost:3007    api:  http://localhost:8001    /docs — OpenAPI

Сервисы: db (Postgres) · dbinit (разовый: роль, миграции, сид, Vault) · api (FastAPI) · collector (планировщик сбора) · web (Next).

Проверка «живости» (health)
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8001/api/health   # 200 = ок

/api/healthглубокая проверка: реально ходит в БД и отдаёт 503, если БД недоступна (а не «ок, пока приложение живо»). В compose настроен healthcheck api; статус виден в docker compose ps (healthy/unhealthy).

Быстрый смоук по экранам:

for p in / /efficiency /risks /collectors /settings /systems; do
  printf "%-12s " "$p"; curl -s -o /dev/null -w "%{http_code}\n" "http://localhost:3007$p"; done
Логи и трассировка

JSON-логи (stdlib, без внешней зависимости), у каждой строки и в заголовке ответа — X-Request-ID (contextvar-middleware). Ключевые события: auth.login.ok/failed, collector.run.ok.

docker logs licenziar-api-1 | tail -50
docker logs licenziar-collector-1 | grep collector.run.ok   # прогоны сбора
Бэкап и восстановление (кратко)
bash deploy/backup.sh        # pg_dump именованного тома pgdata + ротация по ретенции

Данные лежат в именованном томе `pgdata` — он переживает пересоздание контейнеров (но не down -v, который том стирает). Полный регламент восстановления ведётся отдельным эксплуатационным документом поставки.

Прод-обвязка (что включается флагами)
МеханизмГдеПоведение
Fail-fast секретовvalidate_prod_secretsпри APP_ENV=prod запуск падает, если JWT_SECRET/ANON_SALT/APP_DB_PASSWORD дефолтные/слабые
Rate-limitslowapi (middleware)login 10/мин, ingest 120/мин; глушится RATELIMIT_ENABLED=0 в тестах
Cookie/CSRFмодуль аутентификацииAUTH_COOKIE_MODE=1 → httpOnly-cookie + CSRF double-submit
CORS-замокCORS_ORIGINSконкретные origin вместо *

Прод-профиль — отдельный compose-файл и nginx-конфиг (same-origin web+api, APP_ENV=prod, секреты обязательны).

Диагностика частых инцидентов
СимптомПричинаЧто делать
api = unhealthyБД не поднялась / нет миграцийdocker logs licenziar-db-1, dbinit; при смене миграций — down -v и заново
«Поправил код — на стенде по-старому»BuildKit молча не пересобрал webсобирать DOCKER_BUILDKIT=0 ... up --build
Vault resolve не находит idразная ANON_SALT на сиде и сейчасдержать одну соль (стенд — test-salt)
Миграция не примениласьalready_seeded на старом томеdown -v перед up
pytest пишет в /home/app отказюзер контейнерагонять тесты -u root; пути в git-bash — MSYS_NO_PATHCONV=1
Playwright не находит браузерпуть кэшаPLAYWRIGHT_BROWSERS_PATH машинный (D:\DevCaches\ms-playwright), не переопределять
Грабли (сводка)
  • `down -v` стирает данные — это инструмент чистого пересева, не «перезапуск».
  • Стендовые секреты в проде = отказ старта — это защита (validate_prod_secrets).
  • `collector_runs` растут — журнал событий сбора, чистится регламентно.

Связанные статьи: 04 — Механизм сбора · 05 — Автономность и стек.