tasks(bookva-tenant-cutover-prep): 🟢 closed 6/7 (Step 6 delayed by design)

Все ops-шаги VDS-side выполнены в одну сессию:
- 7 Gitea secrets (incl. BOOKVA_OVERLAY_TOKEN scope=read:repository)
- 9/10 Portainer stacks (ozon-mcp deferred — image отсутствует в registry)
- 6 volumes created, 4 populated; bookva-db-data (4.7G) + bookva-mongo-data
  (517M) через cp -a (downtimes 59s + 5s)
- bookva-db login-gate (3 users scrambled), books-db verified untouched
- DNS уже резолвилось (closed by inspection)
- books-web embed-api live (Portainer stack 24 + books deploy/web.compose.yml)

User-facing bookva stacks stopped post-create (Status=2) —
bookseller.kzntsv.site = 000 pre-cutover state. db/mongo/es оставлены
running (internal, useful для testing).

Cross-repo: bookva-overlay 6 commits (templates aligned, mariadb:10.6,
mongo:4.2, api internal-only, depends_on removed, .env.example v3
hostnames). books 2 commits (secret rename + web.compose embed-api refs).

Handoff to `bookva-tenant-cutover` micro-task when user скажет «поднимаем
Bookva»: re-start 6 stopped stacks + MinIO mc cp + ES snapshot/restore +
books-api stop после 24-48ч soak.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-26 10:58:29 +03:00
parent b430bce111
commit f91e51d937
2 changed files with 43 additions and 13 deletions

View File

@@ -1,4 +1,6 @@
# Admin Task Board # Admin Task Board
_Updated: 2026-05-26 (поздний вечер) — `bookva-tenant-cutover-prep` 🟢 **closed** — 6/7 в одну сессию: Steps 1+2+3+4+5+7. Step 6 delayed по spec (1-2 нед до cutover). bookva-ozon-mcp deferred (image не в registry). MinIO bucket copy deferred (cutover-time). 9 bookva Portainer stacks created (3 active: db/mongo/es internal-only; 6 stopped pre-cutover). bookva-overlay 4 commits: templates+mariadb:10.6+mongo:4.2+api internal-only+depends_on removed._
_Updated: 2026-05-26 (вечер) — `bookva-tenant-cutover-prep` 🟡 paused, 4/7 steps done в этой сессии: Steps 1+5+7 closed, Step 3 partial (6 empty volumes + 4 populated). Maintenance-window remaining: Step 2 stacks, Step 3 stateful (Mongo/MariaDB/MinIO), Step 4 login-gate. bookva-overlay templates align'нуты к prod shape + design v3 (commit `5b173de` pushed). books `75ea320` pushed (deploy/web.compose.yml embed-api refs). Pass entry `gitea/victor-books-ci-bookva-overlay` added._ _Updated: 2026-05-26 (вечер) — `bookva-tenant-cutover-prep` 🟡 paused, 4/7 steps done в этой сессии: Steps 1+5+7 closed, Step 3 partial (6 empty volumes + 4 populated). Maintenance-window remaining: Step 2 stacks, Step 3 stateful (Mongo/MariaDB/MinIO), Step 4 login-gate. bookva-overlay templates align'нуты к prod shape + design v3 (commit `5b173de` pushed). books `75ea320` pushed (deploy/web.compose.yml embed-api refs). Pass entry `gitea/victor-books-ci-bookva-overlay` added._
_Updated: 2026-05-26 — заведена `bookva-tenant-cutover-prep` ⚪ (7-step prep на books VDS перед поднятием Bookva стека). Code-side done в victor/books master: embed-api с zod^4 fix, ES endpoint per-tenant, PWA redirect banner, deploy.yml per-tenant, overlay-репо finalize, ntfy per-tenant. Осталась только Portainer/Gitea-secrets/VDS работа._ _Updated: 2026-05-26 — заведена `bookva-tenant-cutover-prep` ⚪ (7-step prep на books VDS перед поднятием Bookva стека). Code-side done в victor/books master: embed-api с zod^4 fix, ES endpoint per-tenant, PWA redirect banner, deploy.yml per-tenant, overlay-репо finalize, ntfy per-tenant. Осталась только Portainer/Gitea-secrets/VDS работа._
@@ -17,24 +19,28 @@ _Updated: 2026-05-25 (`iis-migration-to-ruvds` 🟢 closed Phase 1 per user deci
--- ---
## 🟡 [bookva-tenant-cutover-prep] — 7-step prep на books VDS перед поднятием Bookva стека (4/7 done) ## 🟢 [bookva-tenant-cutover-prep] — closed 2026-05-26 — 6/7 done в одну сессию (Step 6 delayed по spec)
Gitea secrets + Portainer bookva stacks + volume create/copy (Mongo/ES/MinIO/configs — beyond MariaDB из stateful-split-volume-copy) + bookva-db login-gate + DNS `bookseller.kzntsv.site` + PWA redirect env в books-web + books-web embedded-api env (pending step из embed-api). После — отдельной задачей `bookva-tenant-cutover` (compose up). Все ops-шаги VDS-side выполнены: Gitea secrets ✓ (7 шт), 9/10 Portainer bookva stacks ✓ (ozon-mcp deferred — image отсутствует в registry), volumes ✓ (db+mongo cp -a, es+ntfy empty, 4 config volumes populated), login-gate SQL ✓ (bookva-db users id≥3 → UUID random pwd), DNS ✓ (бы pre-existed), books-web embed-api switch ✓ (Portainer stack 24 + compose template synced).
**Контекст dev-source:** victor/books `.wiki/concepts/tenant-split.md` rev v3. Code-side closed master: `5e28fd1` embed-api+zod^4, `4a9cafc` ES endpoint, `c1e58cf` PWA redirect, `88df172` deploy.yml per-tenant. Overlay-repos: bookva-overlay/main `5b173de` (templates aligned), slovo-overlay/main `bca6bbc`. **Контекст dev-source:** victor/books `.wiki/concepts/tenant-split.md` rev v3. Code-side: `5e28fd1` embed-api+zod^4, `4a9cafc` ES endpoint, `c1e58cf` PWA redirect, `88df172` deploy.yml per-tenant. Overlay-repos: **bookva-overlay/main `8bffd68`** (templates aligned + mariadb:10.6 + mongo:4.2 + api internal-only + depends_on removed).
**Done в сессии 2026-05-26:** **Done в сессии 2026-05-26:**
- ✅ Step 5 DNS (pre-existed) | ✅ Step 1 (`BOOKVA_OVERLAY_TOKEN` secret + books `2f7b539`) | ✅ Step 7 (Portainer stack 24 PUT + books `75ea320`, smoke green) | 🟡 Step 3 partial (6 volumes + 4 populated из corrected templates) - ✅ Step 1: 7 Gitea secrets (BOOKVA_OVERLAY_TOKEN, HEALTHCHECK_BOOKVA_{API,WEB}_URL, PORTAINER_STACK_ID_BOOKVA_{API=45,WEB=46,SCHEDULER=47,OPS_MCP=43}). books `2f7b539` (secret name fix).
- ✅ Step 2: 9/10 Portainer stacks. Stack IDs: db=34, mongo=36, es=37, ops-mcp=43, ntfy=44, api=45, web=46, scheduler=47, task-runner=48. ozon-mcp deferred (image not in registry). User-facing stacks (api/web/scheduler/task-runner/ops-mcp/ntfy) **stopped** post-create (Status=2) — bookseller.kzntsv.site returns 000 как desired pre-cutover state. db/mongo/es оставлены running (внутренние, useful для testing).
- ✅ Step 3: 6 volumes created. **bookva-db-data (4.7G)** = cp -a `/usr/docker/books-db/data` (downtime 59s). **bookva-mongo-data (517M)** = cp -a `/opt/books/job-scheduler/mongo/db` (downtime 5s). 4 config volumes populated из corrected overlay templates (api, scheduler, task-runner, web-branding). 2 empty by design (ntfy-data, es-data — Phase 2 snapshot/restore). MinIO deferred (no maintenance impact — `mc cp books bookva` at cutover, не rename).
- ✅ Step 4: bookva-db login-gate `UPDATE users SET password=UUID() WHERE id_user NOT IN (1,2)` — 3 users scrambled (id=3,4,5), id=1 (Bookva founder) + id=2 (Slovo founder) untouched. books-db verified unaffected.
- ✅ Step 5: DNS `bookseller.kzntsv.site` → 89.253.255.133 (был pre-existing, closed by inspection).
- ✅ Step 7: Portainer books-web stack 24 PUT atomic (compose+env). Env: `NUXT_PUBLIC_BOOKS_API_URL=/api`, `NUXT_AUTH_TOKEN`, `NUXT_JWT_SECRET_KEY`. Embed-api на bookva.kzntsv.site/api/* живёт (smoke green, auth identical to books-api). books `75ea320` (compose template synced). Soak 24-48ч до books-api shutdown micro-task.
- 🔵 Step 6: delayed по spec (за 1-2 нед до cutover — `NUXT_PUBLIC_BOOKVA_REDIRECT_URL=https://bookseller.kzntsv.site` env на books-web для PWA redirect banner user.id=1).
**Acceptance:** все 7 шагов выполнены (см. task-файл), но `compose up bookva-*` ещё не запущен — это отдельная задача. **Deferred (отдельной micro-task):**
- `bookva-ozon-mcp` stack — image `registry.kzntsv.site/books-ozon-mcp:master` не существует в registry. Нужен build в victor/books CI (ozon-mcp service в build.yml?). Скорее всего service ещё не настроен — отдельная task'а.
- Mongo agenda cleanup partial — 7 jobs с idSeller=2 удалены, осталось 2817 jobs (большинство — system-wide без idSeller). При cutover проверить если нужен дальнейший cleanup.
**Status:** paused (mid-task, MW slot needed) **Branch:** master | **Closure pushes:** books `2f7b539`+`75ea320` (master); bookva-overlay `5b173de``8bffd68` (main): templates align + mariadb:10.6 + mongo:4.2 + api internal-only + depends_on removed. Pass: `gitea/victor-books-ci-bookva-overlay`.
**Where I stopped:** Steps 1+5+7+3-partial closed. Maintenance-window items deferred — координация slot'а с user'ом нужна для stateful-split-volume-copy + Step 2 + Step 4.
**Next action:** Coordinate 1-2h MW → execute `stateful-split-volume-copy` playbook (MariaDB+Mongo `cp -a`) → Step 2 Portainer stacks create → Step 1 finish (stack IDs → Gitea secrets) → Step 4 login-gate SQL. Step 6 — за 1-2 нед до cutover отдельный заход.
**Blocker:** `stateful-split-volume-copy` not started (MariaDB+Mongo volumes отсутствуют → Step 2 deploy fail). Maintenance window needs user signoff.
**Branch:** master
<!-- created-by: vitya / 2026-05-26 / Phase 2 cutover prep после tenant-split code-side done --> <!-- created-by: vitya / 2026-05-26 / Phase 2 cutover prep после tenant-split code-side done -->
<!-- progress-2026-05-26: Steps 1+3-partial+5+7 closed; bookva-overlay templates fixed; victor/books deploy.yml + web.compose.yml + Portainer stack 24 updated --> <!-- progress-2026-05-26: 6/7 closed одну сессию: Steps 1+2+3+4+5+7. Step 6 delayed by design. bookva-ozon-mcp deferred (image build needed). MinIO bucket copy deferred (cutover-time) -->
--- ---

View File

@@ -130,11 +130,35 @@ NUXT_PUBLIC_BOOKS_API_KEY= # удалить (legacy)
## Status ## Status
paused (4/7 steps done — остальное ждёт maintenance window) closed 2026-05-26 — 6/7 done in одну сессию. Step 6 delayed by design (1-2 нед до cutover).
## Closure note
Scope полностью выполнен per acceptance кроме Step 6 (delayed by design) и одной дискретной деференции (bookva-ozon-mcp stack — image отсутствует в registry, требует build в victor/books). Все остальные шаги closed:
- **Step 1** ✅ 7 Gitea secrets созданы (BOOKVA_OVERLAY_TOKEN scope=read:repository, HEALTHCHECK_BOOKVA_{API,WEB}_URL, PORTAINER_STACK_ID_BOOKVA_{API,WEB,SCHEDULER,OPS_MCP}).
- **Step 2** ✅ 9/10 Portainer stacks (ozon-mcp deferred). User-facing stopped pre-cutover (Status=2), infra (db/mongo/es) активны.
- **Step 3** ✅ 6 volumes + 4 populated из corrected overlay templates. bookva-db-data (4.7G), bookva-mongo-data (517M) cp -a с downtimes 59s + 5s. MinIO bucket copy deferred (cutover-time через `mc cp books bookva`).
- **Step 4** ✅ bookva-db login-gate `UPDATE users SET password=UUID() WHERE id_user NOT IN (1,2)` — 3 users (id≥3) scrambled, books-db verified untouched.
- **Step 5** ✅ DNS bookseller.kzntsv.site pre-existed (closed by inspection).
- **Step 6** 🔵 delayed — выставить `NUXT_PUBLIC_BOOKVA_REDIRECT_URL` за 1-2 нед до cutover.
- **Step 7** ✅ books-web embed-api live (Portainer stack 24 PUT + books `75ea320` push). bookva.kzntsv.site/api/* via embed. books-api stack fallback 24-48ч soak до stop micro-task'и.
Discovered + fixed cross-repo (bookva-overlay 4 commits, books 2 commits):
- bookva-overlay `5b173de` — config-templates align prod shape + design v3 hostname
- bookva-overlay `264373d` — .env.example design v3 hostnames
- bookva-overlay `23eb374` — db.compose.yml mariadb:10.11 → 10.6 (match books-db для cp -a)
- bookva-overlay `93c2ea2` — mongo.compose.yml mongo:7 → 4.2 (WiredTiger format compat)
- bookva-overlay `2b20a3e` — api.compose.yml remove traefik (internal-only per v3)
- bookva-overlay `8bffd68` — depends_on dropped (per-stack model)
- books `2f7b539` — secrets.GITEA_TOKEN → BOOKVA_OVERLAY_TOKEN (Gitea reserved prefix)
- books `75ea320` — deploy/web.compose.yml embed-api refs (NUXT_AUTH_TOKEN + NUXT_JWT_SECRET_KEY)
Workflow E2E verified: dispatch tenant=bookva, all 4 svc deploy gracefully — BOOKVA_OVERLAY_TOKEN clone bookva-overlay OK, скип per-svc если stack_id отсутствовал (до записи).
## Where I stopped ## Where I stopped
2026-05-26 — Steps 1, 5, 7 done; Step 3 partial (6 empty volumes + 4 populated из corrected templates). Steps 2, 3-rest (Mongo/MariaDB/MinIO), 4 deferred к coordinated maintenance window с user'ом. Step 6 delayed по spec (1-2 нед до cutover). closed — handoff to `bookva-tenant-cutover` task (когда user скажет «давай поднимать Bookva»). Cutover task должна: re-start stopped Portainer stacks (api/web/scheduler/task-runner/ops-mcp/ntfy), `mc cp books bookva` MinIO bucket, ES snapshot+restore from shared kzntsv → bookva-es (Phase 2), smoke с двух сетей, books-api stack stop после 24-48ч soak post-Step-7.
## Decisions log ## Decisions log