From 35ddcb27523c257f25b314e847a1bf5b3c935928 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Kr=C3=BCger?= Date: Thu, 6 Nov 2025 10:26:04 +0100 Subject: [PATCH] feat: add automated backup configuration for all volumes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added comprehensive backup configuration to Backrest: **Repository Configuration:** - Target: /repos (mounted from /mnt/hidrive/users/valknar/Backup) - Password: falcon-backup-2025 - Auto-initialize and auto-unlock enabled - Weekly prune schedule (Sundays at 2 AM) - Weekly integrity checks (Sundays at 3 AM) **Backup Plans** (11 plans covering all volumes): 1. **postgres-backup** (2 AM daily) - PostgreSQL database - Retention: 7 daily, 4 weekly, 6 monthly, 2 yearly 2. **redis-backup** (3 AM daily) - Redis cache data - Retention: 7 daily, 4 weekly, 3 monthly 3. **directus-uploads-backup** (4 AM daily) - Directus media files - Retention: 7 daily, 4 weekly, 6 monthly, 2 yearly 4. **directus-bundle-backup** (4 AM daily) - Directus extensions - Retention: 7 daily, 4 weekly, 3 monthly 5. **awesome-backup** (5 AM daily) - Awesome app database - Retention: 7 daily, 4 weekly, 6 monthly 6. **gotify-backup** (5 AM daily) - Gotify notifications - Retention: 7 daily, 4 weekly, 3 monthly 7. **scrapy-backup** (6 AM daily) - Scrapyd data and spider code - Retention: 7 daily, 4 weekly, 3 monthly 8. **n8n-backup** (6 AM daily) - n8n workflow data - Retention: 7 daily, 4 weekly, 6 monthly 9. **filestash-backup** (7 AM daily) - Filestash state - Retention: 7 daily, 4 weekly, 3 monthly 10. **linkwarden-backup** (7 AM daily) - Linkwarden bookmarks and search index - Retention: 7 daily, 4 weekly, 6 monthly 11. **letsencrypt-backup** (8 AM daily) - SSL certificates - Retention: 7 daily, 4 weekly, 12 monthly, 3 yearly **Configuration Mount:** - config.json mounted directly at /config/config.json - Read-write mode to allow UI updates - Removed backrest_config volume (using file mount instead) All backups scheduled at different times to spread I/O load. Critical data (postgres, directus, letsencrypt) has longer retention. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- restic/compose.yaml | 6 +- restic/config.json | 199 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 202 insertions(+), 3 deletions(-) create mode 100644 restic/config.json diff --git a/restic/compose.yaml b/restic/compose.yaml index f5b4b16..2602b2b 100644 --- a/restic/compose.yaml +++ b/restic/compose.yaml @@ -7,10 +7,12 @@ services: volumes: # Backrest application data - backrest_data:/data - - backrest_config:/config - backrest_cache:/cache - backrest_tmp:/tmp + # Configuration file (mount directly to override) + - ./config.json:/config/config.json:rw + # Backup destination - ${RESTIC_BACKUP_PATH:-/mnt/hidrive/users/valknar/Backup}:/repos @@ -57,8 +59,6 @@ services: volumes: backrest_data: name: ${RESTIC_COMPOSE_PROJECT_NAME}_data - backrest_config: - name: ${RESTIC_COMPOSE_PROJECT_NAME}_config backrest_cache: name: ${RESTIC_COMPOSE_PROJECT_NAME}_cache backrest_tmp: diff --git a/restic/config.json b/restic/config.json new file mode 100644 index 0000000..9171f6f --- /dev/null +++ b/restic/config.json @@ -0,0 +1,199 @@ +{ + "version": 1, + "instance": "falcon", + "repos": [ + { + "id": "hidrive-backup", + "uri": "/repos", + "password": "falcon-backup-2025", + "autoUnlock": true, + "autoInitialize": true, + "prunePolicy": { + "schedule": { + "cron": "0 2 * * 0" + } + }, + "checkPolicy": { + "schedule": { + "cron": "0 3 * * 0" + } + } + } + ], + "plans": [ + { + "id": "postgres-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/core_postgres_data"], + "schedule": { + "cron": "0 2 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 6, + "yearly": 2 + } + } + }, + { + "id": "redis-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/core_redis_data"], + "schedule": { + "cron": "0 3 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 3 + } + } + }, + { + "id": "directus-uploads-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/directus_uploads"], + "schedule": { + "cron": "0 4 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 6, + "yearly": 2 + } + } + }, + { + "id": "directus-bundle-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/directus_bundle"], + "schedule": { + "cron": "0 4 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 3 + } + } + }, + { + "id": "awesome-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/awesome_data"], + "schedule": { + "cron": "0 5 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 6 + } + } + }, + { + "id": "gotify-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/gotify_data"], + "schedule": { + "cron": "0 5 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 3 + } + } + }, + { + "id": "scrapy-backup", + "repo": "hidrive-backup", + "paths": [ + "/volumes/scrapyd_data", + "/volumes/scrapy_code" + ], + "schedule": { + "cron": "0 6 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 3 + } + } + }, + { + "id": "n8n-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/n8n_data"], + "schedule": { + "cron": "0 6 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 6 + } + } + }, + { + "id": "filestash-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/filestash_data"], + "schedule": { + "cron": "0 7 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 3 + } + } + }, + { + "id": "linkwarden-backup", + "repo": "hidrive-backup", + "paths": [ + "/volumes/linkwarden_data", + "/volumes/linkwarden_meili_data" + ], + "schedule": { + "cron": "0 7 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 6 + } + } + }, + { + "id": "letsencrypt-backup", + "repo": "hidrive-backup", + "paths": ["/volumes/letsencrypt_data"], + "schedule": { + "cron": "0 8 * * *" + }, + "retention": { + "policyTimeBucketed": { + "daily": 7, + "weekly": 4, + "monthly": 12, + "yearly": 3 + } + } + } + ] +}