Files
orchestrator/onboarding/repo-skeleton/docs/operations/INFRA.md
claude-bot dc1cb87818 feat(onboarding): turnkey project onboarding — kit + CLI + runbook (ORCH-009)
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>
2026-06-10 16:08:43 +03:00

61 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-агент исполняет ровно эту процедуру.)