Backup und Wiederherstellung
Eine 3-2-1 Backup-Strategie wird empfohlen, um Ihre Daten zu schützen. Sie sollten Kopien Ihrer hochgeladenen Fotos/Videos sowie der Immich-Datenbank aufbewahren, um eine umfassende Backup-Lösung zu gewährleisten. Diese Seite bietet einen Überblick darüber, wie Sie die Datenbank sichern und wo sich die von Benutzern hochgeladenen Bilder und Videos befinden. Ein Beispiel-Bash-Skript, das als Cron-Job ausgeführt werden kann, finden Sie hier.
Die Anweisungen auf dieser Seite zeigen Ihnen, wie Sie Ihre Immich-Instanz für ein Backup vorbereiten und welche Dateien gesichert werden sollten. Sie müssen jedoch selbst ein Backup-Tool verwenden, um tatsächlich ein Backup zu erstellen.
Datenbank
Immich speichert Dateipfade in der Datenbank. Es scannt den Bibliotheksordner nicht, um die Datenbank zu aktualisieren, daher sind Backups entscheidend.
Siehe die offizielle Postgres-Dokumentation für Details zum Sichern und Wiederherstellen einer Postgres-Datenbank.
Es ist nicht empfehlenswert, direkt den Ordner DB_DATA_LOCATION
zu sichern. Das Ausführen einer Sicherung, während die Datenbank läuft, kann zu einem beschädigten Backup führen, das nicht wiederhergestellt werden kann.
Automatische Datenbank-Dumps
Die automatischen Datenbank-Dumps können verwendet werden, um die Datenbank im Falle von Beschädigungen der Postgres-Datenbankdateien wiederherzustellen. Es gibt keine Überwachung dieser Dumps, und Sie werden nicht benachrichtigt, falls sie fehlschlagen.
Die Datenbank-Dumps enthalten KEINE Bilder oder Videos, sondern nur Metadaten. Sie sind nur mit einer Kopie der anderen Dateien im UPLOAD_LOCATION
verwendbar, wie unten beschrieben.
Für Disaster-Recovery-Zwecke erstellt Immich automatisch Datenbank-Dumps. Die Dumps werden in UPLOAD_LOCATION/backups
gespeichert.
Stellen Sie sicher, dass Sie Ihre eigene, unabhängige Sicherung der Datenbank zusammen mit den Asset-Ordnern wie unten angegeben durchführen.
Sie können den Zeitplan und die Anzahl der aufgehobenen Datenbank-Dumps in den Admin-Einstellungen anpassen.
Standardmäßig behält Immich die letzten 14 Datenbank-Dumps und erstellt jeden Tag um 2:00 Uhr morgens einen neuen Dump.
Dump auslösen
Sie können einen Datenbank-Dump auf der Admin-Jobstatus-Seite auslösen.
Besuchen Sie die Seite, öffnen Sie das "Job erstellen"-Modal oben rechts, wählen Sie "Datenbank-Dump erstellen" aus und klicken Sie auf "Bestätigen".
Ein Job wird ausgeführt und einen Dump auslösen. Sie können überprüfen, ob dies korrekt funktioniert hat, indem Sie die Logs oder den Ordner backups/
überprüfen.
Diese Dumps werden zu den letzten X
Dumps gezählt, die basierend auf Ihren Einstellungen aufbewahrt werden.
Wiederherstellung
Wir hoffen, die Wiederherstellung in zukünftigen Versionen einfacher zu gestalten. Derzeit finden Sie die Datenbank-Dumps im Ordner UPLOAD_LOCATION/backups
auf Ihrem Host.
Bitte folgen Sie dann den Schritten im folgenden Abschnitt, um die Datenbank wiederherzustellen.
Manuelles Backup und Wiederherstellen
- Linux-System
- Windows-System (PowerShell)
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | gzip > "/path/to/backup/dump.sql.gz"
docker compose down -v # VORSICHT! Löscht alle Immich-Daten, um von Grund auf neu zu starten
## Kommentieren Sie die nächste Zeile aus und ersetzen Sie DB_DATA_LOCATION durch Ihren Postgres-Pfad, um die Datenbank dauerhaft zurückzusetzen
# rm -rf DB_DATA_LOCATION # VORSICHT! Löscht alle Immich-Daten, um von Grund auf neu zu starten
docker compose pull # Aktualisieren Sie auf die neueste Version von Immich (falls gewünscht)
docker compose create # Erstellen Sie Docker-Container für Immich-Apps ohne diese auszuführen
docker start immich_postgres # Starten Sie den Postgres-Server
sleep 10 # Warten Sie, bis der Postgres-Server gestartet ist
# Überprüfen Sie den Datenbankbenutzer, falls Sie von der Standardeinstellung abgewichen sind
gunzip --stdout "/path/to/backup/dump.sql.gz" \
| sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" \
| docker exec -i immich_postgres psql --dbname=postgres --username=<DB_USERNAME> # Backup wiederherstellen
docker compose up -d # Starten Sie den Rest der Immich-Apps
[System.IO.File]::WriteAllLines("C:\absolute\path\to\backup\dump.sql", (docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME>))
docker compose down -v # VORSICHT! Löscht alle Immich-Daten, um von Grund auf neu zu starten
## Kommentieren Sie die nächste Zeile aus und ersetzen Sie DB_DATA_LOCATION durch Ihren Postgres-Pfad, um die Datenbank dauerhaft zurückzusetzen
# Remove-Item -Recurse -Force DB_DATA_LOCATION # VORSICHT! Löscht alle Immich-Daten, um von Grund auf neu zu starten
## Sie sollten das Backup (als Volume, Beispiel: `- 'C:\path\to\backup\dump.sql:/dump.sql'`) in den immich_postgres-Container mit docker-compose.yml einbinden
docker compose pull # Aktualisieren Sie auf die neueste Version von Immich (falls gewünscht)
docker compose create # Erstellen Sie Docker-Container für Immich-Apps ohne diese auszuführen
docker start immich_postgres # Starten Sie den Postgres-Server
sleep 10 # Warten Sie, bis der Postgres-Server gestartet ist
docker exec -it immich_postgres bash # Betreten Sie die Docker-Shell und führen Sie den folgenden Befehl aus
# Überprüfen Sie den Datenbankbenutzer, falls Sie von der Standardeinstellung abgewichen sind. Wenn Ihr Backup mit `.gz` endet, ersetzen Sie `cat` durch `gunzip --stdout`
cat "/dump.sql" | sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" | psql --dbname=postgres --username=<DB_USERNAME>
exit # Verlassen Sie die Docker-Shell
docker compose up -d # Starten Sie den Rest der Immich-Apps
Bitte beachten Sie, dass für die Datenbankwiederherstellung eine vollständig neue Installation erforderlich ist (d.h. der Immich-Server muss noch nie seit der Erstellung der Docker-Container ausgeführt worden sein). Wenn die Immich-App ausgeführt wurde, können Konflikte in Postgres bei der Datenbankwiederherstellung auftreten (Relation existiert bereits, verletzte Fremdschlüsselbeschränkungen, mehrere Primärschlüssel usw.), wobei Sie den Ordner DB_DATA_LOCATION
löschen müssen, um die Datenbank zurückzusetzen.
Einige Bereitstellungsmethoden machen es schwierig, die Datenbank zu starten, ohne auch den Server zu starten. In solchen Fällen können Sie die Umgebungsvariable DB_SKIP_MIGRATIONS=true
setzen, bevor Sie die Dienste starten. Dadurch wird verhindert, dass der Server Migrationen ausführt, die den Wiederherstellungsprozess stören. Stellen Sie sicher, dass Sie diese Variable entfernen und die Dienste nach der Wiederherstellung der Datenbank neu starten.
Dateisystem
Immich speichert zwei Arten von Inhalten im Dateisystem: (a) Original, unveränderte Assets (Fotos und Videos) und (b) generierte Inhalte. Wir empfehlen, den gesamten Inhalt von UPLOAD_LOCATION
zu sichern, aber nur die Originalinhalte sind entscheidend, die in den folgenden Ordnern gespeichert sind:
UPLOAD_LOCATION/library
UPLOAD_LOCATION/upload
UPLOAD_LOCATION/profile
Wenn Sie sich entscheiden, nur diese Ordner zu sichern, müssen Sie die Transcodierungs- und Thumbnail-Generierungsjobs für alle Assets neu ausführen, nachdem Sie von einem Backup wiederhergestellt haben.
Wenn Sie einige dieser Ordner auf ein anderes Speichermedium verschoben haben, wie z.B. profile/
, stellen Sie sicher, dass der Sicherungspfad an Ihre Konfiguration angepasst wird.
Asset-Typen und Speicherorte
Einige Speicherorte werden durch die Speicherungsvorlage beeinflusst. Siehe unten für weitere Details.
- Speicherungsvorlage Aus (Standard).
- Speicherungsvorlage Aktiviert
Der Ordner UPLOAD_LOCATION/library
wird standardmäßig nicht auf neuen Maschinen mit Version 1.92.0 verwendet. Er wird nur verwendet, wenn der Systemadministrator die Speicherverwaltungsvorlage aktiviert hat.
Weitere Informationen finden Sie in den Release Notes.
1. Benutzerdefinierte Ordner:
- Jeder Benutzer hat eine eindeutige Zeichenfolge, die ihn darstellt.
- Sie können Ihre Benutzer-ID über Konto-Einstellungen -> Konto -> Benutzer-ID finden.
2. Asset-Typen und Speicherorte:
-
Quell-Assets:
- Original-Assets, die über die Browser-Oberfläche, mobil & CLI hochgeladen wurden.
- Gespeichert in
UPLOAD_LOCATION/upload/<userID>
.
-
Avatar-Bilder:
- Benutzerprofilbilder.
- Gespeichert in
UPLOAD_LOCATION/profile/<userID>
.
-
Thumbs-Bilder:
- Vorschau-Bilder (kleine Thumbnails und große Previews) für jedes Asset und Thumbnails für erkannte Gesichter.
- Gespeichert in
UPLOAD_LOCATION/thumbs/<userID>
.
-
Kodierte Assets:
- Videos, die aus dem Original für eine breitere Kompatibilität neu kodiert wurden. Das Original wird nicht entfernt.
- Gespeichert in
UPLOAD_LOCATION/encoded-video/<userID>
.
-
Postgres
- Die Immich-Datenbank enthält alle Informationen, damit das System ordnungsgemäß funktioniert. Hinweis: Dieser Ordner wird nur Benutzern angezeigt, die die in v1.102.0 erwähnten Änderungen vorgenommen haben (eine optionale, nicht obligatorische Änderung) oder diese Version gestartet haben.
- Gespeichert in
DB_DATA_LOCATION
.
Eine Sicherung dieses Ordners stellt kein vollständiges Backup Ihrer Datenbank dar! Folgen Sie den hier aufgeführten Anweisungen, um ein ordnungsgemäßes Backup durchzuführen.
Wenn Sie die Speicherverwaltungsvorlage aktivieren, werden alle Assets nach UPLOAD_LOCATION/library/<userID>
verschoben.
Wenn Sie die Speicherverwaltungsvorlage deaktivieren, bleiben die Assets in UPLOAD_LOCATION/library/<userID>
und werden nicht nach UPLOAD_LOCATION/upload
zurückgezogen.
Neue Assets werden in UPLOAD_LOCATION/upload
gespeichert.
1. Benutzerdefinierte Ordner:
- Jeder Benutzer hat eine eindeutige Zeichenfolge, die ihn darstellt.
- Der Administrator kann einem Benutzer ein Speicheretikett zuweisen, das anstelle von
<userID>
für den Ordnerlibrary/
verwendet wird. - Der Administrator hat standardmäßig das Speicheretikett
admin
.
- Der Administrator kann einem Benutzer ein Speicheretikett zuweisen, das anstelle von
- Sie können Ihre Benutzer-ID und das Speicheretikett unter Konto-Einstellungen -> Konto -> Benutzer-ID finden.
2. Asset-Typen und Speicherorte:
-
Quell-Assets:
- Ursprüngliche Assets, die über die Browser-Oberfläche, Mobile Apps und CLI hochgeladen wurden.
- Gespeichert in
UPLOAD_LOCATION/library/<userID>
.
-
Avatar-Bilder:
- Benutzerprofilbilder.
- Gespeichert in
UPLOAD_LOCATION/profile/<userID>
.
-
Thumbs-Bilder:
- Vorschau-Bilder (unscharf, klein, groß) für jedes Asset und Miniaturansichten für erkannte Gesichter.
- Gespeichert in
UPLOAD_LOCATION/thumbs/<userID>
.
-
Kodierte Assets:
- Videos, die aus dem Original neu kodiert wurden, um breitere Kompatibilität zu gewährleisten. Das Original bleibt erhalten.
- Gespeichert in
UPLOAD_LOCATION/encoded-video/<userID>
.
-
Dateien in der Upload-Warteschleife (Mobile):
- Dateien, die über mobile Apps hochgeladen wurden.
- Vorübergehend gespeichert in
UPLOAD_LOCATION/upload/<userID>
. - Nach erfolgreichem Hochladen in
UPLOAD_LOCATION/library/<userID>
übertragen.
-
Postgres
- Die Immich-Datenbank, die alle Informationen enthält, damit das System ordnungsgemäß funktioniert. Hinweis: Dieser Ordner erscheint nur für Benutzer, die die in v1.102.0 genannten Änderungen vorgenommen haben (eine optionale, nicht zwingende Änderung) oder die mit dieser Version begonnen haben.
- Gespeichert in
DB_DATA_LOCATION
.
Eine Sicherung dieses Ordners stellt keine Sicherung Ihrer Datenbank dar! Folgen Sie den Anweisungen hier, um zu lernen, wie Sie eine ordnungsgemäße Sicherung durchführen.
Berühren Sie die Dateien in diesen Ordnern unter keinen Umständen, außer wenn Sie eine Sicherung durchführen. Das Ändern oder Entfernen eines Assets kann zu nicht nachverfolgten und fehlenden Dateien führen. Sie können es sich wie eine App vorstellen, die nicht genannt werden soll; der einzige Zugriff auf Ansicht, Änderung und Löschung von Assets erfolgt ausschließlich über die Mobile- oder Browser-Oberfläche.
Sicherungsreihenfolge
Eine Sicherung von Immich sollte sowohl die Datenbank als auch die Asset-Dateien enthalten. Wenn diese gesichert werden, können sie möglicherweise nicht mehr synchron sein, was dazu führen kann, dass Assets nach der Wiederherstellung beschädigt sind. Der beste Weg, damit umzugehen, ist das Anhalten des immich-server Containers, während Sie eine Sicherung durchführen. Wenn sich nichts ändert, wird die Sicherung immer synchron sein.
Wenn das Anhalten des Containers keine Option ist, wird empfohlen, zuerst die Datenbank zu sichern und danach das Dateisystem. Auf diese Weise besteht das schlimmste Szenario darin, dass es Dateien im Dateisystem gibt, die der Datenbank nicht bekannt sind. Falls erforderlich, können diese nach einer Wiederherstellung manuell (erneut) hochgeladen werden. Wenn die Sicherung in umgekehrter Reihenfolge durchgeführt wird, also zuerst das Dateisystem und dann die Datenbank, könnte die wiederhergestellte Datenbank auf Dateien verweisen, die nicht in der Dateisystem-Sicherung enthalten sind, was zu beschädigten Assets führt.