Papa Offsite Backup¶
Offsite-Backup-Lösung mit Kreuz-Sync zwischen meinem Server und einem Thin Client bei Papa.
Status: ✅ Abgeschlossen (2026-02-28)\ Letzte Änderung: 2026-04-11
Changelog¶
2026-04-11 - Wartung: - ✓ System-Updates tcbackup: 57 Pakete via apt upgrade + 2 via dist-upgrade - ✓ OMV: 8.1.1 → 8.2.3 (DB-Migration conf_8.2.0, Workbench-Konfig aktualisiert) - ✓ Kernel: 6.18.9 → 6.19.10 (via dist-upgrade, danach Reboot) - ✓ Security-Updates: glibc 2.41, sudo, python3-cryptography (CVE-2026-26007), python3-requests (CVE-2024-47081) - ✓ Samba: 4.22.6 → 4.22.8 · grub 2.12-9+deb13u1 · bash · busybox · tzdata 2026a - ✓ borgbackup + fail2ban: apt-hold greift weiterhin — nicht aktualisiert (kein Konflikt)
2026-03-26 - Wartung: - ✓ Borg-Fehleranalyse: NAS→TC Backup um 03:02 fehlgeschlagen (Exit 2) — SSH-Timeout zu tcbackup via Tailscale - ✓ Ursache: Einmaliger Tailscale-/Netzwerkausfall bei Papa (tcbackup war durchgehend oben, seit 26 Tagen uptime) - ✓ Monatsrückblick: Nur 3× echte Fehler (26.–28.02., alle während Initial-Setup) — seither 24 Tage sauber bis heute - ✓ Docker Updates auf tcbackup: Immich Server + Machine Learning aktualisiert & neugestartet (healthy) - ✓ Docker Updates auf tcbackup: nginx-proxy-manager + diun Images aktualisiert
2026-03-02:
- ✓ Borg TC→NAS Backup erfolgreich: papa-backup-2026-03-02 (02:00–02:01, 48 Sek., 7.47 MB neu)
- ✓ Redundanter Ordner Papa Backup/ auf NAS gelöscht (327 GB freigegeben)
1. Ordner war Original-Kopie für Pre-Seeding, nicht mehr benötigt
1. Papas Fotos jetzt: Original auf TC + verschlüsselt im Borg-Repo auf NAS
1. NAS-Speicher: 777 GB frei (58% belegt)
2026-02-28 - Session 14:
- ✓ OMV-Upgrade Problem diagnostiziert: OMV 8.0.9→8.1.0 hatte borgbackup + fail2ban am 27.02 14:26 automatisch entfernt
- ✓ borgbackup + fail2ban auf TC neu installiert, fail2ban sshd-Jail reaktiviert (jail.local war noch vorhanden)
- ✓ apt-mark hold für borgbackup + fail2ban (TC) und borgbackup (NAS) gesetzt
- ✓ BORG_RELOCATED_REPO_ACCESS_IS_OK=yes in beide Borg-Scripts eingetragen (Tailscale-Hostname != alte IP)
- ✓ Beide Backups erfolgreich getestet: NAS→TC 1.27 GB / 8min, TC→NAS 478 MB / 4min (nur Deltas — Pre-Seeding funktioniert)
- ✓ HA Backup-Monitoring: 2 Sensoren + Automation (tägl. 07:00 Push-Notification bei Fehler)
- ✓ Statusdateien in beide Scripts eingebaut: borg-tc-status.txt / borg-nas-status.txt auf NAS
2026-02-27 - Session 13:
- ✓ TC bei Papa angeschlossen — Tailscale direct connection zu datacenter (kein Relay)
- ✓ NPM DNS-Fix: dns: 8.8.8.8, 1.1.1.1 in docker-compose.yml → Let's Encrypt möglich
- ✓ Let's Encrypt Zertifikat erworben: papa.im.amg.co.at gültig bis 2026-05-28
- ✓ Port-Forwarding 80+443 bei Papa eingerichtet (vom User vor Ort)
- ✓ https://papa.im.amg.co.at → Immich ✓ erreichbar
- ✓ Fail2Ban installiert & konfiguriert (sshd, bantime=-1, maxretry=3, Tailscale-Range in Whitelist)
- ✓ Tailscale DNS-Warnung behoben (tailscale set --accept-dns=false + Service-Neustart)
2026-02-27 - Session 12:
- ✓ Borg Scripts auf Tailscale-Hostnamen umgestellt (BEVOR TC eingepakt)
- ✓ borg-backup-tc.sh (NAS): 192.168.178.94 → tcbackup
- ✓ borg-backup-nas.sh (TC): 192.168.178.20 → datacenter
- ✓ Tailscale-Verbindung getestet: NAS→TC SSH ✓, TC→NAS Ping ✓
- ✓ TC heruntergefahren → bereit zum Einpacken
2026-02-27 - Session 11: - ✓ Immich Smart Search gestartet (93.314 Fotos, ~6,5h) → Duplikat-Erkennung folgt automatisch - ✓ Foto-Tipp für Papa: "Originale"-Ordner als ZIP → Immich ignoriert ZIP-Dateien, keine Duplikate - ✓ Papa-Anleitung (.docx) erstellt: alle Logins, Workflow, ZIP-Tipp, Problemlösung - ✓ OMV auf Port 8080 verlegt (Port 80 für Nginx Proxy Manager freigegeben) - ✓ Nginx Proxy Manager installiert: Port 80/443/81, Web-UI :81, Login agriesauer@gmx.at - ✓ Domain: papa.im.amg.co.at (Let's Encrypt + Port-Forwarding: bei Papa vor Ort)
2026-02-26 - Session 10: - ✓ apticron für OMV System-Updates konfiguriert: Email an agriesauer@gmx.at - ✓ msmtp als Mail-Relay installiert (smtp.gmx.net:587) - ✓ Diun NAS: Email-Notification ergänzt (zusätzlich zu HA-Webhook)
2026-02-26 - Session 9: - ✓ Diun auf TC installiert: 5 Container überwacht, tägl. 08:00, Email via GMX
2026-02-26 - Session 8: - ✓ NAS→TC Borg erweitert: +HA Backups, DokuWiki, Paperless, Immich/Plex/Sonarr/Radarr/Lidarr/SABnzbd (~300 GB gesamt) - ✓ TC→NAS Borg erweitert: +Daten Share, +Immich DB Dump
2026-02-26 - Session 7:
- ✓ Samba-Passwort Fix (! Escaping) · Immich-Share auf immich/library/ korrigiert
2026-02-26 - Session 6: - ✓ NAS→TC Borg: 141.999 Dateien, 286 GB → 260 GB dedup, tägl. 03:00 - ✓ Pre-Seeding papa-fotos: 105.301 Dateien, 350 GB → 204 GB Baseline - ✓ Samba User Andreas eingerichtet
2026-02-25/26 - Sessions 1–5: - ✓ Debian 12 + OMV8 + Docker + Tailscale + Immich + 327 GB rsync + 93.314 Fotos + 4.467 Personen
Foto-Workflow¶
So ist der Ablauf für Papa gedacht:
- Handy macht Foto → Immich App lädt automatisch hoch
- Papa sieht neue Fotos in Immich (Web oder App) oder über SMB-Share Immich
- Am Laptop: Fotos herunterladen, bearbeiten
- Bearbeitete Fotos in den Bilder SMB-Share sortieren (eigene Ordnerstruktur)
- Beim nächsten Immich-Scan erscheinen die sortierten Fotos auch in Immich
Tipp Ordnerstruktur: Originale als Originale.zip zippen — Immich schaut nicht in ZIP-Dateien rein, keine Duplikate! Fotobuch-Ordner nach Bestellung löschen oder ebenfalls zippen.
SMB Shares¶
Zugang: \TCBACKUP · User: Andreas · Passwort: Andreas+Anatol!2
| Share | Pfad auf 2TB | Zweck |
| Bilder | papas_fotos/ | Sortierte Fotos — auch in Immich sichtbar (External Library) |
| Daten | Daten/ | Rechnungen, Dokumente |
| Immich | immich/library/ | Handy-Uploads direkt — gleiche Fotos wie in Immich App/Web |
Hinweis Samba-Passwort: Falls nach TC-Neustart das Passwort nicht stimmt: Im OMV Web-Interface unter Benutzer → Andreas → Bearbeiten neu setzen.
Borg Backup¶
Passphrase: PapaBorg2026!
NAS → TC (meine Daten bei Papa)¶
Script: /usr/anatol/claude/scripts/borg-backup-tc.sh · Log: borg-backup-tc.log · Cron: tägl. 03:00 · Status: ✓ aktiv
| # | Was | Größe | | 1 | Fotos/ + ImmichUpload/ | ~268 GB | | 2 | HA Backups (BackUpHA/) | ~18 GB | | 3 | DokuWiki | ~7 MB | | 4 | Paperless Dokumente | ~2 GB | | 5 | Paperless DB Dump | ~5 MB | | 6 | Immich DB Dump | ~570 MB | | 7 | Plex (library.db + Preferences.xml) | ~680 MB | | 8 | Sonarr Config | ~290 MB | | 9 | Radarr Config | ~155 MB | | 10 | Lidarr Config | ~7.2 GB | | 11 | SABnzbd Config | ~18 MB |
Gesamt initial: ~300 GB — danach nur Deltas (Borg dedupliziert)
TC → NAS (Papas Daten bei mir)¶
Script: /usr/anatol/claude/scripts/borg-backup-nas.sh · Log: borg-backup-nas.log · Cron: tägl. 02:00 · Status: ✅ aktiv via Tailscale
| # | Was | Pfad auf TC |
| 1 | Papas sortierte Fotos | papas_fotos/ |
| 2 | Daten-Share (Dokumente) | Daten/ |
| 3 | Immich DB Dump | docker exec immich_postgres |
Pre-Seeding: NAS-Repo bereits mit 204 GB Baseline befüllt — TC→NAS überträgt nach Transport nur noch Deltas.
apt-mark hold: borgbackup und fail2ban sind auf TC auf hold gesetzt (OMV-Upgrade hatte beide am 27.02 entfernt). Auf NAS ist borgbackup ebenfalls auf hold.\
Befehle: echo GTEDB1CA2T | sudo -S apt-mark hold borgbackup fail2ban (TC) · sudo apt-mark hold borgbackup (NAS)
HA Backup-Monitoring¶
Package: /config/packages/borg_backup_monitor.yaml
| Sensor | Entity ID | Quelle |
| NAS→TC Status | sensor.borg_backup_nas_tc_status | /usr/anatol/claude/scripts/borg-tc-status.txt auf NAS |
| TC→NAS Status | sensor.borg_backup_tc_nas_status | /usr/anatol/claude/scripts/borg-nas-status.txt auf NAS |
Automation: automation.borg_backup_fehler_benachrichtigung\
Trigger: täglich 07:00 — Condition: Sensor enthält FEHLER oder UNBEKANNT — Action: Push via notify.mobile_app_z_fold_7
Statusdatei-Format: OK 2026-02-28 11:23 oder FEHLER 2026-02-28 03:00 (Exit 2)
Tailscale-Migration ✓ erledigt¶
borg-backup-nas.shauf TC:NAS_HOST="datacenter"✓borg-backup-tc.shauf NAS:ssh://claude@tcbackup/...✓
Retention beider Repos: 7 tägl. / 4 wöchentl. / 6 monatl.
Update-Monitoring¶
| Was | Tool | Wann | Kanal | | Docker Images (5 Immich Container) | Diun | tägl. 08:00 | Email agriesauer@gmx.at | | OMV System-Pakete (apt) | apticron | tägl. (cron.daily) | Email agriesauer@gmx.at |
Mail-Relay: msmtp → smtp.gmx.net:587
Hinweis: OMV setzt /usr/sbin/sendmail beim Update ggf. zurück. Falls Emails ausbleiben: sudo ln -sf /usr/bin/msmtp /usr/sbin/sendmail
Sicherheit¶
| Maßnahme | Status | | Fail2Ban (sshd, bantime=-1, maxretry=3, findtime=7d) | ✅ aktiv | | Tailscale (MagicDNS deaktiviert) | ✅ aktiv | | SSH Key-Auth | ✅ aktiv | | Let's Encrypt SSL (papa.im.amg.co.at) | ✅ aktiv (bis 2026-05-28) | | PermitRootLogin / PasswordAuth | weiterhin an (Tailscale-Zugriff benötigt) |
Fail2Ban Whitelist: 127.0.0.1/8 192.168.0.0/24 100.0.0.0/8 — Tailscale-Range (100.x) ist whitelisted.
Zugriff¶
Immich (Internet): https://papa.im.amg.co.at ✅ (Let's Encrypt, gültig bis 2026-05-28)\
Immich (lokal): http://192.168.178.94:2283
- Admin: abstractdrake@protonmail.com / Immich2026tc
- Papa: a.ullmann34@gmail.com / Andreas+Anatol
Samba: \TCBACKUP · Andreas / Andreas+Anatol!2
SSH: via Tailscale (NAS-Hop): ssh -F /config/.ssh/config omv "ssh claude@tcbackup 'CMD'"\
Tailscale IP: 100.65.43.96 (tcbackup)
OMV: http://192.168.178.94:8080 · admin ⚠️ Port geändert!\
Nginx Proxy Manager: http://192.168.178.94:81 · agriesauer@gmx.at / Nec3338a ⚠️ (3×drei!)
Hardware & Disk-Layout¶
- Intel i3 Thin Client · 8 GB RAM · ~10-15W · Tailscale: tcbackup (100.65.43.96)
| Disk | Größe | Zweck | | sda intern | 224 GB | System, OMV, Immich Postgres | | sdb2 extern | 1.8 TB | Immich Library, Papas Fotos, Borg, Shares |
Software-Stack¶
| Komponente | Status | | OMV 8.2.3 + Docker + Tailscale | ✅ | | Kernel 6.19.10 (Debian 13 Trixie) | ✅ | | Fail2Ban (sshd jail, bantime=-1) | ✅ | | Immich (External Library, 93.314 Fotos, 4.467 Personen) | ✅ | | SMB Shares (Bilder, Daten, Immich→library) + User Andreas | ✅ | | Borg NAS→TC (~300 GB, tägl. 03:00) | ✅ aktiv | | Borg TC→NAS (Fotos+Daten+Immich DB, tägl. 02:00) | ✅ aktiv via Tailscale | | Diun (Docker Image Updates, tägl. 08:00, Email) | ✅ | | apticron + msmtp (OMV System Updates, Email) | ✅ | | Nginx Proxy Manager (Reverse Proxy) | ✅ | | Let's Encrypt SSL (papa.im.amg.co.at) | ✅ bis 2026-05-28 | | HA Backup-Monitoring (Sensoren + Automation, Push 07:00) | ✅ |
Noch offen¶
- [x] ~~Borg Scripts auf Tailscale-Hostnamen umstellen~~ ✓ erledigt
- [x] ~~TC heruntergefahren~~ ✓ erledigt
- [x] ~~TC zu Papa bringen~~ ✓ erledigt
- [x] ~~Port-Forwarding + Let's Encrypt~~ ✓ erledigt
- [x] ~~Fail2Ban~~ ✓ erledigt
- [x] ~~Ersten Borg-Lauf via Tailscale prüfen~~ ✓ erledigt (28.02, nach OMV-Upgrade-Fix)
- [x] ~~HA Backup-Monitoring~~ ✓ erledigt (Push-Notification bei Fehler, tägl. 07:00)
- [x] ~~Watchtower für Docker Auto-Updates~~ → durch Diun ersetzt (✓ bereits aktiv)
- [x] ~~Daten-Share: Paperless-Backup~~ → wird über Docker-Archive (borg-backup-tc.sh) gesichert (✓)
- [x] ~~Immich Smart Search + Duplikat-Erkennung~~ ✓ abgeschlossen (93.314 Fotos, 28.02.2026)
- [ ] Handy-App für Papa einrichten (beim nächsten Treffen)
- [ ] Statische IP vergeben