generated from john/python-template
50 lines
1.6 KiB
Markdown
50 lines
1.6 KiB
Markdown
# Backup and Restore (V6.0 Phase 4)
|
|
|
|
This guide defines operational backup/restore for the Docker PostgreSQL runtime and Synology replication.
|
|
|
|
## 1. Backup artifacts
|
|
|
|
- Primary local backup location: `./data/backups`
|
|
- Backup format: PostgreSQL custom dump (`pg_dump -Fc`)
|
|
- Naming: `postgres-YYYYMMDD-HHMMSS.dump` (UTC timestamp)
|
|
|
|
## 2. Creating backups
|
|
|
|
Use the scripted command:
|
|
|
|
```bash
|
|
sh deploy/backup/create_postgres_backup.sh
|
|
```
|
|
|
|
Optional environment overrides:
|
|
|
|
- `BACKUP_DIR` (default `./data/backups`)
|
|
- `BACKUP_RETENTION_DAYS` (default `14`)
|
|
- `SYNOLOGY_BACKUP_DIR` (if set, backup is copied to this mounted path)
|
|
- `ENV_FILE` (default `.env.production`)
|
|
- `COMPOSE_FILE` (default `docker-compose.production.yml`)
|
|
|
|
Example with Synology mount:
|
|
|
|
```bash
|
|
SYNOLOGY_BACKUP_DIR=/mnt/synology/transcription-backups sh deploy/backup/create_postgres_backup.sh
|
|
```
|
|
|
|
## 3. Restoring from backup
|
|
|
|
Restore requires downtime for app + worker writes.
|
|
|
|
1. Stop app and worker:
|
|
- `docker compose --env-file .env.production -f docker-compose.production.yml stop app worker`
|
|
2. Restore:
|
|
- `sh deploy/backup/restore_postgres_backup.sh ./data/backups/postgres-YYYYMMDD-HHMMSS.dump`
|
|
3. Start app and worker:
|
|
- `docker compose --env-file .env.production -f docker-compose.production.yml start app worker`
|
|
4. Validate `/healthz` and run one smoke workflow.
|
|
|
|
## 4. Retention and recovery targets
|
|
|
|
- Retention baseline: keep at least 14 days of backups locally.
|
|
- Synology copy: replicate each new backup to DS420j mounted path.
|
|
- Periodic restore drill: run at least once per release cycle to verify recovery.
|