57 lines
4.5 KiB
Markdown
57 lines
4.5 KiB
Markdown
# 07 — Инфраструктурные требования (ORCH-021)
|
||
|
||
> Топология НЕ меняется. Фича опирается на уже существующие HTTP-эндпоинты прода и
|
||
> существующий деплой-хук. Этот документ фиксирует, какие инфра-предпосылки должны
|
||
> выполняться, чтобы наблюдение и реакция работали.
|
||
|
||
## 1. Топология — без изменений
|
||
- Прод `orchestrator` (8500), staging `orchestrator-staging` (8501), один сервер
|
||
mva154 (см. `docs/operations/INFRA.md`). Новых контейнеров/портов/сервисов нет.
|
||
- Наблюдение — внутрипроцессный reserved-agent job в worker'е прод-контейнера.
|
||
Daemon-потоков не добавляется (в отличие от reconciler).
|
||
|
||
## 2. Наблюдаемый прод — HTTP-эндпоинты
|
||
- Монитор опрашивает `post_deploy_base_url` (дефолт `http://localhost:8500`):
|
||
- `GET /health` → ожидается HTTP 200 + тело `{"status":"ok"}` (BR-2);
|
||
- `GET /status`, `GET /queue` → учёт доли HTTP 5xx (BR-2).
|
||
- Эндпоинты уже существуют (`src/main.py`). Новых эндпоинтов фича НЕ вводит
|
||
(out-of-scope APM/метрики).
|
||
- Для self-hosting `base_url=localhost:8500` означает: монитор бьёт по собственному
|
||
контейнеру. Это допустимо для MVP (см. риск R-1 в `10-tech-risks.md`).
|
||
|
||
## 3. Деплой-хук `--rollback` — предпосылки реакции
|
||
- Реакция ROLLBACK (только не-self + `post_deploy_auto_rollback=True`) вызывает
|
||
`scripts/orchestrator-deploy-hook.sh --rollback` с прод-env (переиспользуются
|
||
`deploy_prod_*`: `TARGET_SERVICE`/`TARGET_PORT`/`TARGET_IMAGE`/`COMPOSE_PROFILE`/
|
||
`PREV_IMAGE_FILE`), по образцу `self_deploy.build_deploy_command`.
|
||
- Предпосылка: при штатном деплое хук сохраняет предыдущий образ в
|
||
`PREV_IMAGE_FILE` (`.deploy-prev-image-prod`). Без снимка → хук вернёт exit 1
|
||
(«нет prev-образа») → `ROLLBACK_FAILED` + алерт (AC-9). Контракт exit-кодов хука
|
||
(0/1/2) НЕ меняется.
|
||
- **Self-hosting:** откат прод-орка хуком в тике ЗАПРЕЩЁН (контейнер не откатит себя,
|
||
умирая). Если оператор по алерту решит откатить — только detached host-процесс
|
||
(ssh + setsid, механика `self_deploy.initiate_deploy`), как у Phase B самодеплоя.
|
||
Предпосылки для detached-пути (ssh-доступ host, shared-mount state-dir) уже
|
||
выполнены для ORCH-36; в MVP detached-откат self вне тика наблюдения.
|
||
|
||
## 4. Restart-safe состояние — shared mount
|
||
- Состояние наблюдения — sentinel-файлы под `.post-deploy-state-<repo>/<wi>/`
|
||
(`armed`, `series`, `done`) на том же mount `settings.repos_dir`, что и
|
||
`.deploy-state-*` (ORCH-36). Миграции БД нет (см. `08-data-requirements.md`).
|
||
- `requeue_running_jobs` (ORCH-1) восстанавливает claimed `post-deploy-monitor` job
|
||
после рестарта; `series` хранит счётчики опросов → наблюдение продолжается
|
||
с того же места (BR-7/AC-15).
|
||
|
||
## 5. Конфигурация окружения (env `ORCH_*`)
|
||
Новые ключи (дефолты безопасны, в `.env`/`.env.staging` по необходимости):
|
||
`post_deploy_monitor_enabled` (kill-switch, дефолт true), `post_deploy_repos` (CSV,
|
||
пусто → self-hosting), `post_deploy_window_s` (900), `post_deploy_interval_s` (30),
|
||
`post_deploy_fail_threshold` (3), `post_deploy_5xx_threshold` (0.5),
|
||
`post_deploy_auto_rollback` (false), `post_deploy_base_url` (localhost:8500).
|
||
Параметры отката — существующие `deploy_prod_*`, новых дублей не вводить.
|
||
|
||
## 6. Чего НЕ требуется
|
||
- Новых контейнеров, портов, сетевых правил, секретов.
|
||
- Prometheus / Grafana / APM (out-of-scope).
|
||
- Изменений compose-топологии или деплой-пути не-self репо.
|