Zum Hauptinhalt springen

Sicherungsskript

Borg ist eine funktionsreiche Software zur deduplizierenden Archivierung mit integrierter Versionierung. Wir stellen ein Bash-Skriptvorlage bereit, die täglich/wöchentlich als Cron-Job ausgeführt werden kann, um Ihre Dateien und Datenbank zu sichern. Wir empfehlen Ihnen, vor dem Ausführen dieses Skripts die Schnellstartanleitung für Borg zu lesen.

Dieses Skript setzt voraus, dass Sie eine zweite Festplatte mit Ihrem Server für lokale Backups verbunden haben und SSH-Zugriff auf einen Remote-Rechner für Ihre dritte externe Kopie haben. BorgBase ist eine alternative Option für externe Backups mit einer wettbewerbsfähigen Preisstruktur. Sie können sich entscheiden, externe Backups vollständig zu überspringen, indem Sie die entsprechenden Zeilen aus der Skriptvorlage entfernen.

Die Datenbank wird in Ihrem Immich-Upload-Ordner im Unterverzeichnis database-backup gespeichert. Die Datenbank wird dann zusammen mit Ihren Assets von Borg gesichert und versioniert. Dies stellt sicher, dass das Datenbank-Backup in jedem Snapshot mit Ihren Assets synchron ist.

Info

Dieses Skript sichert Ihre Datenbank zusammen mit Ihrer Foto-/Video-Bibliothek. Dies ist redundant mit dem in Immich integrierten automatischen Datenbank-Backup-Tool. Die Verwendung dieses Skripts zum Sichern Ihrer Datenbank bietet zwei Vorteile gegenüber dem eingebauten Backup-Tool:

  • Dieses Skript nutzt den Speicherplatz effizienter, indem es Ihre Backups versioniert, anstatt mehrere Kopien zu erstellen.
  • Die Datenbank-Backups werden zur gleichen Zeit wie die Bibliotheks-Sicherungen durchgeführt, wodurch sichergestellt wird, dass die Backups Ihrer Datenbank und der Bibliothek immer synchron sind.

Wenn Sie dieses Skript verwenden, ist es daher sicher, die integrierten automatischen Datenbank-Backups von Ihrem Admin-Panel auszuschalten, um Speicherplatz zu sparen.

Voraussetzungen

  • Borg muss sowohl auf Ihrem Server als auch auf der Remote-Maschine installiert sein. Sie finden Anweisungen zur Installation von Borg hier.
  • (Optional) Um dieses Skript als Nicht-Root-Benutzer auszuführen, sollten Sie Ihren Benutzernamen zur Docker-Gruppe hinzufügen.
  • Um dieses Skript nicht interaktiv auszuführen, richten Sie passwortlosen SSH-Zugriff von Ihrem Server zur Remote-Maschine ein. Falls Sie den vorherigen Schritt übersprungen haben, stellen Sie sicher, dass dieser Schritt von Ihrem Root-Konto aus durchgeführt wird.

Um das Borg-Repository zu initialisieren, führen Sie die folgenden Befehle einmal aus.

Borg-Einrichtung
UPLOAD_LOCATION="/path/to/immich/directory"       # Immich-Datenbankstandort, wie in Ihrer .env-Datei festgelegt
BACKUP_PATH="/path/to/local/backup/directory"

mkdir "$UPLOAD_LOCATION/database-backup"
borg init --encryption=none "$BACKUP_PATH/immich-borg"

## Remote-Einrichtung
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"

borg init --encryption=none "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg"

Bearbeiten Sie das folgende Skript nach Bedarf und fügen Sie es zu Ihrer Crontab hinzu. Bitte beachten Sie, dass dieses Skript davon ausgeht, dass keine :, @ oder " Zeichen in Ihren Pfaden vorhanden sind. Falls diese Zeichen vorhanden sind, müssen Sie die Pfade entsprechend maskieren und/oder umbenennen.

Borg-Backup-Vorlage
#!/bin/sh

# Pfade
UPLOAD_LOCATION="/path/to/immich/directory"
BACKUP_PATH="/path/to/local/backup/directory"
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"


### Lokal

# Immich-Datenbank sichern
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# Für deduplizierende Backup-Programme wie Borg oder Restic kann eine Komprimierung der Inhalte die Backup-Größe erhöhen, da es schwieriger wird, zu deduplizieren. Wenn Sie ein anderes Programm verwenden oder dennoch komprimieren möchten, können Sie stattdessen folgenden Befehl verwenden:
# docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> | /usr/bin/gzip --rsyncable > "$UPLOAD_LOCATION"/database-backup/immich-database.sql.gz

### Lokales Borg-Repository anhängen
borg create "$BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$BACKUP_PATH"/immich-borg
borg compact "$BACKUP_PATH"/immich-borg


### Remote-Borg-Repository anhängen
borg create "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg::{now}" "$UPLOAD_LOCATION" --exclude "$UPLOAD_LOCATION"/thumbs/ --exclude "$UPLOAD_LOCATION"/encoded-video/
borg prune --keep-weekly=4 --keep-monthly=3 "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg
borg compact "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg

Wiederherstellen

Um aus einem Backup wiederherzustellen, verwenden Sie den Befehl borg mount.

Wiederherstellung aus lokalem Backup
BACKUP_PATH="/path/to/local/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
Wiederherstellung aus externem Backup
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$REMOTE_HOST:$REMOTE_BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint

Sie finden die verfügbaren Snapshots in separaten Unterverzeichnissen unter /tmp/immich-mountpoint. Stellen Sie die benötigten Dateien wieder her und hängen Sie das Borg-Repository mit borg umount /tmp/immich-mountpoint aus.