74 lines
5.6 KiB
Markdown
74 lines
5.6 KiB
Markdown
---
|
||
work_item: ORCH-103
|
||
stage: architecture
|
||
author_agent: architect
|
||
status: proposed
|
||
created_at: 2026-06-11
|
||
model_used: 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 (≈13–14 сервисов: 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).
|