3.4 KiB
3.4 KiB
Backup System Setup Progress
Status: Complete (as of 2025-12-09)
Completed Steps
1. Backblaze B2 Setup ✅
- Account created
- Bucket:
ovh-prod-01-backups(private, server-side encryption enabled) - Application key:
synology-hyper-backup(stored in Bitwarden as "Backblaze | ovh-prod-01-backups key") - Client-side encryption: Not needed (server-side encryption sufficient for this use case)
2. Server-Side Backup Script ✅
- Location:
~/services/backup.shon OVH server (15.204.247.153) - Auto-discovers services in
~/services/*/docker-compose.yml - Supports: MariaDB, PostgreSQL, MongoDB, PocketBase
- Output:
~/backups/current/latest.tar.gz - Cron:
0 7 * * *(2 AM EST = 7 AM UTC) - Tested successfully - created 792MB backup
3. Synology SSH Key Setup ✅
- Key generated:
/var/services/homes/jared/.ssh/id_ed25519_ovh_backup - Public key added to OVH server's
~/.ssh/authorized_keys - Connection tested successfully
4. Synology Pull Script ✅
- Directory created:
/volume1/backups/ovh-prod-01/ - Script created:
/volume1/backups/ovh-prod-01/pull-backup.sh - SSH key:
/var/services/homes/jared/.ssh/id_ed25519_ovh_backup
5. Synology Pull Task Scheduled ✅
- Configured via Synology Task Scheduler
- Schedule: 3 AM EST (8 AM UTC)
- Runs as root to avoid permission issues
6. Hyper Backup to Backblaze B2 ✅
- Task name: "OVH Server Backup"
- Source:
/volume1/backups/ovh-prod-01/ - Destination:
ovh-prod-01-backupsbucket on Backblaze B2 - Schedule: 4 AM EST daily (after Synology pull completes)
- Integrity check: Weekly on Saturday
- Rotation: Smart Recycle (256 max versions)
- Settings: Compression enabled, transfer encryption enabled
7. Test Full Chain ✅
- Initial backup completed successfully on 2025-12-09
8. Disaster Recovery Documentation ✅
- Created
docs/disaster-recovery.md - Covers single service recovery and full server rebuild
- Documents backup locations and credential sources
9. Update Service Deployment Docs ✅
- Added step 6 to deployment pattern in CLAUDE.md
- Added disaster-recovery.md link to specialized documentation
Architecture Summary
OVH Server (2 AM EST) Synology (3 AM EST) Backblaze B2
───────────────────── ────────────────── ────────────
~/services/backup.sh → rsync pull → Hyper Backup
↓ ↓ ↓
~/backups/current/ /volume1/backups/ ovh-prod-01-backups
latest.tar.gz ovh-prod-01/ bucket
Retention Policy
- Server: 2 days (staging only)
- Synology/Backblaze: Smart Recycle (hourly for 24h, daily for ~1 month, weekly beyond)
- Max versions: 256
Gotchas & Lessons Learned
Hyper Backup Folder Visibility
- Issue: Newly created folders don't appear in Hyper Backup's folder picker
- Solution: Close the entire Hyper Backup wizard and restart it; the folder list refreshes on wizard launch
Synology Permissions
- Issue: Pull script had permission problems when run as regular user
- Solution: Run the scheduled task as root in Task Scheduler
B2 Encryption
- Decision: Server-side encryption only (no client-side)
- Rationale: SSE is sufficient for server backups; client-side adds key management complexity with minimal benefit for this use case