6.3 KiB
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 сервиса (
orchestrator8500,orchestrator-watchdog,orchestrator-staging8501 под профилемstaging),network_mode: host, те же тома иgroup_adddocker-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_PORT ⇄ WATCHDOG_METRICS_URL ⇄ ORCH_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).