Forward-looking: MW slot needed для stateful-split-volume-copy + Step 2/4, books-api shutdown decision (24-48ч soak ends ~2026-05-27/28), Step 6 timing question. Memory updates: Gitea reserved GITEA_* prefix, token creation requires basic auth, Portainer PUT atomic compose+env, embed-api auth matches books-api 1:1. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
6.8 KiB
6.8 KiB
_last_updated_, session_id
| _last_updated_ | session_id |
|---|---|
| 2026-05-26T17:00:00+03:00 | 2026-05-26-bookva-tenant-cutover-prep-4of7 |
Next session handoff
Recent commits
.admin ce8bf8a6— tasks(bookva-tenant-cutover-prep): 🟡 progress 4/7 — Steps 1+3-partial+5+7 (this commit; close-of-session update).admin 4f1a4cf4— tasks(bookva-tenant-cutover-prep): create — 7-step VDS prep (start of session, was already there from prior morning user-driven create)victor/books 75ea320— feat(deploy): web.compose.yml embed-api env switch (pushed; Portainer stack 24 PUT'нут atomic, container live, smoke green)victor/books 2f7b539— fix(ci): rename secrets.GITEA_TOKEN → BOOKVA_OVERLAY_TOKEN (Gitea reserved prefix)victor/bookva-overlay 5b173de— config-templates align to prod shape + design v3 hostname (api/scheduler templates rewritten, task-runner template NEW, README hostname table → bookseller.kzntsv.site)
Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
bookva-tenant-cutover-prep 🟡 |
4/7 done — Maintenance-window items pending | .tasks/bookva-tenant-cutover-prep.md § Remaining |
stateful-split-volume-copy ⚪ |
not started; lean playbook готов; блокирует Step 2 + Step 4 в bookva-tenant-cutover-prep | .tasks/stateful-split-volume-copy.md |
infra-inventory ⚪ |
ready, books VDS factsheet ещё свежее (бы. 12 Portainer stacks now после migration) | .tasks/infra-inventory.md |
books-bookva-user-whitelist-gathering ⚪ |
ready, long-lead gathering (email-based) | .tasks/books-bookva-user-whitelist-gathering.md |
books-vds-bookva-bootstrap 🔵 |
blocked on tenant-split Phase 4 | .tasks/books-vds-bookva-bootstrap.md |
books-dns-cutover-bookva 🔵 |
blocked on books-vds-bookva-bootstrap | .tasks/books-dns-cutover-bookva.md |
books-stateful-split-execution 🔵 |
blocked on dev-prep + per-tenant-backup-and-observability в victor/books | .tasks/STATUS.md |
Спроси user'а
- Maintenance window slot для
stateful-split-volume-copy+ Step 2/4 в bookva-tenant-cutover-prep. 1-2h на books VDS —docker stop books-db+cp -a(MariaDB+Mongo) + Portainer stacks create + login-gate SQL. Когда удобно? - books-api shutdown micro-task — 24-48ч soak с embed-api на books-web уже идёт. Когда соответствующий 24-48ч окно истечёт (≈2026-05-27 вечер–2026-05-28), создавать
books-api-shutdownmicro-task или простоdocker stop books-api && rmчерез Portainer ad-hoc? - Step 6 PWA redirect timing. Per spec — 1-2 нед до cutover. После maintenance window mwхочешь сразу выставить, чтобы users id=1 готовиться к redirect, или дождаться актуальной cutover date?
- iis-migration descoped items (carried over from prev session) — нет tracker tasks для 14 plan-to-migrate hostnames, source IIS decommission, LE renewal 2026-07-22, cleanup, wiki concept updates. Создать ⚪ или оставить в Closure note? (Prev session user отверг 3-way split.)
Не делать (preemptive guards)
- Не trigger
compose up bookva-*stacks — это scope of separatebookva-tenant-cutovertask, не текущей prep. Stack acceptance — только "созданы + ID записан", не "запущены". - Не stop books-api пока 24-48ч soak с embed-api не closed. Стек продолжает работать как fallback (любой external caller на
https://books.kzntsv.siteвсё ещё идёт через books-api напрямую). - Не trigger Bookva deploy через deploy.yml workflow до создания Portainer bookva stacks + записи их IDs в Gitea secrets. Workflow gracefully skip'ает (deploy.yml line 187), но shorter rollout path = avoid лишний run.
- Не touch templates через volume edit прямо —
bookva-overlay/config-templates/теперь авторитетный source. Любой edit конфига = commit + push + re-populate volume. - Не редактировать bind-mount config файлы на VDS (
/opt/books/<svc>/config/default.json) напрямую безcp <file>.bak-<date>— bind-mounted, change live для приложения. - Не trust
https://elasticsearch.kzntsv.site/без basicAuth — endpoint behind traefik middleware. Pwd живёт в/opt/books/api/config/default.json(не в pass).
Memory updates за сессию
- Учить — Gitea secrets reserved prefix. Repo secrets с именем начинающимся на
GITEA_*(илиGITHUB_*) returns 400 "invalid variable or secret name". Workaround: переименовать secret + соответствующийsecrets.Xreference в workflow. Env var name внутри shell-script может оставаться любым (мы оставилиGITEA_TOKENв shell, а secret назвалиBOOKVA_OVERLAY_TOKEN). - Учить — Gitea token creation требует basic auth.
POST /api/v1/users/{name}/tokensreturns "auth required" даже с admin token — endpoint специально требует username+password basic auth. Workaround: user генерит PAT через UI (Settings → Applications → Tokens). Admin token недостаточен. - Учить — Portainer PUT /api/stacks/ atomic. Может одним вызовом обновить stackFileContent + Env, container recreates на diff. Pattern: GET текущий стек → modify → PUT с
{stackFileContent, env, pullImage:true, prune:false}. Использовали для Step 7 embed-api switch. - Учить — embed-api auth gate в books-web matches books-api exactly.
/api/healthz=200 (public), любой protected endpoint без token = 401 "No token provided", с invalid token = 401 "Invalid JWT token". Identical behavior — embed = port-of-books-api, не parallel impl. - Pass entry added:
gitea/victor-books-ci-bookva-overlay— PAT scope=read:repository для clone bookva-overlay в CI. Value захардкожен в Gitea secretBOOKVA_OVERLAY_TOKENв victor/books, pass = backup. - Reference: bookva-tenant-cutover-prep § Decisions log — full session trace для 4 closed steps.
- Reference: ../.wiki/concepts/portainer-stack-management-books-vds — books VDS Portainer endpoint 1 = primary, 12 stacks managed (legacy SSH-compose for elasticsearch/mongo/minio/books-db/traefik/portainer ушли —
books-vds-stacks-to-portainertask closed 2026-05-25). При проверкахbooks-job-scheduler-mongoconfig/-mongodbvolumes остаются именами от legacy migration; новые bookva-* следуют new convention.