- scripts/books-vds-backup-daily-kreknin/ — run.sh + .env.example + README - ES path.repo bootstrap (one-time stack edit, snapshot repo 'kreknin' registered) - curl smtps://yandex:465 email (CRLF + Date headers, no msmtp dep on CentOS 7) - StrictHostKeyChecking=yes + pre-populated known_hosts (CentOS 7 no accept-new) - cron /etc/cron.d/books-vds-backup live, initial sync 4.87 GB in 13m28s, ntfy push sent - wiki: entities/books-vds.md + sources/books-vds-backup-daily-kreknin-2026-05-25.md created - wiki: concepts/books-ssh-access → vds-kzntsv-ssh-access (was lying about books on vds-kzntsv) - .tasks/books-vds-backup-daily-kreknin.md closed 🟢 pending phone-side verify Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
51 lines
5.1 KiB
Markdown
51 lines
5.1 KiB
Markdown
---
|
||
_last_updated_: 2026-05-25T09:35:00+03:00
|
||
session_id: 2026-05-25-books-vds-backup-standup
|
||
---
|
||
|
||
# Next session handoff
|
||
|
||
## Recent commits
|
||
|
||
- `tasks(books-vds-backup-daily-kreknin): close 🟢 — daily 06:00 MSK pipeline live, 4.87GB initial sync` (этот раунд, planned)
|
||
- `wiki(books-vds): create entity + source standup + rename misnamed concept books-ssh-access → vds-kzntsv-ssh-access` (этот раунд, planned)
|
||
- `scripts(books-vds-backup-daily-kreknin): run.sh + .env.example + README` (этот раунд, planned)
|
||
- `tasks: add stateful-split-volume-copy (moved from victor/books)` (`1eefb4d4`)
|
||
- `tasks(unify-backup-notifications): close 🟢` (`838f51da`)
|
||
|
||
## Open треки
|
||
|
||
| Трек | Готовность | Entry-point |
|
||
|---|---|---|
|
||
| `books-vds-backup-daily-kreknin` 🟢 | closed — **phone-side ntfy + email verify pending user** | `.tasks/books-vds-backup-daily-kreknin.md` |
|
||
| `stateful-split-volume-copy` ⚪ | not started; **playbook references `books-db` на books VDS (89.253.255.133), не на vds-kzntsv** | `.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` |
|
||
|
||
## Спроси user'а
|
||
|
||
- **ntfy push** `BOOKS-VDS backup OK 2026-05-25` (tag green_circle, channel `vds-backup`) — пришёл на phone? Если нет — diagnose curl ntfy creds или phone subscription к каналу.
|
||
- **Email**: пришёл ли `[BOOKS-VDS] backup OK 2026-05-25` + standalone `[BOOKS-VDS] SMTP fix verify` (тестовый, отправлен после fix'а)? Inbox `<OPS_NOTIFY_EMAIL>` от noreply@snolla.com.
|
||
- **Migrate SSH-compose стеки под Portainer** (user-promised after backup live): ES, mongo, minio, books-db, traefik, proxy-chain currently SSH-compose at `/usr/docker/<svc>/`. Делаем? Если да — это отдельная таска (`books-vds-stacks-to-portainer`).
|
||
- **`stateful-split-volume-copy`** — playbook писан под прошлое assumption «books на vds-kzntsv». Real books VDS = 89.253.255.133, его `books-db` (не `mariadb`) — playbook fits OK, но container names в task-файле должны быть verify'нуты. Continue эту таску в next session?
|
||
|
||
## Не делать (preemptive guards)
|
||
|
||
- **Не push без grant'а** (project-discipline Rule 4). Session начинает ask-mode.
|
||
- **Не trust wiki blindly** — `books-ssh-access.md` (теперь `vds-kzntsv-ssh-access.md`) до 2026-05-25 врала что books на vds-kzntsv. Faktcheck через `vds-ops` + SSH probe + IP до построения предположений. Это уже applied в этом раунде; не забыть в будущих сессиях.
|
||
- **Не trigger полный backup для smoke** на books VDS — 13m+ wall-clock, 4.87 GB initial. Smoke = только notify-channel тест через standalone curl call.
|
||
- **Не touch ES прод стек без user-approve** — ES сейчас не используется (per user), но статус может measure. Если включат — recreate downtime неacceptable без window.
|
||
- **Не editit `/usr/docker/<svc>/docker-compose.yml` напрямую** для production stacks — preferred path: migrate под Portainer, потом edit там. Текущий backup-script патчил ES — это был bootstrap, не daily ops.
|
||
|
||
## Memory updates за сессию
|
||
|
||
- **Учить:** `books VDS ≠ vds-kzntsv`. Wiki была ошибочно misnamed. Real books VDS = 89.253.255.133 (host4g.ru, CentOS 7). Documented в [[../wiki/entities/books-vds]].
|
||
- **Учить:** `pass entries one-file-per-host pattern` — consolidate сервис-specific creds в `<host>/full-env` с section'ами (matches `vds-kzntsv/full-env` style). Не плодить `<host>-<service>/full-env`.
|
||
- **Учить:** Yandex SMTP — port 465 = `smtps://` (implicit TLS), port 587 = `smtp://` + `--ssl-reqd` (STARTTLS). Не путать; mismatch = 30-sec curl timeout.
|
||
- **Учить:** CentOS 7 OpenSSH 7.4 не имеет `accept-new` (added 7.6). Bootstrap step: `ssh-keyscan` host-key в `known_hosts`, потом `StrictHostKeyChecking=yes`.
|
||
- **Учить:** docker-compose 1.29 + Docker 26 = `KeyError: 'ContainerConfig'` при recreate. Workaround: `docker rm -f <renamed-stuck>` + `docker-compose up -d`. Bigger fix: upgrade docker-compose to v2 plugin.
|
||
- **Reference:** Portainer на books VDS = `https://portainer.kzntsv.site` (НЕ `portainer.vds.kzntsv.site` — тот для infra). PAT saved в `pass show books-vds/full-env BOOKS_PORTAINER_API_KEY`.
|