Clone-adapted from .wiki/concepts/portainer-stack-management-vds.md § Migration script. Diffs from VDS-infra version: - PORTAINER_URL = portainer.kzntsv.site - Auth via X-API-Key (PAT works, no JWT fallback needed) - DIR prefix /usr/docker/<stack> (not /opt/stacks/<stack>) - Down step via `docker rm -f` by compose-project label (bypasses docker-compose v1 ContainerConfig bug entirely; no compose binary on path required) - Refuses traefik/portainer migration (management plane) Idempotent: delete-then-create against existing stack by name on endpoint 1. Re-runs are safe. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.7 KiB
4.7 KiB
_last_updated_, session_id
| _last_updated_ | session_id |
|---|---|
| 2026-05-25T11:15:00+03:00 | 2026-05-25-books-vds-stacks-to-portainer |
Next session handoff
Recent commits
tasks(books-vds-stacks-to-portainer): Phase 0 probe complete, +imgproxy scope(bfb942cd) — Phase 0 done, scope expanded 5→6 stacks.tasks(NEXT_SESSION): refresh handoff after this session's commits(3769e836) — prior session handoff.tasks: add ⚪ books-vds-stacks-to-portainer(439da3ce)backup(books-vds): daily 06:00 MSK pipeline to kreknin live 🟢(fe41ee44)
Open треки
| Трек | Готовность | Entry-point |
|---|---|---|
books-vds-stacks-to-portainer 🔴 |
Phase 0 done, Phase 1 next — write adapter script scripts/books-vds-portainer-migrate.sh |
.tasks/books-vds-stacks-to-portainer.md |
stateful-split-volume-copy ⚪ |
not started; playbook fits real books VDS (89.253.255.133) | .tasks/stateful-split-volume-copy.md |
iis-migration-to-ruvds 🟡 |
soak (kupimknigi + emspb DNS flipped 2026-05-24, 22 pending) | .tasks/iis-migration-to-ruvds.md |
infra-inventory ⚪ |
ready, не начат — books VDS должен попасть в admin-detailed runbook | .tasks/infra-inventory.md |
books-bookva-user-whitelist-gathering ⚪ |
ready, long-lead gathering | .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 |
Mid-task capture
left mid-task: books-vds-stacks-to-portainer (Phase 1 entry)
where_stopped: Phase 0 closed — все 6 compose probed (books-db, mongo, minio, elasticsearch, proxy-chain, imgproxy), Portainer PAT verified, endpoint 6 stostayer = not ours.
next concrete: Write scripts/books-vds-portainer-migrate.sh (clone-adapt из .wiki/concepts/portainer-stack-management-vds.md § Migration script). Diffs: PORTAINER_URL=https://portainer.kzntsv.site, endpointId=1, dir prefix /usr/docker/, auth X-API-Key (PAT works, no JWT fallback). Then Phase 2 ladder: proxy-chain → imgproxy → minio → mongo → books-db → elasticsearch.
Спроси user'а
- (нет на этом раунде — auto-push grant active, scope decisions made, момент migrate-by-migrate ладдером).
Не делать (preemptive guards)
- Не migrate traefik / portainer — management plane, recreate ломает access (Skip-list).
- Не trigger ES recreate без user awareness — текущая ES «не используется» per user 2026-05-25, но verify before recreate. ES в ладдере последним на покое.
- Не editit
/usr/docker/<svc>/docker-compose.ymlнапрямую после migration — Portainer-managed working_dir =/data/compose/<id>/. Compose files в/usr/docker/<svc>/становятся reference only. - Не break backup pipeline —
books-vds-backup-daily-krekninrsync paths =/usr/docker/<svc>/data(binds). Bind paths preserved через migration, paths остаются валидны. Verify post-migration rsync прошёл хотя бы 1 раз. - Не push without grant in future sessions — auto-push грант session-only (Rule 4). Next session start = ask-mode again.
Memory updates за сессию
- Учить: Portainer single instance
portainer.kzntsv.siteуправляет 2 endpoint'ами —1= books VDS local docker daemon,6= stostayer (другой клиент, не наш, scope не расширять). User-confirmed 2026-05-25. - Учить: PAT auth через
X-API-Key: ptr_...header работает (без JWT fallback). Pass entrybooks-vds/full-env BOOKS_PORTAINER_API_KEY. - Учить: на books VDS все SSH-compose стеки bind-only (нет named volumes для них) и no env_file (env inline в compose). Migration упрощается: gotcha #1 (env_file strip) не релевантен, gotcha #2 (absolutize) — единственная требуемая transform.
- Учить:
imgproxy(2 контейнера,imgproxy.kzntsv.site, S3→minio) был missing изentities/books-vds.mdSSH-managed table до 2026-05-25. Fix'нут в этом раунде. Lesson: при entity wiki бутстрапе на legacy host'ах — обязательноls /usr/docker/cross-check vs runningdocker ps, не доверять предположениям. - Reference: migration pattern source —
.wiki/concepts/portainer-stack-management-vds.md(VDS-infra 12-stack retro-migration 2026-05-22). Adaptable для books VDS с 3-4 diff'ами.