Zum Inhalt

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.94tcbackup - ✓ borg-backup-nas.sh (TC): 192.168.178.20datacenter - ✓ 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:

  1. Handy macht Foto → Immich App lädt automatisch hoch
  2. Papa sieht neue Fotos in Immich (Web oder App) oder über SMB-Share Immich
  3. Am Laptop: Fotos herunterladen, bearbeiten
  4. Bearbeitete Fotos in den Bilder SMB-Share sortieren (eigene Ordnerstruktur)
  5. 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.sh auf TC: NAS_HOST="datacenter"
  • borg-backup-tc.sh auf 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

  1. [x] ~~Borg Scripts auf Tailscale-Hostnamen umstellen~~ ✓ erledigt
  2. [x] ~~TC heruntergefahren~~ ✓ erledigt
  3. [x] ~~TC zu Papa bringen~~ ✓ erledigt
  4. [x] ~~Port-Forwarding + Let's Encrypt~~ ✓ erledigt
  5. [x] ~~Fail2Ban~~ ✓ erledigt
  6. [x] ~~Ersten Borg-Lauf via Tailscale prüfen~~ ✓ erledigt (28.02, nach OMV-Upgrade-Fix)
  7. [x] ~~HA Backup-Monitoring~~ ✓ erledigt (Push-Notification bei Fehler, tägl. 07:00)
  8. [x] ~~Watchtower für Docker Auto-Updates~~ → durch Diun ersetzt (✓ bereits aktiv)
  9. [x] ~~Daten-Share: Paperless-Backup~~ → wird über Docker-Archive (borg-backup-tc.sh) gesichert (✓)
  10. [x] ~~Immich Smart Search + Duplikat-Erkennung~~ ✓ abgeschlossen (93.314 Fotos, 28.02.2026)
  11. [ ] Handy-App für Papa einrichten (beim nächsten Treffen)
  12. [ ] Statische IP vergeben

← Zurück zur Backup-Übersicht ← Zurück zur Server-Übersicht