Script de sauvegarde
Borg est un logiciel d'archivage riche en fonctionnalités avec déduplication intégrée et gestion des versions. Nous proposons un script bash modèle qui peut être exécuté quotidiennement/hebdomadairement en tant que tâche cron pour sauvegarder vos fichiers et votre base de données. Nous vous encourageons à lire le guide de démarrage rapide de Borg avant d'exécuter ce script.
Ce script suppose que vous avez un second disque dur connecté à votre serveur pour des sauvegardes locales et un accès SSH à une machine distante pour votre troisième copie hors site. BorgBase est une option alternative pour des sauvegardes hors site avec une structure de prix compétitive. Vous pouvez choisir de ne pas effectuer de sauvegardes hors site en supprimant les lignes correspondantes du script modèle.
La base de données est enregistrée dans votre dossier de téléchargement Immich dans le sous-répertoire database-backup
. La base de données est ensuite sauvegardée et versionnée avec vos fichiers par Borg. Cela garantit que la sauvegarde de la base de données est synchronisée avec vos fichiers dans chaque instantané.
Ce script effectue des sauvegardes de votre base de données ainsi que de votre bibliothèque de photos/vidéos. Cela est redondant avec l'outil automatique de sauvegarde de base de données intégré à Immich. Utiliser ce script pour sauvegarder votre base de données présente deux avantages par rapport à l'outil de sauvegarde intégré :
- Ce script utilise le stockage plus efficacement en versionnant vos sauvegardes au lieu de créer plusieurs copies.
- Les sauvegardes de la base de données sont effectuées en même temps que la sauvegarde de la bibliothèque, garantissant que les sauvegardes de votre base de données et de la bibliothèque sont toujours synchronisées.
Si vous utilisez ce script, il est donc sûr de désactiver les sauvegardes de base de données automatiques intégrées depuis votre panneau d'administration pour économiser de l'espace de stockage.
Prérequis
- Borg doit être installé sur votre serveur ainsi que sur la machine distante. Vous trouverez les instructions pour installer Borg ici.
- (Optionnel) Pour exécuter ce script en tant qu'utilisateur non-root, vous devez ajouter votre nom d'utilisateur au groupe docker.
- Pour exécuter ce script de manière non interactive, configurez un accès SSH sans mot de passe à votre machine distante depuis votre serveur. Si vous avez sauté l'étape précédente, assurez-vous que cette étape est effectuée depuis votre compte root.
Pour initialiser le dépôt borg, exécutez les commandes suivantes une seule fois.
UPLOAD_LOCATION="/path/to/immich/directory" # Emplacement de la base de données Immich, tel que défini dans votre fichier .env
BACKUP_PATH="/path/to/local/backup/directory"
mkdir "$UPLOAD_LOCATION/database-backup"
borg init --encryption=none "$BACKUP_PATH/immich-borg"
## Configuration distante
REMOTE_HOST="remote_host@IP"
REMOTE_BACKUP_PATH="/path/to/remote/backup/directory"
borg init --encryption=none "$REMOTE_HOST:$REMOTE_BACKUP_PATH/immich-borg"
Modifiez le script suivant si nécessaire et ajoutez-le à votre crontab. Notez que ce script suppose qu'il n'y a pas de caractères :
, @
, ou "
dans vos chemins. Si ces caractères existent, vous devrez les échapper et/ou renommer les chemins.
#!/bin/sh
# Chemins
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"
### Local
# Sauvegarde de la base de données Immich
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=<DB_USERNAME> > "$UPLOAD_LOCATION"/database-backup/immich-database.sql
# Pour les programmes de sauvegarde avec déduplication comme Borg ou Restic, compresser le contenu peut augmenter la taille de la sauvegarde en rendant la déduplication plus difficile. Si vous utilisez un autre programme ou préférez néanmoins compresser, vous pouvez utiliser la commande suivante :
# 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
### Ajout au dépôt Borg local
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
### Ajout au dépôt Borg distant
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
Restauration
Pour restaurer à partir d'une sauvegarde, utilisez la commande borg mount
.
BACKUP_PATH="/path/to/local/backup/directory"
mkdir /tmp/immich-mountpoint
borg mount "$BACKUP_PATH"/immich-borg /tmp/immich-mountpoint
cd /tmp/immich-mountpoint
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
Vous pouvez trouver les instantanés disponibles dans des sous-répertoires distincts à /tmp/immich-mountpoint
. Restaurez les fichiers dont vous avez besoin, et démontez le dépôt Borg avec borg umount /tmp/immich-mountpoint