Files
orchestrator/docs/work-items/ORCH-101/07-infra-requirements.md
claude-bot 26bdd783d6
All checks were successful
CI / test (push) Successful in 59s
architect(ET): auto-commit from architect run_id=603
2026-06-10 20:23:50 +03:00

6.3 KiB
Raw Blame History

work_item, stage, author_agent, status, created_at, model_used
work_item stage author_agent status created_at model_used
ORCH-101 architecture architect proposed 2026-06-10 claude-opus-4-8

07 — Инфра-требования: ORCH-101 — ORCH-10-common: расхардкод + секреты + smoke

Work Item: ORCH-101 · Repo: orchestrator · Стадия: architecture

Топология НЕ меняется (контейнеры/порты/сеть/тома — те же при дефолтах); меняется параметризуемость инфра-файлов. Раздел фиксирует карту переменных и правила раската.

I-1. Топология / окружения

  • Без изменений при дефолтах: те же 3 сервиса (orchestrator 8500, orchestrator-watchdog, orchestrator-staging 8501 под профилем staging), network_mode: host, те же тома и group_add docker-gid («МИНА 1» ORCH-040 — сохраняется, литерал → ${ORCH_DOCKER_GID:-999}).
  • docker-compose.yml переводится на интерполяцию ${VAR:-default} (реестр ТЗ §3.1 B; карта — ADR-001 D6); Dockerfile получает ARG APP_UID/APP_GID/APP_USER/APP_HOME (D5); оба сервиса получают явный command: с портом из env (${ORCH_DEPLOY_PROD_TARGET_PORT:-8500} / ${ORCH_STAGING_PORT:-8501}) — дефолтный резолв эквивалентен текущей конфигурации (AC-2/TC-06).
  • Источник интерполяции.env проекта / shell-окружение (НЕ env_file сервиса): интерполяционные значения тиража живут в .env (ADR-001 D1; попадает в REPLICATION.md).
  • Имена сервисов/контейнеров/образов, профиль staging, network_mode: host, контейнерные пути (/app/data, /repos, /opt/claude-code) — платформенные константы (ADR-001 D3/D4/D6).

I-2. Переменные окружения / секреты

Новые Settings-ключи (дефолт = боевому значению; см. ADR-001 D2/D4):

env Дефолт Назначение
ORCH_AGENT_HOME_DIR /home/slin HOME акторских процессов (launcher ×2 / self-deploy / post-deploy) + таргеты маунтов + APP_HOME
ORCH_AGENT_GIT_NAME claude-bot git-имя агентских коммитов
ORCH_GIT_EMAIL_DOMAIN mva154.local домен git-email всех акторов (<actor>@<domain>)
ORCH_STAGING_PORT 8501 порт staging: image_freshness (c guard'ом ≠ прод-порт) + compose command:

Новые compose-only переменные: ORCH_HOST_CLAUDE_DIR, ORCH_HOST_CLAUDE_JSON, ORCH_HOST_SSH_DIR, ORCH_HOST_CLAUDE_CODE_DIR, ORCH_HOST_NODE_BIN, ORCH_DOCKER_GID, ORCH_RUN_UID, ORCH_RUN_GID (дефолты — текущие значения; полная карта — ADR-001 D6). Реюз существующих имён: ORCH_HOST_REPOS_DIR, ORCH_DEPLOY_SSH_USER, ORCH_DEPLOY_HOST_REPO_PATH, ORCH_DEPLOY_PROD_TARGET_PORT, legacy DEPLOY_HOOK_SCRIPT. Deploy-hook: REPO="${REPO:-/home/slin/repos/orchestrator}" + явная передача REPO= обоими инвокерами (ADR-001 D7).

Секреты (BR-3 / AC-5): новый stdlib-скрипт scripts/gen_secrets.py — криптослучайные ORCH_PLANE_WEBHOOK_SECRET/ORCH_GITEA_WEBHOOK_SECRET (secrets.token_hex(32)), печать по умолчанию, --write с отказом при существующем .env (перезапись только --force). Внешние токены (ORCH_PLANE_API_TOKEN, ORCH_PLANE_BOT_*, ORCH_GITEA_TOKEN, ORCH_TELEGRAM_BOT_TOKEN, WATCHDOG_TG_*) — по чек-листу REPLICATION.md (где выпустить → куда вписать → как проверить). Боевые секреты текущего хоста не покидают его (NFR-3); в гит — только шаблоны/плейсхолдеры (правило агентов №8); .env.example доводится до 100% обязательных ключей, .env.staging.example согласуется.

Карта env в docs/operations/INFRA.md дополняется всеми новыми ключами; deployment-раздел — новый docs/operations/REPLICATION.md (FR-7). Чек-лист тиража обязывает: ORCH_PROJECTS_JSON (fallback-реестр UUID'ов чужого Plane не сматчится), когерентность портов ORCH_DEPLOY_PROD_TARGET_PORTWATCHDOG_METRICS_URLORCH_POST_DEPLOY_BASE_URL.

I-3. Деплой / рестарт

  • Рестарт прод-контейнера в рамках задачи — НЕ требуется и запрещён (NFR-1, self-hosting): правки docker-compose.yml/Dockerfile/хука инертны до следующего штатного деплоя через конвейер (staging 8501 → ручной Confirm Deploy, ORCH-059).
  • На текущем хосте ничего донастраивать не нужно: все дефолты = боевым значениям; пустой/ неизменённый .env → поведение 1:1 (BR-5). Откат = не задавать переменные (NFR-2).
  • Инвариант ORCH-058 сохранён и усилен: freshness-путь fail-closed отказывает при ORCH_STAGING_PORT == прод-порт (ADR-001 D4); INV-4 не затрагивается.

I-4. CI/CD

  • .gitea/workflows/без изменений. Новые тесты (test_no_host_hardcodes.py, test_host_config_keys.py, test_infra_parametrization.py, test_secrets_gen.py, test_replication_smoke.py) попадают в существующие гейты (check_ci_green/ check_tests_passed/merge-gate re-test) автоматически — новых QG не вводится (NFR-6).
  • Новых pip/системных зависимостей нет (генератор секретов — stdlib).