Files
admin/.tasks/stateful-split-volume-copy.md
vitya 1eefb4d45a tasks: add stateful-split-volume-copy (moved from victor/books)
Ops-таска Фазы 1 tenant-split дизайна. Scope сужен на input юзера
«просто поднимем 2 БД»: только MariaDB volume copy + up 2 containers
через Portainer. Mongo/MinIO/DELETE/app-стеки — отдельными ops-тасками потом.

Design canon — victor/books .wiki/concepts/tenant-split.md (не дублируем здесь).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 07:53:27 +03:00

59 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# stateful-split-volume-copy
Поднять 2 MariaDB-контейнера (`bookva-db` + `slovo-db`) на VDS как копии текущего `books-db` через `cp -a` docker volume. Всё.
## Контекст dev-source
Дизайн: victor/books `.wiki/concepts/tenant-split.md` § «Фаза 1 — Physical stateful split».
Brainstorm trace: `~/projects/.workshop/.archive/2026-05-24-books-tenant-split.md`.
Direction: Slovo остаётся на текущем VDS, Bookva переезжает потом (см. `books-vds-bookva-bootstrap`).
## Goal
`bookva-db` и `slovo-db` бегут на VDS на своих volume'ах (`bookva-db-data` / `slovo-db-data`) — bit-for-bit копии текущего `books-db_data`. Оба контейнера видят полный shared-датасет (cleanup чужих rows — отдельной задачей).
## Plan (на VDS под Portainer)
Через Portainer — потому что VDS-rule: «stacks управляются через Portainer» (см. `.wiki/concepts/portainer-stack-management-vds.md`). Compose-файлы лежат в `~/projects/bookva-overlay/` + `~/projects/slovo-overlay/` (закрыта `overlay-repos-bootstrap-bookva-slovo` в victor/books, commit d0eb210).
```bash
# Pre-flight: backup
SRC=$(docker volume ls -q | grep books-db)
mkdir -p /backups
docker run --rm -v $SRC:/data:ro -v /backups:/backup alpine \
tar czf /backup/books-db-pre-split-$(date +%Y%m%d).tar.gz -C /data .
# Stop books-db (maintenance window 5-10 мин)
docker stop books-db # api/web/scheduler/task-runner запаникуют — это OK на короткое окно
# Copy
docker volume create bookva-db-data
docker volume create slovo-db-data
docker run --rm -v $SRC:/from:ro -v bookva-db-data:/to alpine sh -c "cp -a /from/. /to/"
docker run --rm -v $SRC:/from:ro -v slovo-db-data:/to alpine sh -c "cp -a /from/. /to/"
# Bring up new DBs (через Portainer — stack из bookva-overlay/slovo-overlay)
# либо ad-hoc compose-up если stack ещё не создан в Portainer
docker start books-db # вернуть текущий стек
```
## Acceptance
- `docker ps` показывает `bookva-db` + `slovo-db` живыми.
- `docker exec bookva-db mariadb -uroot -p... -e 'SELECT 1'``1`.
- `docker exec slovo-db mariadb -uroot -p... -e 'SELECT 1'``1`.
- Текущий `books-db` стек снова в строю (api/web/scheduler/task-runner подняты).
## Out of scope (отдельные ops-таски потом)
- Mongo volume copy (`bookva-mongo` + `slovo-mongo`).
- MinIO bucket rename (`books``bookva` + `slovo`).
- DELETE чужих rows из каждой БД (`WHERE id_seller=<other>`).
- deleteMany чужих agenda-jobs в Mongo.
- Up `bookva-api` / `bookva-web` / `bookva-scheduler` / `bookva-task-runner` (и зеркально для slovo) — application stacks.
- Cleanup старых `books-*` контейнеров после parallel-run.
## Blocker
— (overlay-репо готовы; compose-файлы в `bookva-overlay/deploy/db.compose.yml` / `slovo-overlay/deploy/db.compose.yml`).