- close [resilience-roadmap-design] 🟢 — roadmap expanded via interactive workshop with user (per-service RTO/RPO matrix for 10 services, CMS backup 2-phase plan, IIS migration track, 4 secondary topics documented as recommendations) - file 3 impl-tasks ⚪ ready (spawned by roadmap-design): - cms-stopgap-backup-daily — Phase 1, plug RPO=∞ via daily rsync to kreknin - mssql-minio-migration-to-vds — Phase 2 enabler, achieves RPO 1h target - windows-hosting-vendor-research — design-task for IIS migration off home host - unblock [admin-infra-project-review] 🔵 → ⚪ (last blocker cleared) - expand .wiki/concepts/future-resilient-architecture-goals.md with §Workshop pass 1 (canonical) above original §Pre-workshop placeholder (historical) Key user-decisions zafiksirovany in workshop: - CMS RTO 4h / RPO 1h (not 1h/15min — overkill for one-person infra) - MSSQL+MinIO migrate to VDS (not Windows-side managed hosting) - MSSQL Always-On AG rejected — log shipping every 60min sufficient - IIS long-term dies with snolla-on-node; transitional via managed Windows host - Cloud off-site = Yandex Object Storage when needed (kreknin already off-site) - Monitoring = Uptime Kuma on VDS, high-priority among not-filed Acceptance per spec (user confirmed plan + concrete impl-tasks top-3 + doc committed) — met. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.3 KiB
cms-stopgap-backup-daily
Goal
Plug текущую дыру RPO=∞ для CMS прод. CMS sites + MSSQL + MinIO на windows-recovery-host не имеют бэкапов нового состояния с 2026-05-19 (последний Hyper Backup был 2026-05-09 на мёртвой синке). Если windows-host сгорит сейчас — теряем всё.
Stop-gap: ежедневный rsync на kreknin-synology (RPO факт = 24ч) до пока MSSQL/MinIO не переедут на VDS через mssql-minio-migration-to-vds, где backup'ы будут через существующий vds-backup-rsync-kreknin pipeline (RPO 1ч target).
Это временное решение — pipeline списывается после Фазы 2. Поэтому не строить ничего изощрённого: cron + rsync + ssh-pipe, паттерн уже работает на VDS.
Key files
C:\sites\*— IIS site directories (snolla, stostayer, stostayer.old)- MSSQL container на windows-host, port 1433 — backup через
docker exec mssql /opt/mssql-tools/bin/sqlcmd ... BACKUP DATABASE ... TO DISK = '/var/opt/mssql/backup/...', потом скопировать.bakфайлы из volumemssql_mssql_dataна host - MinIO data dir —
C:\Users\vitya\projects\docker\diskstation\minio\data\(verify on impl) - Target:
kreknin.site:/volume1/NetBackup/windows-cms/<DATE>/(создать), retention 7 daily snapshots - SSH key:
~/.ssh/id_ed25519_kreknin(vitya@195.19.90.188), пароль см. ../entities/kreknin-synology - Notify: ntfy
vds-opstopic (https://ntfy.vds.kzntsv.site/vds-ops, auth vitya/Pryakhin9, см. ../entities/vds-kzntsv)
Acceptance
- Daily ~03:00 MSK cron (Windows Task Scheduler) на windows-host выполняет:
- MSSQL FULL backup всех 5 prod DBs (MoreThenCms, Stayer*, stostayer, TireService) →
D:\backup\mssql\<DATE>\ - rsync
D:\backup\mssql\→kreknin:/volume1/NetBackup/windows-cms/<DATE>/mssql/ - rsync
C:\sites\→kreknin:/volume1/NetBackup/windows-cms/<DATE>/sites/ - rsync MinIO data dir →
kreknin:/volume1/NetBackup/windows-cms/<DATE>/minio/
- MSSQL FULL backup всех 5 prod DBs (MoreThenCms, Stayer*, stostayer, TireService) →
- ntfy push на
vds-opstopic с status (success/failure + total size + duration) - Retention: 7 daily snapshots на kreknin (старше — auto-delete через script или kreknin-side cron)
- Smoke recovery test: на отдельной машине / VM загрузить MSSQL backup в чистый MSSQL container, проверить что хотя бы одна DB readable (
SELECT TOP 1 ... FROM Articlesили эквивалент) - Documented in
.wiki/concepts/cms-stopgap-backup-pipeline.md(создать) с atomic revert recipe
Decisions log
- 2026-05-21: создана как Фаза 1 из roadmap-workshop'а (см. ../.wiki/concepts/future-resilient-architecture-goals §"CMS backup pipeline — 2-фазный план"). User-decision: не строить proper RPO 1ч pipeline на windows-host т.к. MSSQL/MinIO мигрируют на VDS в обозримом (2-4 недели). Этот pipeline = bridge, не target-state.
Open questions
- Точное location MinIO data dir на windows-host — узнать на ходу через
docker inspect minio | jq '.Mounts' - Windows Task Scheduler vs WSL cron для расписания — TBD на impl (Task Scheduler нативнее, WSL даёт привычные bash-скрипты)
- Encryption бэкапов at-rest перед отправкой на kreknin — defer (kreknin наш host под нашим контролем)
- MSSQL backup — full ежедневно или differential? Full ~~достаточно для RPO 24ч stop-gap; tx-log backups оставляем на Фазу 2 для RPO 1ч
Notes
Паттерн vds-backup-rsync-kreknin (../.tasks/vds-backup-rsync-kreknin) — reference implementation на VDS-стороне. Адаптировать на Windows: PowerShell вместо bash, rsync.exe (через Git Bash или Cygwin), SSH-ключ Windows path.
Atomic revert: Unregister-ScheduledTask -TaskName "cms-stopgap-backup" -Confirm:$false; Remove-Item D:\backup\mssql\* -Recurse. На kreknin: backup snapshots оставить как archive (read-only после revert).