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>
3.1 KiB
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).
# 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).