Multi-fix session: bookva tenant works correctly после 6 fix'ов одной природы (incomplete cutover-prep без e2e smoke). См. NEXT_SESSION.md § "What's LIVE" + § "Memory updates" + shared wiki concept tenant-overlay-config-volume-mount-path-pitfall. Changes: - host-stacks/books-vds/ops-mcp.compose.yml: add BOOKVA_MARIADB_PASSWORD env declaration + multi-tenant docs note. Stack 26 ещё не пере-PUT'нут на это, открытая микро-таска ops-mcp-multi-tenant-stack-activate в NEXT_SESSION. - STATUS.md: 6-bug summary в latest update line. - NEXT_SESSION.md: full rewrite с 14 recent commits, open треками, asks к user'у, memory updates про agenda.db.collection / composite jobId / scheduler envs / bookva auth tokens. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
9.7 KiB
9.7 KiB
_last_updated_, session_id
| _last_updated_ | session_id |
|---|---|
| 2026-05-27T01:30:00+03:00 | 2026-05-26-bookva-tenant-deep-debug |
Next session handoff
Recent commits
victor/books 1da3093— fix(jobs.post): bypass agenda.db.collection → MongoClient (idempotency check fix for embed-api)victor/books e083b71— fix(files): composite agenda jobId — strip :timestamp before ObjectId.isValid (display fix)victor/books 60382bf— fix(deploy): books-web-config mount (slovo embed-api Mongo endpoint was stale external)victor/books fc33ea5— fix(deploy): scheduler — job-scheduler↔scheduler naming bridge tenant-awarevictor/books f5f295b— feat(ops-mcp): multi-tenant pools — MariaDB/Mongo per tenant (0.0.1 → 0.1.0)victor/books ae3ab14— feat(deploy): ops-mcp host-promote — drop tenant pipelinevictor/bookva-overlay 8c104f7— fix(scheduler): add RECONCILER_ENABLED/TASK_RUNNER_URL/DOCKER_HOST envsvictor/bookva-overlay 60e39e5— fix(deploy): bookva-scheduler healthcheck (mirror slovo's 58b13e0)victor/bookva-overlay a9063f0— fix(deploy): bookva mount paths /app → /usr/src/appvictor/bookva-overlay 4635305— fix(deploy): bookva-api/web pass NITRO_/NUXT_ auth env in composevictor/bookva-overlay b6f9144— fix(web): bookva-web-config volume mount — DB/Mongo/S3 leak fixvictor/bookva-overlay 50f5bbb— chore(deploy): drop ops-mcp.compose.yml (host-promoted)victor/bookva-overlay 437d024— fix(deploy): bookva-ops-mcp idle-stub (obsolete после delete).admin × 2— host-stacks/books-vds/ops-mcp.compose.yml multi-tenant env + task closure + handoff~/projects/.wiki fe3ae78— ingest concepts/tenant-overlay-config-volume-mount-path-pitfall (shared)
What's LIVE сейчас
Both tenants полностью изолированы (final audit pass):
bookseller.kzntsv.site→ bookva-web@master-1da3093 → bookva-{db,mongo,es,minio,api,scheduler,task-runner}. Auth2f2e96e2-25f5-4653-930d-fd307a170543.bookva.kzntsv.site→ books-web@master-1da3093 (slovo) → books-{db,job-scheduler-mongo,...}. Auth81e123d0-8edd-...(slovo's original, не менял).- bookva-scheduler reconciler registered all handlers (
load products to warehouseровно processed файл 2674 в2026-05-26 14:20:45). - books-web embed-api (
POST /api/jobs) теперь без 500 — idempotency через MongoClient. - 11 Portainer stacks LIVE на books VDS: books-{api,web,job-scheduler,task-runner,db,ntfy} (slovo) + bookva-{api,web,scheduler,task-runner,db,mongo,es,minio,ntfy} + books-ops-mcp host-level + books-docker-proxy{,-ro} + traefik/portainer/registry/mongo/minio/imgproxy и т.д.
Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
ops-mcp-multi-tenant-stack-activate ⚪ NEW micro-task — image books-ops-mcp:master уже rebuilt (master-1da3093) с multi-tenant code + VDS host config /opt/books/books-ops-mcp/config/default.json уже на новой schema. TODO: PUT Portainer stack 26 с pullImage:true + добавить BOOKVA_MARIADB_PASSWORD env (same value as MARIADB_PASSWORD — bookva-db = cp -a of books-db, ops_ro password identical). Compose .admin/host-stacks/books-vds/ops-mcp.compose.yml уже declared в этом session'е. |
TBD .tasks/ops-mcp-multi-tenant-stack-activate.md (или inline в session) |
|
books-api-shutdown (ранее заведённая micro-task) |
24-48h soak with bookva LIVE — нужно проверить если still applicable (books-api всё ещё нужен для slovo на bookva.kzntsv.site fallback пути?). | TBD |
bookva-ozon-mcp-image-build |
image отсутствует в registry, bookva-ozon-mcp stack не создан. Если service не используется — skip навсегда. | TBD |
bookva-mongo-cleanup ⚪ (user-deferred) |
2817 agendaJobs в bookva-mongo from cp-a — user сказал «8 не трогай не стирай». Когда будет готов rotate — отдельная таска. | TBD |
bookva-ozon-credentials-audit ⚪ (user-deferred) |
bookva ozonSeller.clientId=50542+94191 = slovo's. Финансовый риск. User сказал «сам подумаю об утечках». | TBD |
stateful-split-volume-copy ⚪ |
bookva-side done; slovo-side scope deferred. | .tasks/stateful-split-volume-copy.md |
infra-inventory ⚪ |
books VDS теперь 14+ stacks — момент удачный для ingest factsheet. | .tasks/infra-inventory.md |
books-bookva-user-whitelist-gathering ⚪ |
login-gate уже applied — таска только для verification списка 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'а
ops-mcp-multi-tenant-stack-activate— finish сейчас (PUT stack 26 + add env) или взять отдельной таской?- Manual heads-up учредителю Bookva — Bookva теперь на
https://bookseller.kzntsv.site, login те же. Когда отправляешь? books-api-shutdown— поверка: books-api всё ещё нужен для legacy paths fallback на bookva.kzntsv.site? Если нет — shutdown candidate.- slovo-overlay parity audit — slovo's compose файлы (book/deploy/) могут страдать от тех же багов что были у bookva (mount path, RECONCILER_ENABLED). Сейчас работает только потому что slovo's mount был через
/opt/...bind (не named volume), который случайно совпал с правильным WORKDIR. Audit перед follow-up cutover? - bookva-minio creds rotation — сейчас AKIA same as books-minio. Rotate в отдельную task'у когда стабилизируется?
Не делать (preemptive guards)
- Не trust деплой "успех" без end-to-end smoke — этот session показал 6 багов одной природы которые passed CI но broke runtime. После любого tenant infra изменения: login + write + verify tenant DB + processing-job + UI status.
- Не stop bookva-{db,mongo,es,minio,api,web,scheduler,task-runner,ntfy} — LIVE на bookseller.kzntsv.site, любой stop = production outage.
- Не editing config volumes через alpine напрямую — source of truth =
bookva-overlay/config-templates/(для api/scheduler/task-runner) + host-mounted (для web). Edit → commit → push → re-populate. - Не stop books-api до явного soak end + user sign-off.
- Не push без grant в next session — auto-push grant был session-only. Этот session был grant'нут.
ops_ropassword в обоих tenant'ах identical (cp -a). Если будут rotate'ить — оба MariaDB одновременно.- bookva-mongo.agendaJobs 2817 docs from slovo cp-a НЕ ТРОГАТЬ — user explicit "8 не трогай не стирай".
Memory updates / wiki ingests
Ingested в shared wiki ~/projects/.wiki/concepts/:
tenant-overlay-config-volume-mount-path-pitfall— 6-bug post-mortem из этого session'а. Includes audit checklist + Lesson о mandatory end-to-end smoke.
Local memory updates (books-specific, не ingested):
agenda.db.collectionpopulated только послеawait agenda.start(). В web/api контейнерах start не вызывается (worker logic в scheduler) → idempotency findOne fails. Используй отдельный MongoClient.composite agenda jobId(<bare>:<dispatch_ts>) пишется черезjob-scheduler/lib/handlers/http.js. ObjectId.isValid возвращает false на 38-char composite — fix: split на:перед.isValid.- bookva-scheduler нужны 3 envs для full operation:
RECONCILER_ENABLED=true,TASK_RUNNER_URL=http://bookva-task-runner:3000,DOCKER_HOST=tcp://books-docker-proxy:2375. - bookva auth: NITRO_AUTH_TOKEN/NUXT_AUTH_TOKEN/NITRO_JWT_SECRET_KEY/NUXT_JWT_SECRET_KEY =
2f2e96e2-25f5-4653-930d-fd307a170543/5e5ef0460549f36d9ab276882b490b2b77a266e41dc8a6478415869768c1ee36. Stored in Portainer stack 45 (api) + 46 (web) Env. Slovo's auth не трогали (81e123d0/505172e5). _loadFilescron в config.jobs больше нигде не handle'ится (deprecated после tasksConfig.json migration). File uploads requires manual trigger "Запустить обработку" UI button → POST /api/jobs.- mongo-shell command на bookva-mongo container — image
mongo:4.2, usedocker exec bookva-mongo mongo --quiet --eval '...'(legacy mongo client, NOT mongosh). - books-db root password в pass
books-vds/full-envкакBOOKS_DB_ROOT_PASSWORD. Same для bookva-db (cp-a).
Pass / Reference
- pass
books-vds/full-env— VDS root SSH key path (~/.ssh/id_ed25519_books_ops), Portainer URL+API key, books-db root password. - pass
gitea/victor-books-ci-bookva-overlay— PAT (read:repository) backup для BOOKVA_OVERLAY_TOKEN secret. - Backups на books VDS —
/backups/books-{db,mongo}-pre-split-20260526-*.tar.gz(auto-cleanup post 7 дней). - Shared wiki concept ingested this session: tenant-overlay-config-volume-mount-path-pitfall.
- Reference task: books-ops-mcp-host-promote (closed) — все 5 design Qs locked + 10-step playbook executed.