Files
orchestrator/docs/work-items/ORCH-103/07-infra-requirements.md

5.6 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-103 architecture architect proposed 2026-06-11 claude-opus-4-8

07 — Инфра-требования: ORCH-103 — Bundled-тираж: весь стек одним комплектом + bootstrap

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

Вся инфраструктура этой задачи — ЦЕЛЕВОЙ хост заказчика (и одноразовый тестовый хост/VM приёмки). Инфраструктура НАШЕГО прод-контура (mva154) не затрагивается ни одним пунктом: артефакты bundle в нашем контуре инертны (NFR-2, паттерн ORCH-009).

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

Наш контур: N/A (корневой docker-compose.yml, прод 8500, staging 8501 — байт-в-байт).

Целевой хост bundle (нормативно, ADR-001 D1/D3/D4):

  • Один Linux x86_64 хост, docker + docker compose v2, sudo у оператора. Compose-проект orchestrator-bundle (deploy/bundled/docker-compose.yml), одна именованная bridge-сеть.
  • Состав: orchestrator (build из корневого Dockerfile), orchestrator-watchdog (build из watchdog/Dockerfile), gitea (пиннованный gitea/gitea), Plane CE-стек — зеркало upstream selfhost-référence (≈1314 сервисов: web/space/admin/api/worker/beat-worker/ migrator/live + postgres/redis/mq/minio/proxy; точные теги пиннит developer по проверенному стенду). Staging-контур орка отсутствует.
  • Карта портов (дефолты; конфигурируемы в deploy/bundled/.env.example): ${BUNDLE_ORCH_PORT:-8500} — API орка (smoke/health), ${BUNDLE_PLANE_PORT:-8080} — Plane proxy (UI), ${BUNDLE_GITEA_HTTP_PORT:-3000} — Gitea web. Postgres/redis/mq/minio/ssh-Gitea — наружу не публикуются. Машинный трафик (webhooks в обе стороны, API, git, /metrics) — внутрисетевой сервис-DNS.
  • Хранилище: состояние Plane/Gitea — именованные тома orchestrator-bundle_*; данные орка — bind deploy/bundled/data; репозитории агентов — bind deploy/bundled/repos (владелец — uid оператора = ORCH_RUN_UID, инвариант ORCH-040).
  • Ресурсы (предусловие, гипотеза BRD §6 — финальные цифры по замеру на приёмке, AC-4): ориентир ≥ 4 vCPU / 8 GB RAM / 40 GB диска; preflight bootstrap проверяет и отказывает до любых мутаций (BR-7).

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

  • Новый канон: deploy/bundled/.env.example (bundle-инфра: BUNDLE_PUBLIC_HOST, карта портов, реюз ORCH_RUN_UID/GID/ORCH_DOCKER_GID/ORCH_AGENT_HOME_DIR/ORCH_HOST_CLAUDE_*, плейсхолдеры внутренних кред Plane/Gitea по upstream-именам). Live-файлы только на целевом хосте, права 600: deploy/bundled/.env, корневые .env/.env.watchdog (каноны Lite 1:1).
  • Корневой .env.example НЕ меняется (bundle не вводит новых ключей Settings); в .gitignore добавляется deploy/bundled/repos/ (остальные live-файлы уже покрыты неякорными .env/data//.env.watchdog).
  • Секреты (FR-3): webhook-секреты — gen_secrets.py; внутренние креды стека (postgres/ redis/mq/minio/SECRET_KEY Plane, админ Gitea) — stdlib secrets в bootstrap; внешние предусловия заказчика — Claude CLI/Anthropic-доступ (обязателен для конвейера), Telegram-токены (опциональны). В репо и логах bootstrap секретов нет (NFR-3, тест-эвристика).

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

  • Наш прод: рестарт НЕ требуется и НЕ выполняется. Задача — docs+scripts+compose+tests; мерж в main ничего не активирует в нашем контуре (никто не исполняет bundle-артефакты; kill-switch не нужен — паттерн ORCH-009). Self-hosting инвариант соблюдён по построению.
  • На целевом хосте пересоздание контейнеров орка/watchdog после сборки env — штатный шаг bootstrap (D5 шаг 8); к нашему проду отношения не имеет.

I-4. CI/CD

  • .gitea/workflows/**без изменений; три новых структурных тест-модуля подхватываются существующим pytest tests/ -q (без docker/сети/LLM — CI-безопасны, TC-12).

I-5. Разовое предусловие приёмки (человек)

Чистый тестовый Linux-хост/VM (ресурсы I-1) для ручной приёмки AC-1/AC-2/AC-3/AC-8 по BUNDLED_SETUP.md + замер фактических минимумов RAM/диск/CPU для §2 дока (AC-4: цифры «не с потолка»). На нашем боевом хосте bundle не запускается ни в каком виде (BRD §2.2).