infra: ежедневный backup PostgreSQL через pg_dump в отдельный volume #57

Closed
opened 2026-05-12 13:25:48 +03:00 by Toutsu · 1 comment
Owner

Проблема

В compose.yaml отсутствует любая стратегия резервного копирования данных. PostgreSQL-хранилище (pgdata) единственное, и при потере сервера/диска все данные пользователей (группы, сессии, RSVP, статистика) будут безвозвратно утеряны.

Критичность

  • Data loss при сбое сервера — нет ни WAL archiving, ни pg_dump, ни volume snapshot.
  • В текущем виде проект подходит только для dev/playground, но не для SaaS с чужими данными.

Предлагаемое решение

  1. Добавить сервис db-backup в compose.yaml:
    • образ postgres:17-alpine с cron-задачей;
    • ежедневный pg_dump в /backups;
    • хранить последние N снимков (например, 7 дней).
  2. Подключить volume pgbackups и монтировать его в /backups.
  3. Добавить скрипт backup/restore.sh для ручного восстановления из последнего дампа.
  4. (Опционально) Интеграция с S3-совместимым хранилищем для off-site backup.

Критерии приёмки

  • docker compose exec db-backup ls /backups показывает файлы вида gmrelay_db_YYYYMMDD_HHMMSS.sql.gz.
  • Документирована процедура восстановления в README.
  • Volume pgbackups не удаляется при docker compose down.

Связь

Этап: Подготовка к production

## Проблема В `compose.yaml` отсутствует любая стратегия резервного копирования данных. PostgreSQL-хранилище (`pgdata`) единственное, и при потере сервера/диска все данные пользователей (группы, сессии, RSVP, статистика) будут безвозвратно утеряны. ## Критичность - **Data loss при сбое сервера** — нет ни WAL archiving, ни pg_dump, ни volume snapshot. - В текущем виде проект подходит только для dev/playground, но не для SaaS с чужими данными. ## Предлагаемое решение 1. Добавить сервис `db-backup` в `compose.yaml`: - образ `postgres:17-alpine` с cron-задачей; - ежедневный `pg_dump` в `/backups`; - хранить последние N снимков (например, 7 дней). 2. Подключить volume `pgbackups` и монтировать его в `/backups`. 3. Добавить скрипт `backup/restore.sh` для ручного восстановления из последнего дампа. 4. (Опционально) Интеграция с S3-совместимым хранилищем для off-site backup. ## Критерии приёмки - [ ] `docker compose exec db-backup ls /backups` показывает файлы вида `gmrelay_db_YYYYMMDD_HHMMSS.sql.gz`. - [ ] Документирована процедура восстановления в README. - [ ] Volume `pgbackups` не удаляется при `docker compose down`. ## Связь Этап: **Подготовка к production**
Toutsu added this to the Подготовка к production milestone 2026-05-12 13:25:48 +03:00
Toutsu added the priority:p0 label 2026-05-12 13:25:48 +03:00
Author
Owner

Реализовано в PR #61 и выпущено в v1.15.0.

Реализовано в PR #61 и выпущено в [v1.15.0](https://git.codeanddice.ru/Toutsu/GmRelayBot/releases/tag/v1.15.0).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Toutsu/GmRelayBot#57