Self-Hosted Bildverwaltung

Immich richtig sichern und wiederherstellen – Backup und Disaster Recovery

Fotos gesichert, aber PostgreSQL vergessen? Wir zeigen, wie Sie Immich vollständig sichern, Datenbank und Medien wiederherstellen sowie Snapshots und Offsite-Backups richtig einsetzen.

14 min Lesezeit
Grafik: Immich Backup und Restore zuverlässig einrichten

PostgreSQL, Fotos, Docker-Daten und Offsite-Backups zuverlässig schützen

Eine selbst gehostete Fotoplattform gibt uns die Kontrolle über unsere eigenen Daten zurück.

Damit kommt allerdings auch eine neue Verantwortung:

Wir müssen selbst dafür sorgen, dass diese Daten nicht verloren gehen.

Bei einem kommerziellen Cloud-Dienst kümmert sich der Anbieter um redundante Speichersysteme, Datenbanken, Replikation und Wiederherstellung. Bei einer eigenen Immich-Installation übernehmen wir diese Aufgaben selbst.

Das ist gerade bei einer Fotosammlung besonders wichtig.

Viele Dateien sind nicht ersetzbar:

  • Familienfotos
  • Kinderbilder
  • Hochzeiten
  • Urlaubsaufnahmen
  • historische Scans
  • Smartphone-Videos
  • Erinnerungen aus vielen Jahren

Ein Festplattenausfall darf deshalb nicht bedeuten, dass die komplette Sammlung verloren ist.

Immich selbst empfiehlt ausdrücklich eine 3-2-1-Backup-Strategie. Dabei sollten sowohl die hochgeladenen Fotos und Videos als auch die Immich-Datenbank gesichert werden.

In diesem zehnten Teil unserer Serie bauen wir deshalb eine vollständige Backup- und Wiederherstellungsstrategie für Immich auf.


Welche Daten müssen bei Immich gesichert werden?

Eine Immich-Installation besteht aus mehreren Komponenten.

Vereinfacht:

Immich
│
├── PostgreSQL
│
├── Originalfotos und Videos
├── generierte Dateien
├── Konfiguration
├── Docker Compose
├── .env
├── Machine-Learning-Cache
└── Redis

Nicht alle Daten haben dabei die gleiche Bedeutung.

Besonders wichtig sind:

1. Originalfotos und Videos
2. PostgreSQL-Datenbank
3. Konfiguration

Diese drei Bereiche bilden den Kern einer Wiederherstellungsstrategie.


Warum die PostgreSQL-Datenbank so wichtig ist

Immich verwendet PostgreSQL als persistenten Datenspeicher.

Darin befinden sich unter anderem Informationen über:

  • Benutzer
  • Benutzerrechte
  • Assets
  • Dateipfade
  • Alben
  • Freigaben
  • Systemeinstellungen
  • Beziehungen zwischen Medien
  • Metadaten
  • weitere Anwendungsinformationen

Immich scannt seinen normalen Bibliotheksordner nicht einfach neu und rekonstruiert daraus automatisch den kompletten vorherigen Zustand.

Genau deshalb ist ein Datenbank-Backup unverzichtbar.


Bilder allein reichen nicht

Angenommen, wir sichern lediglich:

/data/library

oder den über:

UPLOAD_LOCATION

definierten Speicherbereich.

Nach einem Totalausfall besitzen wir zwar möglicherweise noch die Originalbilder.

Es fehlen aber unter Umständen:

Benutzer
Alben
Freigaben
Zuordnungen
Datenbankinformationen
Immich-Metadaten

Die Dateien sind also vorhanden, der ursprüngliche Immich-Zustand jedoch nicht.


Die Datenbank allein reicht ebenfalls nicht

Das andere Extrem wäre:

PostgreSQL Backup vorhanden

aber:

Fotos verloren

Dann kennt Immich zwar beispielsweise:

IMG_1234.JPG

und weiß, zu welchem Benutzer oder Album das Bild gehörte.

Die eigentliche Datei existiert aber nicht mehr.

Das Backup muss deshalb immer aus mindestens zwei zentralen Teilen bestehen:

PostgreSQL
      +
Fotos und Videos
      =
wiederherstellbares Immich

UPLOAD_LOCATION verstehen

Bei einer klassischen Docker-Compose-Installation definiert:

UPLOAD_LOCATION

den Speicherbereich für die von Immich verwalteten Mediendaten.

Beispielsweise:

UPLOAD_LOCATION=/srv/immich/library

Dieser Speicherbereich sollte Bestandteil der Datensicherung sein.

Die offizielle Immich-Dokumentation weist ausdrücklich darauf hin, dass die automatischen Datenbank-Backups keine Fotos und Videos enthalten. Die Medien unter UPLOAD_LOCATION müssen daher separat gesichert werden.


Was liegt im Immich-Speicher?

Je nach Version und Konfiguration enthält der Speicherbereich unterschiedliche Daten.

Dazu gehören insbesondere:

  • hochgeladene Originale
  • Benutzerbibliotheken
  • Vorschaubilder
  • transkodierte Videos
  • Backups
  • generierte Dateien

Nicht alle davon sind gleich wertvoll.

Originalmedien sind unersetzbar.

Vorschaubilder und transkodierte Videos können dagegen grundsätzlich neu erzeugt werden.


Originale haben höchste Priorität

Ein Backup-System sollte deshalb zuerst sicherstellen, dass folgende Dateien geschützt sind:

Originalfotos
Originalvideos

Ein verlorenes Thumbnail ist ärgerlich.

Ein verlorenes Originalfoto ist möglicherweise endgültig verloren.

Diese Priorisierung ist besonders relevant, wenn Offsite-Speicher teuer ist.


PostgreSQL automatisch sichern

Immich besitzt inzwischen eine integrierte Datenbank-Backup-Funktion.

Standardmäßig werden Datenbank-Backups automatisch erzeugt und unter:

UPLOAD_LOCATION/backups

gespeichert.

Der Zeitplan und die Aufbewahrung können über:

Administration
→ Settings
→ Backup

konfiguriert werden.

Die aktuelle Dokumentation nennt als Standard:

Backup täglich um 02:00 Uhr
Aufbewahrung der letzten 14 Backups

Diese Werte können angepasst werden.


Datenbank-Backup manuell auslösen

Ein Backup kann außerdem direkt über die Immich-Weboberfläche gestartet werden.

Dazu:

Administration
      ↓
Job Queues
      ↓
Create job
      ↓
Create Database Dump

Das erzeugte Backup erscheint anschließend ebenfalls im Backup-Verzeichnis.

Das ist beispielsweise vor einem größeren Upgrade sinnvoll.


PostgreSQL zusätzlich mit pg_dump sichern

Neben der integrierten Backup-Funktion kann PostgreSQL auch klassisch mit:

pg_dump

gesichert werden.

Die aktuelle Immich-Dokumentation zeigt hierfür beispielsweise:

docker exec -t immich_postgres \
pg_dump --clean --if-exists \
--dbname=immich \
--username=postgres \
| gzip > /backup/immich-database.sql.gz

Dabei müssen Benutzername und Datenbankname natürlich an die eigene .env angepasst werden.

Das Ergebnis ist beispielsweise:

immich-database.sql.gz

Ein solcher logischer Datenbank-Dump ist besonders interessant, weil er unabhängig von einem simplen Kopieren der PostgreSQL-Dateien funktioniert.


Warum nicht einfach den laufenden PostgreSQL-Ordner kopieren?

Die PostgreSQL-Datenbank arbeitet permanent mit Dateien, Transaktionen und internen Zuständen.

Ein einfaches:

cp -r /srv/immich/postgres /backup/

während PostgreSQL läuft, ist deshalb keine empfehlenswerte logische Datenbanksicherung.

Besser sind:

  • pg_dump
  • Immich-Datenbank-Backup
  • konsistente Storage-Snapshots
  • professionelle PostgreSQL-Backup-Verfahren

DB_DATA_LOCATION sichern?

Bei einer Standardinstallation kann PostgreSQL beispielsweise über:

DB_DATA_LOCATION

einen eigenen persistenten Speicherbereich erhalten.

Dieser enthält die physische Datenbank.

Ein Snapshot dieses Bereichs kann Teil einer Gesamtstrategie sein.

Für eine portable Wiederherstellung ist ein SQL-Dump jedoch häufig einfacher zu handhaben.

Immich empfiehlt außerdem, den PostgreSQL-Datenspeicher auf lokalem SSD-Speicher zu betreiben und nicht auf Netzwerkfreigaben.


Datenbank auf SSD, Backup auf NAS

Eine sinnvolle Architektur kann daher so aussehen:

Immich-Server
│
├── NVMe
│   └── PostgreSQL
│
└── Backup
     │
     ▼
    NAS

Die produktive Datenbank profitiert von schneller lokaler Speicherung.

Das Backup kann anschließend auf einem größeren NAS abgelegt werden.


Bilder sichern

Die eigentlichen Medien können mit nahezu jedem vernünftigen Backup-Werkzeug gesichert werden.

Beispiele:

rsync
BorgBackup
Restic
Kopia
ZFS
Btrfs
Snapshots
NAS-Backupsoftware

Ein einfaches Beispiel mit rsync:

rsync -aHAX --delete \
/srv/immich/library/ \
/mnt/backup/immich/library/

Hier ist allerdings Vorsicht geboten:

--delete

löscht im Ziel Dateien, die an der Quelle nicht mehr existieren.

Das ist für einen echten Backup-Bestand ohne Versionierung nicht immer erwünscht.


Synchronisation ist kein Backup

Ein wichtiger Unterschied:

Quelle ─── Sync ───► Ziel

ist nicht automatisch ein Backup.

Wenn eine Datei versehentlich gelöscht wird und der Löschvorgang sofort synchronisiert wird, ist sie anschließend auf beiden Seiten weg.

Ein richtiges Backup sollte deshalb möglichst:

  • Versionen aufbewahren
  • Snapshots besitzen
  • ältere Stände wiederherstellen können

BorgBackup als Beispiel

Immich stellt selbst ein Beispielskript bereit, das BorgBackup verwendet.

Darin werden lokale und entfernte Borg-Repositories genutzt.

Dabei können beispielsweise generierbare Verzeichnisse wie Thumbnails und transkodierte Videos ausgeschlossen werden, um Speicherplatz zu sparen.

Ein konzeptioneller Aufbau:

Immich
   │
   ▼
Borg Backup
   │
   ├── lokales Repository
   │
   └── Remote Repository

Borg bietet unter anderem:

  • Deduplizierung
  • Kompression
  • Verschlüsselung
  • Versionierung
  • Retention
  • Remote-Backups

Docker Volumes sichern

Bei Docker müssen wir unterscheiden zwischen:

Bind Mount

und:

Docker Volume

Ein Bind Mount zeigt beispielsweise:

volumes:
  - /srv/immich/library:/data

Dann befinden sich die eigentlichen Dateien direkt unter:

/srv/immich/library

Das ist für Backups vergleichsweise transparent.


Named Docker Volumes

Ein Docker-Volume könnte dagegen beispielsweise heißen:

immich_model-cache

oder:

pgdata

Solche Volumes werden von Docker verwaltet.

Sie sollten nicht einfach vergessen werden, nur weil sie nicht direkt im Immich-Verzeichnis sichtbar sind.

Mit:

docker volume ls

lassen sich vorhandene Volumes anzeigen.


Welche Docker-Daten müssen wirklich gesichert werden?

Nicht jeder Docker-Datensatz muss zwingend langfristig gesichert werden.

Eine sinnvolle Priorisierung lautet:

Kritisch

Originalmedien
PostgreSQL-Datenbank
.env
docker-compose.yml

Nützlich

Konfigurationsdateien
Reverse-Proxy-Konfiguration
Zertifikatskonfiguration
Backup-Skripte

Wiederherstellbar

Container Images
Machine-Learning-Modelle
Cache-Dateien
Thumbnails
teilweise transkodierte Dateien

Container selbst müssen üblicherweise nicht gesichert werden.

Sie können aus Images neu erzeugt werden.


Docker Compose sichern

Unbedingt ins Backup gehören:

docker-compose.yml

und:

.env

Die .env enthält wichtige Installationsparameter wie:

UPLOAD_LOCATION
DB_DATA_LOCATION
DB_USERNAME
DB_DATABASE_NAME
DB_PASSWORD

Damit lässt sich die ursprüngliche Installation wesentlich leichter rekonstruieren.


Vorsicht bei .env

Die .env kann Kennwörter und andere sensible Daten enthalten.

Sie sollte deshalb:

  • verschlüsselt gesichert
  • nicht öffentlich gespeichert
  • nicht ungeschützt in Git veröffentlicht

werden.

Ein öffentliches GitHub-Repository ist kein geeigneter Speicherort für produktive Zugangsdaten.


Was ist mit Redis?

Immich verwendet Redis über BullMQ zur Verwaltung von Hintergrundjobs. Dazu gehören beispielsweise Verarbeitungsschritte, die weitere Jobs auslösen können. PostgreSQL ist dagegen der persistente Datenspeicher für Benutzer-, Asset-, Freigabe- und weitere Anwendungsinformationen.

Daraus ergibt sich eine wichtige Konsequenz:

Redis ist normalerweise nicht der zentrale Bestandteil eines langfristigen Immich-Backups.

Redis enthält hauptsächlich Queue-Zustände für Hintergrundaufgaben.

Bei einer vollständigen Infrastruktur-Sicherung kann Redis selbstverständlich mitgesichert werden.

Für Disaster Recovery haben aber normalerweise folgende Daten deutlich höhere Priorität:

1. Originalmedien
2. PostgreSQL
3. Konfiguration

Machine-Learning-Cache sichern?

Auch die Machine-Learning-Modelle beziehungsweise Model-Caches sind normalerweise nicht unersetzbar.

Immich kann entsprechende Modelle erneut herunterladen.

Ein Backup kann einen Restore beschleunigen, ist aber nicht zwingend vergleichbar mit der Sicherung der Originalbilder.


Konsistentes Backup

Ein kritischer Punkt ist die Reihenfolge des Backups.

Angenommen, während des Backups lädt ein Smartphone gleichzeitig neue Bilder hoch.

Dann könnte folgender Zustand entstehen:

Datenbank:
IMG_9999.JPG vorhanden

Dateibackup:
IMG_9999.JPG fehlt

Nach einer Wiederherstellung würde die Datenbank auf eine Datei zeigen, die im Backup nicht existiert.


Immich während des Backups stoppen

Die sauberste Variante ist deshalb:

Immich stoppen
      ↓
Datenbank sichern
      ↓
Dateien sichern
      ↓
Immich starten

Wenn währenddessen keine Änderungen stattfinden, bleiben Datenbank und Dateisystem konsistent.

Die Immich-Dokumentation nennt das Stoppen des immich-server-Containers als beste Möglichkeit, beide Teile synchron zu sichern.


Backup ohne Downtime

Nicht jeder möchte Immich für ein Backup stoppen.

Dann empfiehlt Immich folgende Reihenfolge:

1. Datenbank sichern
2. Dateisystem sichern

Warum?

Im schlimmsten Fall enthält das Dateisystem anschließend Dateien, die im älteren Datenbank-Backup noch nicht bekannt sind.

Diese Dateien lassen sich später erneut importieren.

Die umgekehrte Reihenfolge wäre problematischer:

1. Dateien
2. Datenbank

Dann könnte die neuere Datenbank Dateien referenzieren, die im älteren Dateibackup noch gar nicht enthalten sind.


Snapshot-Strategien

Dateisystem-Snapshots sind für Immich besonders interessant.

Geeignete Technologien sind beispielsweise:

ZFS
Btrfs
LVM
Storage-Snapshots
NAS-Snapshots
VM-Snapshots

Ein Snapshot erzeugt einen konsistenten Zustand zu einem bestimmten Zeitpunkt.

Beispielsweise:

10:00 Snapshot 1
12:00 Snapshot 2
18:00 Snapshot 3

Wird um 19:00 Uhr versehentlich ein Album gelöscht, kann gegebenenfalls auf einen früheren Zustand zurückgegriffen werden.


Snapshot ist nicht automatisch Backup

Ein Snapshot auf derselben Festplatte schützt allerdings nicht vor:

Festplattenausfall
Controllerdefekt
Diebstahl
Brand
Wasserschaden
Ransomware
Serververlust

Snapshots sind deshalb hervorragend als zusätzliche Ebene.

Sie ersetzen aber kein unabhängiges Backup.


Eine mögliche Snapshot-Strategie

Beispielsweise:

stündliche Snapshots     24 Stück
tägliche Snapshots        7 Stück
wöchentliche Snapshots    4 Stück
monatliche Snapshots     12 Stück

Damit kann sowohl auf sehr aktuelle als auch auf ältere Zustände zurückgegriffen werden.


3-2-1-Regel

Die klassische 3-2-1-Regel lautet:

3 Kopien der Daten

2 unterschiedliche Speichermedien

1 Kopie an einem anderen Standort

Für Immich könnte das so aussehen:

                Immich Server
                     │
                     │ Kopie 1
                     ▼
                Primärspeicher
                     │
             ┌───────┴────────┐
             │                │
             ▼                ▼
           NAS          Offsite Backup
         Kopie 2           Kopie 3

Immich empfiehlt ausdrücklich diese Strategie.


Offsite-Backup

Ein Backup im selben Gebäude schützt nicht gegen alle Risiken.

Angenommen:

Server im Keller
NAS im Keller

Bei einem Brand oder Wasserschaden können beide Systeme gleichzeitig verloren gehen.

Deshalb sollte mindestens eine Sicherung außerhalb des eigenen Standorts liegen.


Möglichkeiten für Offsite-Backups

Beispiele:

  • zweites NAS bei Familienmitgliedern
  • Backup-Server an einem anderen Standort
  • verschlüsselter Cloud-Speicher
  • S3-kompatibler Object Storage
  • externe Festplatte außerhalb des Hauses
  • Cold Storage

Die Immich-Dokumentation empfiehlt mindestens eine externe Kopie beziehungsweise Cold Storage außerhalb des eigenen Standorts.


Offsite unbedingt verschlüsseln

Fotosammlungen gehören zu den persönlichsten Daten überhaupt.

Ein externes Backup sollte daher möglichst verschlüsselt werden.

Werkzeuge wie:

Borg
Restic
Kopia

können verschlüsselte Backups erstellen.

Damit sieht der externe Speicheranbieter lediglich verschlüsselte Datenblöcke.


Beispielstrategie für zuhause

Ein realistischer Aufbau könnte so aussehen:

Immich-Server
│
├── 4 TB SSD/HDD
│
└── PostgreSQL auf NVMe
     │
     ▼
NAS
│
└── tägliches Backup
     │
     ▼
Remote NAS
│
└── verschlüsseltes Offsite-Backup

Zusätzlich:

Datenbankdump täglich
Snapshots stündlich
Offsite-Sync nachts

Damit existieren mehrere Schutzebenen.


Backup-Retention planen

Nicht jedes Backup muss dauerhaft gespeichert werden.

Eine typische Aufbewahrungsstrategie könnte sein:

7 tägliche Backups
4 wöchentliche Backups
12 monatliche Backups

oder:

14 täglich
8 wöchentlich
12 monatlich

Welche Strategie sinnvoll ist, hängt von:

  • Speicherplatz
  • Änderungsrate
  • Bedeutung der Daten
  • Recovery-Anforderungen

ab.


Das Backup regelmäßig testen

Das wichtigste Backup ist nicht das Backup, das erfolgreich erstellt wurde.

Es ist das Backup, das erfolgreich wiederhergestellt werden kann.

Deshalb sollten regelmäßig Restore-Tests durchgeführt werden.

Beispielsweise:

Quartalsweise
      ↓
Test-VM erstellen
      ↓
Immich installieren
      ↓
Backup einspielen
      ↓
Fotos prüfen
      ↓
Alben prüfen
      ↓
Benutzer prüfen

Erst dann wissen wir, ob das Backup wirklich funktioniert.


Datenbank über die Weboberfläche wiederherstellen

Immich bietet inzwischen eine direkte Wiederherstellung vorhandener Datenbank-Backups über die Weboberfläche.

Unter:

Administration
→ Maintenance

befindet sich der Bereich:

Restore database backup

Dort kann ein vorhandenes Backup ausgewählt und wiederhergestellt werden.

Dabei wird die aktuelle Datenbank ersetzt.

Vor der Wiederherstellung erzeugt Immich automatisch einen Restore Point, sodass bei einem Fehler ein Rückweg existiert.


Maintenance Mode

Für administrative Aufgaben wie Datenbank-Restores verfügt Immich über einen Maintenance Mode.

Dieser kann über die Administration aktiviert werden.

Währenddessen wird Immich in einen speziellen Wartungszustand versetzt.

Das ist besonders sinnvoll bei:

  • Restore
  • Reparaturen
  • Wartung
  • Migration

Manueller PostgreSQL-Restore

Auch eine manuelle Wiederherstellung ist möglich.

Die aktuelle Immich-Dokumentation beschreibt dafür einen Ablauf, bei dem zunächst die Container heruntergefahren, PostgreSQL gestartet und anschließend der Dump wieder eingespielt wird.

Vereinfacht:

Immich stoppen
      ↓
PostgreSQL zurücksetzen
      ↓
Datenbank starten
      ↓
SQL-Dump einspielen
      ↓
Medien zurückkopieren
      ↓
Immich starten

Bei einer echten Wiederherstellung sollte immer die Dokumentation der konkret eingesetzten Immich-Version verwendet werden.


Vorsicht bei Versionsunterschieden

Backup- und Restore-Verfahren können sich zwischen Immich-Versionen ändern.

Die offizielle Dokumentation weist ausdrücklich darauf hin, dass sich das Verfahren mit Immich v2.5.0 geändert hat.

Bei älteren Backups sollte daher die Dokumentationsversion ausgewählt werden, die zur Version des Backups passt.

Das ist für Disaster Recovery äußerst wichtig.


Restore der Mediendateien

Neben PostgreSQL müssen auch die eigentlichen Dateien wiederhergestellt werden.

Beispielsweise:

rsync -aHAX \
/mnt/backup/immich/library/ \
/srv/immich/library/

Danach sollten:

Besitzer
Gruppen
Berechtigungen
Pfad

zur ursprünglichen Installation passen.

Insbesondere:

UPLOAD_LOCATION

muss wieder korrekt gesetzt sein.


External Libraries separat betrachten

Wer externe Bibliotheken nutzt, muss auch diese in die Backup-Planung aufnehmen.

Beispielsweise:

NAS
└── /Fotos

Wenn dieses Archiv nur extern eingebunden wird, befindet es sich möglicherweise gar nicht im Immich-UPLOAD_LOCATION.

Dann benötigt es eine eigene Sicherungsstrategie.


Read-Only bedeutet nicht Backup

Auch eine schreibgeschützt eingebundene NAS-Bibliothek kann durch:

  • Hardwaredefekt
  • Dateisystemfehler
  • NAS-Ausfall
  • Brand

verloren gehen.

Read-Only schützt lediglich vor bestimmten unbeabsichtigten Änderungen durch den Immich-Container.

Es ersetzt keine Datensicherung.


Disaster-Recovery-Szenario

Nehmen wir einen Worst Case an:

Immich-Server komplett ausgefallen
SSD defekt
Betriebssystem verloren
Docker nicht mehr vorhanden

Vorhanden sind lediglich:

Docker Compose Backup
.env Backup
PostgreSQL Dump
Foto-Backup

Damit lässt sich die Installation grundsätzlich rekonstruieren.


Disaster Recovery Schritt für Schritt

Ein möglicher Ablauf:

Schritt 1 – Neues System installieren

Beispielsweise:

Debian 13

installieren.


Schritt 2 – Docker installieren

Docker Engine und das Docker Compose Plugin installieren.


Schritt 3 – Konfiguration wiederherstellen

Zurückkopieren:

docker-compose.yml
.env

Schritt 4 – Speicherpfade erstellen

Beispielsweise:

/srv/immich/library
/srv/immich/postgres

Schritt 5 – Mediendateien wiederherstellen

Foto- und Videobackup zurückspielen.


Schritt 6 – PostgreSQL wiederherstellen

Datenbankdump importieren.


Schritt 7 – Container starten

docker compose up -d

Schritt 8 – Installation prüfen

Kontrollieren:

  • Anmeldung
  • Benutzer
  • Timeline
  • Alben
  • Freigaben
  • Fotos
  • Videos
  • Suchfunktionen

Schritt 9 – Hintergrundjobs prüfen

Gegebenenfalls müssen:

  • Thumbnails
  • Smart Search
  • Machine Learning
  • Video-Transcoding

erneut verarbeitet werden.


Recovery Time Objective

Bei professionelleren Installationen sollte außerdem über das sogenannte:

RTO – Recovery Time Objective

nachgedacht werden.

Es beantwortet die Frage:

Wie lange darf Immich im Katastrophenfall ausfallen?

Für eine private Fotoplattform könnten beispielsweise:

24 Stunden

vertretbar sein.


Recovery Point Objective

Das:

RPO – Recovery Point Objective

beantwortet dagegen:

Wie viele Daten dürfen maximal verloren gehen?

Bei einem täglichen Backup:

maximal etwa 24 Stunden

Bei stündlichen Snapshots:

maximal etwa 1 Stunde

Diese Überlegungen helfen bei der Festlegung des Backup-Zeitplans.


Ein robustes Backup-Konzept

Für einen privaten Immich-Server könnte folgende Strategie sehr gut funktionieren:

PostgreSQL
│
├── automatisches Immich-Backup täglich
└── zusätzlicher pg_dump täglich

Originalmedien
│
└── Borg/Restic täglich

Dateisystem
│
└── Snapshots mehrmals täglich

Konfiguration
│
├── docker-compose.yml
└── .env

Backup-Ziele
│
├── lokales NAS
└── verschlüsseltes Offsite-Backup

Beispiel-Zeitplan

Eine mögliche Planung:

02:00  Immich Datenbank-Backup

02:30  Datei-Backup auf NAS

03:30  Offsite-Backup

stündlich
       Dateisystem-Snapshot

Sonntag
       längere Wochen-Retention

Monatsanfang
       Monatsbackup

Für sehr wichtige Sammlungen kann der Zeitplan natürlich deutlich enger gestaltet werden.


Vor einem Immich-Update

Vor größeren Updates sollte zusätzlich ein manuelles Backup durchgeführt werden.

Empfohlen:

1. Datenbank-Backup erzeugen
2. Medien-Backup prüfen
3. docker-compose.yml sichern
4. .env sichern
5. Immich aktualisieren

Damit existiert bei einem unerwarteten Problem ein definierter Rückweg.


Backup überwachen

Ein Backup-Skript, das jede Nacht läuft, ist nur dann hilfreich, wenn wir erfahren, wenn es plötzlich nicht mehr funktioniert.

Deshalb sollten Backups überwacht werden.

Interessant sind beispielsweise:

  • Exit-Code
  • Backup-Größe
  • Laufzeit
  • freier Speicherplatz
  • letztes erfolgreiches Backup
  • Fehlerprotokoll

Beispiel für eine einfache Kontrolle

Nach einem Backup könnte beispielsweise geprüft werden:

ls -lh /backup/immich/

oder automatisiert:

Backup erfolgreich:
2026-09-06 02:42

Ein Monitoring-System kann bei Fehlern zusätzlich eine E-Mail oder Push-Nachricht senden.


Backup gegen Ransomware schützen

Ein ständig beschreibbares NAS kann im schlimmsten Fall ebenfalls von Schadsoftware verschlüsselt werden.

Dagegen helfen beispielsweise:

immutable Snapshots
Read-Only Snapshots
Offline Backups
Object Lock
getrennte Zugangsdaten
Offsite-Sicherung

Eine zusätzliche externe Festplatte, die nur während des Backups angeschlossen wird, kann ebenfalls eine einfache Schutzebene darstellen.


Verschlüsselungsschlüssel sichern

Bei verschlüsselten Backups entsteht ein weiterer kritischer Punkt:

Backup vorhanden
+
Schlüssel verloren
=
Backup unbrauchbar

Der Wiederherstellungsschlüssel sollte deshalb separat und sicher dokumentiert werden.

Beispielsweise:

  • Passwortmanager
  • Offline-Kopie
  • verschlüsselter Tresor
  • physisch sicherer Ort

Dokumentation gehört zum Disaster Recovery

Im Ernstfall sollte niemand erst rekonstruieren müssen:

Wo liegt UPLOAD_LOCATION?
Welcher DB-Name wurde verwendet?
Welche Docker-Version?
Welche Domains?
Welcher Reverse Proxy?
Welche Mountpoints?
Wo ist das Offsite-Backup?

Eine kleine Disaster-Recovery-Dokumentation spart enorm viel Zeit.


Beispiel einer DR-Dokumentation

Immich Server:
photosrv01

URL:
https://fotos.example.de

UPLOAD_LOCATION:
/srv/immich/library

DB_DATA_LOCATION:
/srv/immich/postgres

Lokales Backup:
/mnt/backup/immich

Offsite:
Remote Backup Server

Backup:
täglich 02:00 Uhr

Retention:
14 täglich
8 wöchentlich
12 monatlich

Zugangsdaten sollten dabei selbstverständlich nicht unverschlüsselt in einem frei zugänglichen Dokument gespeichert werden.


Was sollte unbedingt getestet werden?

Ein vollständiger Restore-Test sollte mindestens kontrollieren:

Login funktioniert
Benutzer vorhanden
Fotos sichtbar
Videos abspielbar
Alben vorhanden
Freigaben vorhanden
EXIF-Daten vorhanden
Timeline korrekt
externe Bibliotheken erreichbar
Smart Search funktioniert
Gesichtserkennung vorhanden

Damit lässt sich wesentlich besser beurteilen, ob eine Wiederherstellung tatsächlich erfolgreich war.


Die ideale Reihenfolge

Zusammengefasst:

                IMMICH BACKUP
                     │
          ┌──────────┴──────────┐
          │                     │
          ▼                     ▼
     PostgreSQL             Mediendaten
          │                     │
          └──────────┬──────────┘
                     │
                     ▼
                Konfiguration
                     │
                     ▼
              lokales Backup
                     │
                     ▼
              Offsite Backup
                     │
                     ▼
              Restore testen

Erst der letzte Schritt macht aus einer Backup-Datei eine belastbare Backup-Strategie.


Best Practices

Für eine sichere Immich-Installation empfehle ich folgende Grundregeln:

Originalmedien und PostgreSQL immer gemeinsam sichern.

Automatische Immich-Datenbank-Backups aktivieren.

Zusätzlich regelmäßig einen externen Backup-Lauf durchführen.

Docker-Konfiguration und .env sichern.

PostgreSQL nicht auf SMB oder NFS betreiben.

Snapshots als zusätzliche Schutzschicht einsetzen.

Mindestens eine Offsite-Kopie vorhalten.

Offsite-Backups verschlüsseln.

Alte Backup-Versionen aufbewahren.

Backup-Fehler überwachen.

Vor Updates zusätzliche Sicherung erzeugen.

Restore regelmäßig testen.


Bei Immich besteht ein vollständiges Backup nicht einfach aus einem kopierten Fotoordner.

Die eigentlichen Originalbilder und Videos sind zwar die wichtigsten Daten, doch ohne PostgreSQL fehlen zentrale Informationen über Benutzer, Alben, Freigaben, Assets und weitere Teile der Immich-Struktur.

Umgekehrt ist ein perfektes PostgreSQL-Backup nutzlos, wenn die darin referenzierten Originaldateien verloren gegangen sind.

Eine belastbare Immich-Sicherung besteht deshalb aus mindestens:

Originalmedien
+
PostgreSQL-Datenbank
+
Konfiguration

Snapshots ergänzen diese Strategie um schnelle Wiederherstellungspunkte, während ein zusätzliches Offsite-Backup vor Hardwaredefekten, Feuer, Diebstahl oder anderen Katastrophen schützt.

Mit einer konsequenten 3-2-1-Strategie lässt sich Immich damit genauso zuverlässig betreiben wie andere professionelle Datendienste.

Der entscheidende Punkt lautet jedoch:

Ein Backup ist erst dann ein echtes Backup, wenn die Wiederherstellung erfolgreich getestet wurde.

Wer seine Immich-Installation regelmäßig sichert, Backups außerhalb des Servers aufbewahrt und gelegentlich einen vollständigen Restore durchspielt, schützt damit nicht nur ein paar Dateien – sondern möglicherweise Jahrzehnte persönlicher Erinnerungen.

Im nächsten Teil unserer Serie beschäftigen wir uns mit der Performance von Immich. Wir zeigen, wie PostgreSQL, SSDs, RAM, CPU, GPU, Machine Learning, Netzwerk und Hintergrundjobs optimiert werden können, damit auch sehr große Fotoarchive flüssig bleiben.