Add offsite backup for immich photo library to BorgBase #315

Merged
eblume merged 1 commit from immich-photos-backup into main 2026-03-27 19:43:06 -07:00
Owner

Summary

  • Adds a second borgmatic config (photos.yaml) that backs up /Volumes/photos (sifaka SMB mount, ~128 GB) to a dedicated BorgBase repo (immich-photos), running daily at 4 AM
  • Separate launchd agent (mcquack.eblume.borgmatic-photos) so photo backups run independently from the main backup
  • Refactors borgmatic_metrics script to support multiple repos with a repo Prometheus label
  • Updates Grafana "Borg Backups" dashboard with a repo template variable so you can filter/compare repos
  • Docs updated: backups.md, borgmatic.md

Prerequisites (manual)

  • Create immich-photos repo on BorgBase with same SSH key
  • Upgrade BorgBase plan to Small ($24/yr) if currently on free tier (128 GB exceeds 10 GB limit)
  • After deploy: borg init the new repo (borgmatic does this automatically on first run)

Test plan

  • Dry run: mise run provision-indri -- --check --diff --tags borgmatic,borgmatic_metrics
  • Deploy borgmatic role and verify both configs deployed
  • Run borgmatic --config ~/.config/borgmatic/photos.yaml create --verbosity 1 manually for first backup (will take hours)
  • Verify metrics script collects from both repos: ~/.local/bin/borgmatic-metrics && cat /opt/homebrew/var/node_exporter/textfile/borgmatic.prom
  • Sync grafana-config in ArgoCD and verify dashboard repo selector works

🤖 Generated with Claude Code

## Summary - Adds a second borgmatic config (`photos.yaml`) that backs up `/Volumes/photos` (sifaka SMB mount, ~128 GB) to a dedicated BorgBase repo (`immich-photos`), running daily at 4 AM - Separate launchd agent (`mcquack.eblume.borgmatic-photos`) so photo backups run independently from the main backup - Refactors `borgmatic_metrics` script to support multiple repos with a `repo` Prometheus label - Updates Grafana "Borg Backups" dashboard with a `repo` template variable so you can filter/compare repos - Docs updated: `backups.md`, `borgmatic.md` ## Prerequisites (manual) - [x] Create `immich-photos` repo on BorgBase with same SSH key - [ ] Upgrade BorgBase plan to Small ($24/yr) if currently on free tier (128 GB exceeds 10 GB limit) - [ ] After deploy: `borg init` the new repo (borgmatic does this automatically on first run) ## Test plan - [ ] Dry run: `mise run provision-indri -- --check --diff --tags borgmatic,borgmatic_metrics` - [ ] Deploy borgmatic role and verify both configs deployed - [ ] Run `borgmatic --config ~/.config/borgmatic/photos.yaml create --verbosity 1` manually for first backup (will take hours) - [ ] Verify metrics script collects from both repos: `~/.local/bin/borgmatic-metrics && cat /opt/homebrew/var/node_exporter/textfile/borgmatic.prom` - [ ] Sync grafana-config in ArgoCD and verify dashboard repo selector works 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Adds a second borgmatic config (photos.yaml) that backs up /Volumes/photos
(sifaka SMB mount) to a dedicated BorgBase repo, running daily at 4 AM.
Refactors borgmatic metrics to support multiple repos with a `repo` label,
and updates the Grafana dashboard with a repo selector variable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
eblume merged commit c78b86c72c into main 2026-03-27 19:43:06 -07:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
eblume/blumeops!315
No description provided.