Operator capability to bring a NEW project online in one pass, fully
outside the runtime and the pipeline (src/** byte-exact, no kill-switch
needed — activation is an explicit human CLI run). Reference = the
orchestrator repo itself (ORCH-52b/c/d/e canons).
* onboarding/repo-skeleton/ — parametrized kit of a new repo: 6 agent
prompt templates per canon 52d/92 (5 ru + deployer en with the
shared-host guardrail frame), reviewer doc-gate (REQUEST_CHANGES),
CLAUDE.md passport, AGENTS.md, CONTRIBUTING.md, docs/ skeleton with
mandatory operations/INFRA.md, .env.example; {{NAME}} placeholders +
stdlib render, dictionary onboarding/placeholders.json (bijection
held by tests). Canon is NOT forked: docs/_templates + docs/_standards
are live-copied from the checkout at materialization time (BR-2/D3).
* scripts/onboard_project.py — plan (default, GET-only, zero mutations)
/ apply (idempotent ensure, no delete ops at all) / verify (registry
round-trip via the actual projects._parse_projects_json, all 22 state
names incl. fail-closed Confirm Deploy/STOP, labels, webhook, kit
completeness, unresolved-placeholder scan). Closed read-only src
import list (ADR D4); state groups fixed per ADR D5 (STOP→cancelled,
terminal groups only Done/Cancelled/STOP); Gitea webhook reuses the
single global ORCH_GITEA_WEBHOOK_SECRET (TR-6); initial push ONLY
into a freshly created empty repo (INV-4 untouched); never restarts
prod / never edits .env / deletes nothing (NFR-2); secrets masked
(NFR-3); Plane CE API gaps degrade to manual-step (fail-safe).
* docs/operations/ONBOARDING.md runbook + SETUP_WEBHOOKS.md generalized
per-repo; CLAUDE.md / docs/architecture/README.md / CHANGELOG.md
updated in the same PR (golden source).
* Anti-drift tests: test_onboarding_kit.py / test_onboarding_script.py
(mocked, no network) / test_onboarding_invariants.py (snapshots of
STAGE_TRANSITIONS/QG_CHECKS, closed CLI import list, reference
.openclaw/agents/ prompts untouched). Full regression: 1713 passed.
Refs: ORCH-009
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
61 lines
4.1 KiB
Markdown
61 lines
4.1 KiB
Markdown
# INFRA.md — инфраструктура и эксплуатация {{PROJECT_NAME}}
|
||
|
||
> RUNBOOK. Топология, контейнеры, порты, переменные окружения, границы.
|
||
> **Секреты тут НЕ хранятся** — только дескрипторы. Реальные значения — в `.env` на хосте.
|
||
|
||
## Топология
|
||
|
||
```
|
||
общий хост (рядом живут контейнеры ДРУГИХ проектов)
|
||
┌──────────────────────────────────────────────────────────────────────┐
|
||
│ {{REPO}} (PROD) :{{PROD_PORT}} env_file .env │
|
||
│ {{REPO}}-staging (STAGING) :{{STAGING_PORT}} изолированные данные │
|
||
└──────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
(уточни диаграмму под фактическую топологию: сеть, тома, БД, внешние зависимости)
|
||
|
||
## Контейнеры
|
||
|
||
| Контейнер | Роль | Порт | env_file | Данные (хост) | Старт |
|
||
|-----------|------|------|----------|---------------|-------|
|
||
| `{{REPO}}` | прод | {{PROD_PORT}} | `.env` | (указать тома/БД) | (команда старта) |
|
||
| `{{REPO}}-staging` | staging | {{STAGING_PORT}} | (staging env) | (изолированные) | (команда старта) |
|
||
|
||
## Карта env-переменных
|
||
|
||
Канон карты — `.env.example` в корне репо (дескрипторы без значений). Правило секретов:
|
||
**секреты ТОЛЬКО в `.env` на хосте**, в гит не коммитятся; `docker-compose.yml`/`Dockerfile`
|
||
(если есть) трекаются в гите.
|
||
|
||
| Переменная | Назначение |
|
||
|-----------|-----------|
|
||
| `APP_PROD_PORT` | порт прод-контура ({{PROD_PORT}}) |
|
||
| `APP_STAGING_PORT` | порт staging-контура ({{STAGING_PORT}}) |
|
||
| (дополнять при вводе переменных) | |
|
||
|
||
## Границы доступа
|
||
|
||
- Кто имеет доступ к хосту/контейнерам/данным проекта — перечислить явно.
|
||
- Токены/ключи проекта: где живут (только `.env` на хосте), кем используются, как ротируются.
|
||
- Агенты конвейера работают в worktree репо и НЕ имеют доступа к чужим проектам.
|
||
|
||
## Smoke-endpoints
|
||
|
||
| Endpoint | Контур | Назначение |
|
||
|----------|--------|-----------|
|
||
| (например `/health`) | staging {{STAGING_PORT}} / prod {{PROD_PORT}} | живость сервиса (read-only) |
|
||
|
||
## ⚠️ Эксплуатационные предупреждения — риски общего хоста
|
||
|
||
- Хост ОБЩИЙ: рядом работают контейнеры других проектов и ресурсы (CPU/RAM/диск) делятся.
|
||
Дисковое место на хосте впритык — следи за объёмом образов/томов/логов.
|
||
- НИКОГДА не останавливать/не рестартить чужие контейнеры и не менять чужие env/тома.
|
||
- Рестарт прод-контура {{REPO}} — только по процедуре деплоя (см. ниже), не ad-hoc.
|
||
- Перед прод-деплоем обязателен staging-контур ({{STAGING_PORT}}).
|
||
|
||
## Деплой
|
||
|
||
(описать фактическую процедуру деплоя проекта: staging-проверка → прод-выкатка → health-check →
|
||
откат. Заполняется при настройке CI/CD проекта; deployer-агент исполняет ровно эту процедуру.)
|