B5-1: Backup cron + S3 — СРОЧНО (риск потери 6.83M ДДУ) #71

Closed
opened 2026-05-11 20:35:32 +00:00 by lekss361 · 1 comment
lekss361 commented 2026-05-11 20:35:32 +00:00 (Migrated from github.com)

Эшелон: 💾 Data infrastructure — КРИТИЧНО

Зачем

ops/backup.sh написан, но неизвестно:

  1. Настроен ли cron на VPS
  2. Есть ли S3 bucket для off-site
  3. Проверяется ли что backup не пустой

Риск: потеря 6.83M ДДУ + 8 месяцев аналитики если PostgreSQL volume упадёт.

Что сделать

Аудит текущего состояния

  • SSH gendesign → crontab -l — есть ли запись для backup.sh?
  • Если нет — настроить 30 3 * * * (3:30 МСК ежедневно)
  • Где сейчас хранятся dumps? Локально на VPS?

S3 off-site

  • Selectel Object Storage bucket gendesign-backups (RU jurisdiction)
  • Lifecycle policy: keep 30 days, delete older
  • IAM: write-only access key для VPS

Sanity check

  • В backup.sh: если dump <50MB → Sentry error + exit 1
  • Уведомление в Telegram при failed backup

Restore drill

  • 1 раз в месяц — restore dump на test container, проверка что данные читаются
  • Документировать процедуру в docs/restore-runbook.md

Acceptance

  • Cron активен, daily backup
  • S3 bucket принимает dumps, lifecycle работает
  • Sanity check включён
  • Restore drill пройден

Owner

devops-engineer

Effort

~1 день

Open questions

  • Q1 (tech-analyst): backup настроен сейчас? — нужно проверить ПЕРВЫМ ДЕЛОМ
**Эшелон:** 💾 Data infrastructure — КРИТИЧНО ## Зачем `ops/backup.sh` написан, но **неизвестно**: 1. Настроен ли cron на VPS 2. Есть ли S3 bucket для off-site 3. Проверяется ли что backup не пустой **Риск:** потеря 6.83M ДДУ + 8 месяцев аналитики если PostgreSQL volume упадёт. ## Что сделать ### Аудит текущего состояния - SSH gendesign → `crontab -l` — есть ли запись для backup.sh? - Если нет — настроить `30 3 * * *` (3:30 МСК ежедневно) - Где сейчас хранятся dumps? Локально на VPS? ### S3 off-site - Selectel Object Storage bucket `gendesign-backups` (RU jurisdiction) - Lifecycle policy: keep 30 days, delete older - IAM: write-only access key для VPS ### Sanity check - В `backup.sh`: если dump <50MB → Sentry error + exit 1 - Уведомление в Telegram при failed backup ### Restore drill - 1 раз в месяц — restore dump на test container, проверка что данные читаются - Документировать процедуру в `docs/restore-runbook.md` ## Acceptance - [ ] Cron активен, daily backup - [ ] S3 bucket принимает dumps, lifecycle работает - [ ] Sanity check включён - [ ] Restore drill пройден ## Owner `devops-engineer` ## Effort ~1 день ## Open questions - Q1 (tech-analyst): backup настроен сейчас? — нужно проверить ПЕРВЫМ ДЕЛОМ
Owner

Deferred (2026-05-17): backup уже работает на VPS (3-day cadence, подтверждено user'ом). Priority понижена priority/criticalpriority/normal + label blocked (deferred).

Не закрываю — остаются полезные дополнения для будущего:

  • 🟡 S3 off-site backup (Selectel) — сейчас только on-VPS, при VPS crash потеря backup'а
  • 🟡 Sanity check (dump <50MB → alert) — защита от silent failures
  • 🟡 Restore drill (1×/мес) + docs/restore-runbook.md
  • 🟡 Telegram/Sentry notification на failed backup

Эти улучшения по плану после P0 issues разрешены.

Audit reference: audits/issues_audit_2026_05_16.md (2026-05-17).

**Deferred (2026-05-17):** backup уже работает на VPS (3-day cadence, подтверждено user'ом). Priority понижена `priority/critical` → `priority/normal` + label `blocked` (deferred). Не закрываю — остаются полезные дополнения для будущего: - 🟡 S3 off-site backup (Selectel) — сейчас только on-VPS, при VPS crash потеря backup'а - 🟡 Sanity check (dump <50MB → alert) — защита от silent failures - 🟡 Restore drill (1×/мес) + `docs/restore-runbook.md` - 🟡 Telegram/Sentry notification на failed backup Эти улучшения по плану после P0 issues разрешены. Audit reference: `audits/issues_audit_2026_05_16.md` (2026-05-17).
Sign in to join this conversation.
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#71
No description provided.