From ca55a7951e157e0db6ce19143459deb2e9c096d0 Mon Sep 17 00:00:00 2001 From: vitya Date: Wed, 26 Aug 2026 10:08:57 +0300 Subject: [PATCH] =?UTF-8?q?runbooks:=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA?= =?UTF-8?q?=D1=81=20=D1=80=D0=B0=D0=BD=D0=B1=D1=83=D0=BA=D0=BE=D0=B2=20+?= =?UTF-8?q?=20admin-runbooks=20=D0=BA=D0=BE=D0=BD=D1=82=D1=83=D1=80=20?= =?UTF-8?q?=D0=B2=20AGENTS.md=20(=D1=81=D0=BA=D0=B8=D0=BB=20~/.agents/skil?= =?UTF-8?q?ls/admin-runbooks,=20=D0=BF=D0=BE=D0=B3=D0=BB=D0=BE=D1=89=D0=B0?= =?UTF-8?q?=D0=B5=D1=82=20writing-runbooks)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .wiki/concepts/runbooks-index.md | 54 ++++++++++++++++++++++++++++++++ AGENTS.md | 8 +++++ 2 files changed, 62 insertions(+) create mode 100644 .wiki/concepts/runbooks-index.md diff --git a/.wiki/concepts/runbooks-index.md b/.wiki/concepts/runbooks-index.md new file mode 100644 index 0000000..32bb074 --- /dev/null +++ b/.wiki/concepts/runbooks-index.md @@ -0,0 +1,54 @@ +--- +title: "Ранбуки — индекс (что есть, где лежит, что покрывает)" +type: concept +tags: [runbook, index, ops, deploy, admin] +related: [concepts/portainer-stack-management-vds.md] +updated: 2026-08-26 +--- + +# Индекс ранбуков зоны админа + +> **⚙️ СЛУЖЕБНЫЙ РАНБУК — только для администратора проекта `.admin`.** +> Применять/выполнять шаги может только **`.admin`** (оператор проекта admin). Другим проектам/агентам — читать по запросу, не выполнять. +> Из проекта не выносить: не копировать в другие вики, не пересказывать, не публиковать. +> Нужен деплой или прод-операция по этому ранбуку — **поставить задачу админу (`.admin`) и написать письмо**. Админ выполняет, остальные верифицируют. + +Единый источник «какой ранбук для чего». **Обязательный первый шаг перед любой +прод-операцией** (деплой/редеплой/рестарт/ротация/миграция/инцидент) — скил +`admin-runbooks` §0. Если строки для проекта нет — ранбука не существует: +создать (см. `admin-runbooks` §WRITE) до/вместе с операцией. + +## VDS-проекты (`.admin/.wiki/concepts/`) + +| Проект / операция | Ранбук | Что покрывает | +|---|---|---| +| pilorama98.ru (pilonuxt, стек 16) | [`pilorama98-vds-deploy-runbook.md`](pilorama98-vds-deploy-runbook.md) | рестарт (кэш viewModel) vs пересборка; build с workstation (VERDACCIO secret); PUT стек 16; verify; rollback; инвентарь образов | +| pilorama98.ru — диагностика кэша vs кода | [`pilonuxt-restart-vs-redeploy-2026-08-16.md`](pilonuxt-restart-vs-redeploy-2026-08-16.md) | когда рестарт, когда пересборка; симптом 500 @snolla/core; инвентарь образов | +| stostayer.ru (legacy web, стек клиента) | [`stostayer-web-deploy-runbook.md`](stostayer-web-deploy-runbook.md) | build 0.3.x (offline-кэш, временные .dockerignore/.yarnrc); push 1 попыткой (egress-бан); redeploy через Portainer на хосте клиента; verify | +| mappa (стек 27) | [`mappa-vds-deploy-runbook.md`](mappa-vds-deploy-runbook.md) | build+push; pull-ДО-рестарта; compose sync; PUT стек 27 env 3/3; verify; gotcha env-сброс | +| emspb.ru (snolla-app, стек 18) | [`emspb-vds-deploy-runbook.md`](emspb-vds-deploy-runbook.md) | build на VDS (git archive); env-контракт 8 секретов; cutover | +| labtools.ru (стек 19) | [`labtools-vds-deploy-runbook.md`](labtools-vds-deploy-runbook.md) | то же семейство snolla-app | +| labtools.pro (стек 20) | [`labtools.pro-vds-deploy-runbook.md`](labtools.pro-vds-deploy-runbook.md) | то же семейство snolla-app | +| on.snolla.com (стек 22) | [`on-snolla-vds-deploy-runbook.md`](on-snolla-vds-deploy-runbook.md) | cutover 2026-07-20, семейство snolla-app | +| tandemmebel.ru (стек 20/иное) | [`tandemmebel-vds-deploy-runbook.md`](tandemmebel-vds-deploy-runbook.md) | cutover + snolla bumps | +| maljarka.tandemmebel.ru | [`maljarka-vds-deploy-runbook.md`](maljarka-vds-deploy-runbook.md) | restore-деплой 2026-07-31 | +| oCIS / owncloud | [`ocis-on-vds-deploy-recipe.md`](ocis-on-vds-deploy-recipe.md) | deploy recipe + gotchas | + +## Инфраструктурные ранбуки + +| Операция | Ранбук | Что покрывает | +|---|---|---| +| MinIO split (books-vds + CMS-media) | [`minio-split-cutover-runbook.md`](minio-split-cutover-runbook.md) | cutover Track A/B, rollback | +| Общий Portainer-канон VDS kzntsv | [`portainer-stack-management-vds.md`](portainer-stack-management-vds.md) | JWT auth, gotchas 1-10, redeploy-рецепт, инвентарь стеков | +| Политика деплоя mappa | [`deploy-policy-mappa.md`](deploy-policy-mappa.md) | кто деплоит, канон таска+письмо | + +## Репо-вики проектов (второй источник, если не в .admin) + +- pilorama98.ru: `apps/web/.wiki/concepts/docker-deploy.md` — сборка образа, деплой. +- snolla: `concepts/` — сборка snolla-пакетов (не деплой сайтов). + +## Ведение индекса + +- Новая строка при создании ранбука (WRITE) или при изменении покрытия. +- Актуализировать при UPDATE ранбука (тег/стек/операции). +- Расхождение «ранбук есть, индекс молчит» — тоже баг ведения, чинить сразу. diff --git a/AGENTS.md b/AGENTS.md index ddb6864..70f1585 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -11,6 +11,7 @@ inbox monitor: raise on start follow project discipline delegate to interns when allowed recommend, don't menu +admin runbooks: use index before any prod op, execute by runbook, write/update runbooks we're on Windows # Secrets rule @@ -23,3 +24,10 @@ we're on Windows Все docker-compose stacks на VDS управляются через Portainer (`https://portainer.vds.kzntsv.site`). `ssh + docker compose up -d` на VDS — anti-pattern. См. [`portainer-stack-management-vds`](.wiki/concepts/portainer-stack-management-vds.md) для migration script + gotchas. Исключения: `traefik` + `portainer` (management plane, ad-hoc compose). + +# Runbooks rule + +**Перед любой прод-операцией (деплой/рестарт/ротация/миграция/инцидент) — сначала индекс ранбуков:** +[`runbooks-index`](.wiki/concepts/runbooks-index.md) — единственный источник «какой ранбук для чего». +Нет ранбука на проект → создать до/вместе с операцией (скил `admin-runbooks` §WRITE). +Деплой по ранбуку = таска + письмо админу. Секреты в ранбуках — только плейсхолдеры из `pass`.