Files
admin/.tasks/books-vds-backup-daily-kreknin.md
vitya fe41ee4422 backup(books-vds): daily 06:00 MSK pipeline to kreknin live 🟢
- 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>
2026-05-25 09:37:16 +03:00

5.3 KiB
Raw Permalink Blame History

books-vds-backup-daily-kreknin

Ежедневный backup pipeline books VDS (89.253.255.133, host4g.ru, CentOS 7) → kreknin Synology (195.19.90.188:/volume1/NetBackup/books-vds/<date>/) в 06:00 MSK.

Goal

Восстановимость books-стека после полного отказа VDS: DB dumps + MinIO blobs + ES snapshot + app configs + traefik state + system config на NAS с 7-day retention.

Key files

  • scripts/books-vds-backup-daily-kreknin/run.sh — backup logic; deploy → /opt/stacks/backup/run.sh на VDS.
  • scripts/books-vds-backup-daily-kreknin/.env.example — placeholder; live .env built from pass show.
  • scripts/books-vds-backup-daily-kreknin/README.md — install + revert recipe.
  • .wiki/entities/books-vds.md — host entity page.
  • .wiki/sources/books-vds-backup-daily-kreknin-2026-05-25.md — standup chronology (создаётся при closure).

Decisions log

  • 2026-05-25: pattern mirror scripts/vds-backup-rsync-kreknin/run.sh (VDS-infra). Same vds-backup ntfy topic, same SMTP relay (snolla-smtp Yandex), same --link-dest rsync hardlink pattern, same RETENTION_DAYS=7.
  • 2026-05-25: ES snapshot via REST API, not data-dir rsync. One-time stack edit /usr/docker/elasticsearch/docker-compose.yml: added env path.repo=/snapshots + bind ./snapshots:/snapshots. Registered repo kreknin (type=fs, location=/snapshots, compress=true).
  • 2026-05-25: curl --ssl-reqd SMTP instead of msmtp (CentOS 7 EOL repo issue). Yandex 587 STARTTLS works через native curl без msmtprc setup.
  • 2026-05-25: StrictHostKeyChecking=yes (NOT accept-new) — CentOS 7 OpenSSH 7.4 не поддерживает accept-new. kreknin host key pre-populated в /root/.ssh/known_hosts на VDS bootstrap.
  • 2026-05-25: books-job-scheduler-mongoбез auth (нет MONGO_INITDB_ROOT_* env). mongodump --archive без --uri достаточен. shared mongo — root auth (uri credential).
  • 2026-05-25: Cron time 06:00 MSK — после VDS-infra (05:00) + windows-host (05:30), даёт break перед US-EU business start.
  • 2026-05-25: BOOKS-VDS host label в ntfy title — отличать от обычного VDS (infra) на shared vds-backup topic.
  • 2026-05-25: Consolidated books-vds-portainer/full-envbooks-vds/full-env (one-file-per-host pattern, parity с vds-kzntsv).

Open questions

  • (resolved 2026-05-25) path.repo на ES — required one-time stack edit. Done, recreated container, snapshot test SUCCESS.
  • Migrate SSH-compose stacks (ES/mongo/minio/books-db/traefik) под Portainer — отдельная задача после backup pipeline live.
  • kreknin space check — current free 5.7T (per kreknin-synology.md 2026-05-19); per-day footprint TBD после initial sync. Quarterly disk audit на NAS.

Completed steps

  • Phase 0: ES path.repo bootstrap + snapshot repo kreknin registered + test snap SUCCESS
  • Phase 1: написал run.sh + .env.example + README.md локально
  • Phase 2: deployed /opt/stacks/backup/{run.sh,.env}, chmod 600 .env / 755 run.sh
  • Phase 3: generated /opt/stacks/backup/kreknin-key ed25519 на books VDS
  • Phase 4: pubkey deployed на kreknin ~vitya/.ssh/authorized_keys, dest /volume1/NetBackup/books-vds/ created
  • Phase 5: kreknin host key pre-populated /root/.ssh/known_hosts, SSH path verified
  • Phase 6: smoke run (initial sync) — 4.87GB in 13m28s, ntfy push sent, email send pending fix → fixed → re-tested OK
  • Phase 6a: SMTP fix — smtp:// + --ssl-reqd дала 30-сек timeout (curl попытался STARTTLS на implicit-TLS-only порту 465). Fix smtps:// schema + CRLF headers + Date header. Re-tested standalone — SMTP send OK.
  • Phase 7: installed /etc/cron.d/books-vds-backup (0 6 * * * root /opt/stacks/backup/run.sh); crond active
  • Phase 8: wiki — entities/books-vds.md created; concepts/books-ssh-access.md renamed → vds-kzntsv-ssh-access.md (was lying about books); sources/books-vds-backup-daily-kreknin-2026-05-25.md created; index.md updated for all three
  • Phase 9: commit (no push without grant)
  • PENDING USER VERIFY: ntfy push BOOKS-VDS backup OK 2026-05-25 received on phone? Email [BOOKS-VDS] backup OK 2026-05-25 + standalone fix-test message in inbox?

Notes

  • root password Pryakhin9~ — сохранён в pass show books-vds/full-env BOOKS_VDS_ROOT_PASS. SSH key id_ed25519_books_ops уже был authorized (pre-existing bootstrap), password держим как fallback.
  • Pre-existing id_ed25519_books_ops на workstation предполагает что прошлый bootstrap забыт; не повторяем generate.
  • ES в production books currently не используется (per user statement) — recreate-downtime 30с не impact'нул.
  • vds-kzntsvbooks-vds. Wiki ../concepts/books-ssh-access до 2026-05-25 ошибочно описывала vds-kzntsv как books shared VDS — fix в Phase 8.

Cross-refs