--- _last_updated_: 2026-05-27T00:30:00+03:00 session_id: 2026-05-26-ops-mcp-host-promote-CLOSED --- # Next session handoff ## Recent commits - `victor/books ae3ab14` — feat(deploy): ops-mcp host-promote — drop tenant pipeline (deploy.yml + delete ops-mcp.compose.yml) - `victor/bookva-overlay 50f5bbb` — chore(deploy): drop ops-mcp.compose.yml (host-promoted в .admin) - `victor/bookva-overlay 437d024` — fix(deploy): bookva-ops-mcp idle-stub command (interim, теперь obsolete) - `.admin × 2` — tasks `books-ops-mcp-host-promote` 🟢 closed + handoff refresh + new `host-stacks/books-vds/ops-mcp.compose.yml` - `.wiki b2528fb` — wiki(concepts): ingest 3 generic ops-gotchas from bookva tenant-split (manual write, MCP commitFile bug) - `victor/books c434230` — deploy.yml: auto-deploy default tenant=slovo → all (symmetric rollout active) - `victor/bookva-overlay 2862279` — traefik labels: entrypoints=https + certresolver=letsEncrypt (books-VDS instance naming) - `victor/bookva-overlay 5474b10` — elasticsearch.compose.yml: add reindex.remote.whitelist=elasticsearch:9200 - `victor/bookva-overlay b324e12` — add bookva-minio + external port-bind для bookva-db - `victor/bookva-overlay 8bffd68` — *.compose.yml: drop depends_on (per-stack model) - `victor/bookva-overlay 2b20a3e` — api.compose.yml: remove traefik (internal-only per design v3) - `victor/bookva-overlay 93c2ea2` — mongo.compose.yml: pin mongo:4.2 (WT format compat) - `victor/bookva-overlay 23eb374` — db.compose.yml: pin mariadb:10.6 (cp -a parity) - `victor/bookva-overlay 264373d` — .env.example: design v3 hostnames - `victor/bookva-overlay 5b173de` — config-templates align to prod shape + design v3 hostname - `victor/books 75ea320` — feat(deploy): web.compose.yml embed-api env switch - `victor/books 2f7b539` — fix(ci): rename secrets.GITEA_TOKEN → BOOKVA_OVERLAY_TOKEN - `.admin × 5` — task progress, closure, NEXT_SESSION refreshes ## What's LIVE сейчас - **bookseller.kzntsv.site** → bookva-web (embed-api), 200 OK, login-gate active (id=1=pobeda2003, id=2=vitya) - **bookva.kzntsv.site** → books-web (slovo, embed-api тоже), 200 OK, fallback к books-api stack для legacy paths - **books.kzntsv.site** → books-api (legacy stack), ещё running 24-48h soak до shutdown micro-task - **10 bookva Portainer stacks** all ACTIVE (db/mongo/es/minio/api/web/scheduler/task-runner/ops-mcp/ntfy). bookva-ozon-mcp пока не создан (image отсутствует в registry). - **External admin endpoints:** - `mysql -h 89.253.255.133 -P 33306 -uroot -p${BOOKS_DB_ROOT_PASSWORD} books` - S3 client → `http://89.253.255.133:9001`, AKIA same as books (см. pass `books-vds/full-env`) - **Auto-deploy симметричный** — push в victor/books master → build → deploy.yml tenant=all → PUT slovo (22/23/24/26) + bookva (47/45/46/43) ## Open треки | Трек | Готовность | Entry-point | |---|---|---| | `books-ops-mcp-host-promote` 🟢 **closed** — see Recent commits below | n/a | | `books-api-shutdown` (NEW micro-task) | 24-48h soak ends ~2026-05-27/28. `docker stop books-api` через Portainer | TBD `.tasks/books-api-shutdown.md` | | `bookva-ozon-mcp-image-build` (NEW micro-task) | image `books-ozon-mcp:master` не в registry — нужен build pipeline в victor/books | TBD `.tasks/bookva-ozon-mcp-image-build.md` | | `bookva-tenant-cutover` task **не понадобилась** — cutover de-facto произошёл в этой сессии (Step 6 descoped по решению user'а) | n/a — manual heads-up учредителю Bookva | | `bookva-minio-https-dns` (optional) | reg.ru A `bookva-minio.kzntsv.site` → 89.253.255.133 + `push.bookseller.kzntsv.site` → 89.253.255.133 для traefik HTTPS вместо port-bind | reg.ru DNS UI | | `mariadb-mongo-upgrade-chain` (eventual post-cutover) | bookva-db 10.6 → 10.11, bookva-mongo 4.2 → 4.4 → 5 → 6 → 7 chain. Когда usage стабилизируется | TBD | | `stateful-split-volume-copy` ⚪ | bookva-side done; slovo-side scope deferred (отдельный slovo-cutover) | `.tasks/stateful-split-volume-copy.md` | | `infra-inventory` ⚪ | books VDS теперь 14 stacks (+ bookva-minio + 9 bookva) — момент удачный для ingest factsheet | `.tasks/infra-inventory.md` | | `books-bookva-user-whitelist-gathering` ⚪ | login-gate уже applied (id=1+2 only) — таска осталась только для verification списка от учредителя Bookva post-cutover | `.tasks/books-bookva-user-whitelist-gathering.md` | | `books-vds-bookva-bootstrap` 🔵 | blocked on Phase 4 (Rusonyx или другой VDS для Bookva billing). Long-term — bookva сейчас на shared books VDS | `.tasks/books-vds-bookva-bootstrap.md` | | `books-dns-cutover-bookva` 🔵 | blocked on books-vds-bookva-bootstrap | `.tasks/books-dns-cutover-bookva.md` | ## Спроси user'а - **Multi-tenant DB observability через ops-mcp** (deferred design call) — нужно ли видеть bookva-db / bookva-mongo через MCP? Если да — extend lib (per-tenant pool array) ИЛИ drop DB tools оставив только docker. - **Manual heads-up учредителю Bookva** (Step 6 substitute) — отправить ей сообщение «Bookva теперь на `https://bookseller.kzntsv.site`, login те же». Когда? - **`books-api-shutdown`** через 24-48ч — ad-hoc через Portainer или tracker task? - **`bookva-ozon-mcp-image-build`** — нужен build в victor/books CI? Сейчас image отсутствует, bookva-ozon-mcp stack не создан. Если service не используется — skip навсегда? - **bookva-minio creds rotation** — сейчас AKIA same as books-minio. Rotate в отдельную task'у когда стабилизируется? - **slovo-overlay parity audit** — `.env.example` и templates вероятно stale similarly to bookva pre-fix. Audit перед slovo-cutover task? ## Не делать (preemptive guards) - **Не stop bookva-{db,mongo,es,minio,api,web,scheduler,task-runner,ops-mcp,ntfy}** — все LIVE на bookseller.kzntsv.site, любой stop = production outage Bookva tenant'а. - **Не editing config volumes через alpine** — source of truth = `bookva-overlay/config-templates/`. Edit → commit → push → re-populate. - **Не stop books-api** до явного soak end (~2026-05-27/28) + user sign-off. Внешние callers всё ещё на `https://books.kzntsv.site/*`. - **Не push без grant в next session** — auto-push grant был session-only per Rule 4. В этой сессии user grant'нул на «делай авто-push» — следующая session требует нового grant. - **Не trust DNS wildcard kzntsv.site** — wildcard → 94.19.247.14 (Windows IIS), НЕ books VDS 89.253.255.133. Новые subdomains требуют explicit A-records в reg.ru. - **Не restore /backups/books-{db,mongo}-pre-split-20260526-*.tar.gz** unless rollback. Manual cleanup после 7+ дней. ## Memory updates / wiki ingests Ingested в shared wiki `~/projects/.wiki/concepts/`: - `gitea-reserved-secret-prefix` — GITEA_* / GITHUB_* prefix reserved (PUT → 400) - `mongo-wt-format-major-version-incompat` — Mongo 4→7 crash exit 62, chain upgrade FCV - `portainer-per-stack-depends-on-pitfall` — cross-stack depends_on "undefined service" Local memory updates за сессию (не ingested, books-specific): - DNS wildcard kzntsv.site → 94.19.247.14 (Windows IIS, не books-vds) - bookva passwords plaintext в DB (varchar(45), TODO bcrypt в login.post.js) - books-vds traefik instance naming: `entrypoints=https` + `certresolver=letsEncrypt` (case-sensitive) - Embed-api auth gate в books-web identical к books-api (401 без token, 401 invalid JWT) - Multi-tenant MinIO design: separate container vs bucket-split. User выбрал separate container (zero-config-change в apps). ## Pass / Reference - pass entry `gitea/victor-books-ci-bookva-overlay` (PAT scope=read:repository) — backup для BOOKVA_OVERLAY_TOKEN secret в victor/books. - pass entry `books-vds/full-env` — BOOKS_PORTAINER_URL+API_KEY, BOOKS_DB_ROOT_PASSWORD, MINIO_ACCESS_KEY. - Backups на books VDS — `/backups/books-{db,mongo}-pre-split-20260526-*.tar.gz`. - **Reference:** [[bookva-tenant-cutover-prep]] § Closure note + Post-closure follow-up — full session trace.