ITSkillsCenter
Développement Web

Backups automatiques Immich avec Restic vers MinIO et Backblaze B2 (2026)

5 min de lecture

📍 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 : .env de 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

Besoin d'un site web ?

Confiez-nous la Création de Votre Site Web

Site vitrine, e-commerce ou application web — nous transformons votre vision en réalité digitale. Accompagnement personnalisé de A à Z.

À partir de 250.000 FCFA
Parlons de Votre Projet
Publicité