📍 Article principal du cluster : Immich 2026 : guide complet.
Une bibliothèque de 30 000 photos familiales sans sauvegarde testée est une bombe à retardement. Ce tutoriel détaille la procédure complète pour sauvegarder Immich (base Postgres + fichiers physiques + métadonnées) selon la règle 3-2-1, avec restic pour la déduplication et le chiffrement, vers Backblaze B2 (offsite) et MinIO (local). Méthode validée chez plusieurs photographes professionnels et familles à Casablanca, Dakar, et Tunis.
Prérequis
- Immich en production avec données réelles.
- Compte Backblaze B2 + bucket privé.
- Optionnel : MinIO sur second VPS pour double sauvegarde.
- Niveau attendu : intermédiaire (cron, bash, restic).
- Temps estimé : 1 heure setup + 30 minutes test mensuel.
Étape 1 — Stratégie 3-2-1 appliquée à Immich
3 copies : production (Hetzner Storage Box) + sauvegarde MinIO local + sauvegarde Backblaze B2 offsite. 2 supports : NFS Storage Box + S3 distant. 1 hors-site : Backblaze EU Central. Cette règle protège contre : panne disque (rare avec Hetzner), suppression accidentelle, ransomware, désastre datacenter, erreur humaine admin.
Étape 2 — Identifier les éléments à sauvegarder
- Base Postgres (métadonnées, albums, utilisateurs, mots de passe hashés).
- Fichiers physiques sur
/mnt/photos/immich-upload. - Configuration :
.envde Coolify, certificats Let’s Encrypt. - Modèles ML personnalisés (si vous avez entraîné des reconnaissances faciales spécifiques).
Étape 3 — Installer restic et rclone
apt install -y restic rclone
restic version # 0.17.x ou supérieur
rclone version # 1.66 ou supérieur
Étape 4 — Configurer le repository restic Backblaze
export RESTIC_REPOSITORY="s3:s3.eu-central-003.backblazeb2.com/immich-backups-prod"
export AWS_ACCESS_KEY_ID="votre-keyID-B2"
export AWS_SECRET_ACCESS_KEY="votre-applicationKey-B2"
export RESTIC_PASSWORD="passphrase-très-très-forte-pour-restic"
restic init
Stocker la RESTIC_PASSWORD dans Vaultwarden + sur papier dans un coffre + sur YubiKey. Trois copies physiques minimum.
Étape 5 — Script de sauvegarde Postgres
Fichier /srv/scripts/immich-backup-db.sh :
#!/bin/bash
set -euo pipefail
TS=\$(date +%Y%m%d-%H%M%S)
TMP=/tmp/immich-pg-\$TS
# Dump Postgres consistent
docker exec immich-postgres pg_dump -U immich -d immich -F c -f /tmp/immich-\$TS.dump
docker cp immich-postgres:/tmp/immich-\$TS.dump \$TMP.dump
docker exec immich-postgres rm /tmp/immich-\$TS.dump
# Restic
export RESTIC_REPOSITORY="s3:s3.eu-central-003.backblazeb2.com/immich-backups-prod"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
export AWS_ACCESS_KEY_ID="votre-keyID"
export AWS_SECRET_ACCESS_KEY="votre-applicationKey"
restic backup \$TMP.dump --tag immich-db --tag prod
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
rm -f \$TMP.dump
# Notification
curl -s "https://ntfy.sh/votre-topic" -d "Immich DB backup OK \$TS"
Étape 6 — Script de sauvegarde fichiers
Fichier /srv/scripts/immich-backup-files.sh :
#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="s3:s3.eu-central-003.backblazeb2.com/immich-backups-prod"
export RESTIC_PASSWORD_FILE="/root/.restic-password"
export AWS_ACCESS_KEY_ID="votre-keyID"
export AWS_SECRET_ACCESS_KEY="votre-applicationKey"
# Backup incrémental fichiers
restic backup /mnt/photos/immich-upload \
--tag immich-files --tag prod \
--exclude "*/encoded-video/*" \
--exclude "*/thumbs/*"
# Forget retention
restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 24 --prune
curl -s "https://ntfy.sh/votre-topic" -d "Immich files backup OK"
Note : on exclut les vignettes et vidéos transcodées (regénérables depuis l’original). Économie 30-40% du volume.
Étape 7 — Planifier les sauvegardes
chmod +x /srv/scripts/immich-backup-*.sh
crontab -e
# DB toutes les 6h
0 */6 * * * /srv/scripts/immich-backup-db.sh >> /var/log/immich-backup.log 2>&1
# Fichiers toutes les 12h
0 4,16 * * * /srv/scripts/immich-backup-files.sh >> /var/log/immich-backup.log 2>&1
# Vérification hebdomadaire intégrité
0 5 * * 0 restic check --read-data-subset=10% >> /var/log/immich-backup.log 2>&1
Étape 8 — Test de restauration mensuel
Le test n’est pas optionnel. Procédure mensuelle sur VPS staging :
# Liste snapshots
restic snapshots --tag immich-db | tail -5
# Restaurer le dernier
restic restore latest --tag immich-db --target /tmp/restore
# Vérifier le dump
ls -la /tmp/restore/tmp/immich-*.dump
# Restaurer dans un Postgres test
docker run -d --name pg-test postgres:16
sleep 10
docker cp /tmp/restore/tmp/immich-*.dump pg-test:/tmp/
docker exec pg-test pg_restore -U postgres -d postgres /tmp/immich-*.dump
# Compter les assets
docker exec pg-test psql -U postgres -c "SELECT COUNT(*) FROM assets;"
# Doit correspondre à la prod ± quelques heures
Étape 9 — Documentation et runbook
Créer un wiki interne avec : URLs des buckets, IDs des keys (chiffrés), passphrases (référence Vaultwarden), date du dernier test, procédure d’urgence si Immich est down. Sans runbook, en cas de panique, vous oubliez les étapes.
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
| Restic password perdu | Stockage unique | 3 copies indépendantes obligatoire |
| Backup interrompu | Disque plein temporaire | Vérifier df avant chaque run |
| Latence upload élevée | Bande passante saturée jour | Planifier 2h-5h heure locale |
| Test restauration jamais fait | Procrastination | Cron mensuel avec alerte si pas exécuté |
| Bucket B2 saturé | Forget non lancé | Vérifier restic forget --prune |
| Doublons gigaoctets | Sauvegardes hors restic | Tout consolider dans le même repo restic |
Adaptation au contexte ouest-africain
Trois précisions. Coût Backblaze B2 : pour 200 Go (15 000-30 000 photos), compter 1,20 USD/mois. Pour 1 To, 6 USD/mois. Marginal face à Google One. Egress gratuit Cloudflare : Backblaze + Cloudflare Bandwidth Alliance permet de restaurer sans frais, important si une famille au Mali doit récupérer 50 Go en urgence après perte de serveur. Test sur infrastructure locale : effectuer le test mensuel de restauration sur un Raspberry Pi 5 chez l’admin permet de valider que la procédure marche même hors infrastructure principale.
Tutoriels frères
FAQ
Pourquoi Backblaze plutôt qu’AWS S3 ? Coût (6 USD/To vs 23 USD), egress gratuit via Cloudflare, simplicité. AWS S3 reste meilleur pour intégrations enterprise.
Restic vs Borgbackup vs Duplicati ? Restic gagne sur S3 native + déduplication + multi-OS. Borg meilleur sur SSH local, Duplicati GUI mais moins fiable.
Que faire si le serveur Immich crash totalement ? Réinstaller Immich propre, restore Postgres + restore fichiers depuis restic. Comptez 4-8 heures pour 100 Go. Documenter la procédure.
Comment vérifier l’intégrité régulièrement ? restic check --read-data-subset=10% hebdomadaire, full restic check --read-data trimestriel.
Backups chiffrés résistent-ils au quantum computing ? Restic utilise AES-256, considéré quantum-resistant pour la décennie 2026-2035 selon NIST.
Pour aller plus loin
- 🔝 Retour au pilier : Guide complet Immich 2026
- Documentation Restic : restic.readthedocs.io