infra: add PostgreSQL daily backup via pg_dump with rotation
PR Checks / test-and-build (pull_request) Successful in 6m24s
PR Checks / test-and-build (pull_request) Successful in 6m24s
- Add db-backup service to compose.yaml (postgres:17-alpine + cron) - Add pgbackups volume for backup storage - Add scripts/restore.sh for manual restore from latest backup - Update .env.example with BACKUP_RETENTION_DAYS and BACKUP_VOLUME_NAME - Document backup/restore flow in README Bump version -> 1.15.0 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
Проект разработан с упором на производительность, архитектуру Vertical Slice, Native AOT (для бота) и удобство развертывания с использованием .NET Aspire.
|
||||
|
||||
**Текущая версия:** `v1.14.0`.
|
||||
**Текущая версия:** `v1.15.0`.
|
||||
|
||||
---
|
||||
|
||||
@@ -105,6 +105,44 @@ docker compose up -d
|
||||
2. Создайте группу через `/newgroup`.
|
||||
3. Откройте Mini App или Web Dashboard для расширенного управления.
|
||||
|
||||
## 💾 Backup и восстановление
|
||||
|
||||
Проект включает автоматический ежедневный backup PostgreSQL через сервис `db-backup` в Docker Compose.
|
||||
|
||||
### Как это работает
|
||||
- **Каждый день в 03:00** выполняется `pg_dump` базы `gmrelay_db`.
|
||||
- Дампы сжимаются (`gzip`) и сохраняются в volume `pgbackups` (`/backups`).
|
||||
- Формат имени: `gmrelay_db_YYYYMMDD_HHMMSS.sql.gz`.
|
||||
- Ротация: по умолчанию хранятся последние **7 дней** (настраивается через `BACKUP_RETENTION_DAYS`).
|
||||
|
||||
### Проверка бэкапов
|
||||
```bash
|
||||
docker compose exec db-backup ls -la /backups
|
||||
```
|
||||
|
||||
### Ручное создание дампа
|
||||
```bash
|
||||
docker compose exec db-backup sh -c "pg_dump -h db -U gmrelay -d gmrelay_db | gzip > /backups/gmrelay_db_manual.sql.gz"
|
||||
```
|
||||
|
||||
### Восстановление из бэкапа
|
||||
```bash
|
||||
# Использовать последний автоматический бэкап
|
||||
./scripts/restore.sh
|
||||
|
||||
# Или указать конкретный файл
|
||||
./scripts/restore.sh backups/gmrelay_db_20260512_030000.sql.gz
|
||||
```
|
||||
|
||||
> [!WARNING]
|
||||
> Восстановление **перезаписывает текущую базу данных**. Убедитесь, что вы понимаете последствия, прежде чем запускать `restore.sh`.
|
||||
|
||||
### Переменные окружения (опциональные)
|
||||
```env
|
||||
BACKUP_RETENTION_DAYS=7
|
||||
BACKUP_VOLUME_NAME=game_pgbackups
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🗂 Структура репозитория
|
||||
|
||||
Reference in New Issue
Block a user