tasks(windows-host-fallback-backup-daily): close 🟢 — daily live, smoke #1

End-to-end pipeline verified — windows-host (DESKTOP-NSEF0UK) → kreknin
SFTP daily 03:00 MSK live. Smoke run #1 на 14:03-15:25 = 4868 sec
(81 min). Total 23 GB на kreknin /volume1/NetBackup/windows-host/<date>/.

Components synced (6 paths):
- mssql/ 486 MB (5 .bak FULL+COMPRESSION+INIT for MoreThenCms,
  StayerCalculator, StayerPrice, stostayer, TireService)
- sites/ 20 GB (C:\sites\* всё содержимое)
- minio/ 3.1 GB (windows-host MinIO data dir)
- traefik/ 1.1 MB (config + acme.json)
- iis-config/ 68 KB (applicationHost.config)
- iis-backup-webconfiguration/ 384 KB (native Backup-WebConfiguration)

ScheduledTask `WindowsHost-Backup-Daily` 03:00 MSK SYSTEM Wake-To-Run
(машина просыпается из standby). Все 3 host backups (windows 03:00 →
RUVDS 04:30 → VDS 05:00) sequential — аккумулируются за одну ночь.

Notifications dual-channel ntfy `vds-backup` + email Yandex 587 STARTTLS
fired clean (no WARNING/FAILED в log).

Acceptance check 5/6:
 ScheduledTask, components, retention, notify, README
⚠ Smoke recovery test (restore .bak в чистый container + SELECT) —
   deferred как "DR drill" follow-up, не блокер.

Decisions captured в .tasks/ARCHIVE.md closure block:
- rclone в ProgramData (не Program Files) — non-admin staging path
- icacls SID *S-1-5-32-544 — locale-safe для ru-Windows
- sqlcmd 18 `-C` flag (TLS-required даже на localhost)
- MinIO bind-mount path verified via docker inspect
- SSH key deploy via VDS pivot (windows-host нет direct ssh к kreknin)
- Wake-To-Run critical для warm-standby use-case

Block moved: STATUS.md  → ARCHIVE.md 🟢 + header refresh. STATUS.md
теперь 2 active tasks (iis-migration-to-ruvds 🟡, infra-inventory ).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-24 15:37:29 +03:00
parent 9980538f78
commit 7f40bba14b
3 changed files with 79 additions and 20 deletions

View File

@@ -1,5 +1,5 @@
# Admin Task Board
_Updated: 2026-05-24 (Cleanup: 25 🟢 closed blocks → [ARCHIVE.md](ARCHIVE.md); per-task <slug>.md остаются in-place. Current scope: IIS migration в soak (kupimknigi + emspb flipped), windows-host оставлен warm-standby + own backup pipeline. Tandemmebel.ru остаётся на windows-IIS отдельно.)_
_Updated: 2026-05-24 (`windows-host-fallback-backup-daily` 🟢 closed — daily 03:00 MSK rclone SFTP windows-host → kreknin live, smoke #1 ✓ 4868 sec / 23 GB total / 5 MSSQL DBs backed up. Все 3 host'а (windows + RUVDS + VDS) теперь backup'ятся на kreknin sequentially за одну ночь. STATUS.md теперь 2 active tasks. Current scope: IIS migration в soak (kupimknigi + emspb flipped, tandemmebel excluded), infra-inventory ready.)_
<!--
Status legend:
@@ -44,21 +44,3 @@ _Updated: 2026-05-24 (Cleanup: 25 🟢 closed blocks → [ARCHIVE.md](ARCHIVE.md
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .workshop / 2026-05-22 / trigger: gitea-hostname-confusion-incident -->
<!-- scope-expanded: 2026-05-22 — single-page → two-tier (public + admin-detailed) -->
---
## ⚪ [windows-host-fallback-backup-daily] — daily backup windows-host → kreknin, держим warm-standby готовым принять traffic при VDS/RUVDS failure
**Status:** ready
**Where I stopped:** (not started — re-scoped 2026-05-24 из `cms-stopgap-backup-daily` после migration MSSQL+sites)
**Why:** primary backup'ы покрыты `ruvds-backup-daily-kreknin` 🟢 (sites + IIS configs + certs) + `vds-backup-rsync-kreknin` 🟢 (MSSQL/MinIO/VDS stacks). Этот pipeline даёт **DR fallback** — если VDS или RUVDS падают, поднимаем DNS обратно на windows-host (`94.19.247.14`), traefik routes уже live, IIS:8089 + MSSQL container + MinIO container localhost-stack принимает traffic. Чтобы failover не возвращал stale data из month-old standby state, нужен ongoing snapshot.
**Also blocks image-pipeline DR:** CMS image rendering хардкодит `imgproxy.kzntsv.site` через DLL (см. `[iis-cutover-to-vds-services]` MinIO caveat). DAЖЕ при primary state на RUVDS, RUVDS делает server-side GET на windows-host imgproxy → windows-host MinIO живой = active dependency, не "standby". Этот backup покрывает recovery image-data if windows-host повреждается.
**Next action:** см. [windows-host-fallback-backup-daily.md](windows-host-fallback-backup-daily.md) §Scope. Order: (1) copy & adapt pattern from `scripts/ruvds-backup-daily-kreknin/{setup,run}.ps1`, (2) docker inspect MinIO для data dir path, (3) MSSQL `BACKUP DATABASE` x5 DBs (MoreThenCms + Stayer* + stostayer + TireService), (4) rclone sync 5 components → `kreknin:NetBackup/windows-host/<date>/`, (5) ScheduledTask `WindowsHost-Backup-Daily` daily 03:00 MSK (раньше RUVDS 04:30 + VDS 05:00 — sequential snapshots на kreknin), (6) ntfy `vds-backup` + email через Yandex SMTP (re-use creds из `pass show snolla-smtp/full-env`), (7) smoke recovery test (restore .bak в чистый MSSQL container, SELECT works).
**Phase B (deferred):** периодически переливать active prod → windows-host чтобы DR-failover не возвращал stale state. Через 1-2 недели после Phase A — посмотрим насколько diverged.
**Branch:** master
<!-- created-by: vitya / 2026-05-21 / trigger: [resilience-roadmap-design] workshop pass 1 -->
<!-- re-scoped: vitya / 2026-05-24 / cms-stopgap-backup-daily → windows-host-fallback-backup-daily; warm-standby snapshot for DR vs временный stop-gap -->