Immich : héberger et protéger ses photos et vidéos familiales

Installez Immich avec Docker Compose : iPhone, NAS, partage familial, IA locale, accès sécurisé et sauvegarde cohérente avec test de restauration.

01

Une photothèque familiale que vous pouvez récupérer

Immich regroupe photos et vidéos dans une interface Web et mobile, avec albums, recherche et partage. Héberger soi-même permet de choisir où vivent les données, mais vous devenez responsable du stockage, des accès et de la récupération. Une interface qui affiche les photos ne prouve pas que vous pourrez les restaurer.

Le scénario proposé : deux adultes, deux téléphones et une ancienne collection de photos sur NAS. Commencez avec 200 fichiers représentatifs, incluant vidéos longues, HEIC et Live Photos, avant d’importer toute la famille. Conservez les originaux pendant le pilote et mesurez les échecs plutôt que de vous fier au seul nombre de vignettes.

02

Version et licence : une base explicite

Les exemples utilisent Immich v3.3.5, une version publiée avec des correctifs de sécurité. Consultez ses notes de version avant de choisir la version de votre installation. Immich est distribué sous GNU AGPL v3; l’hébergement, le matériel et les sauvegardes restent à votre charge. Épingler une version rend le déploiement reproductible, mais ne dispense pas de suivre les correctifs.

03

Dimensionner le serveur et séparer les données

Les prérequis officiels indiquent 6 Go de RAM et deux cœurs au minimum, avec 8 Go et quatre cœurs recommandés. Les plateformes sont amd64 et arm64; depuis v3, le conteneur d’apprentissage automatique amd64 exige x86-64-v2. Une VM doit exposer les instructions nécessaires. Ces valeurs ne garantissent pas les performances d’un gros import.

Gardez PostgreSQL sur un stockage local, idéalement SSD : DB_DATA_LOCATION ne doit pas être un partage réseau. Prévoyez de l’espace supplémentaire pour les miniatures et vidéos dérivées, puis mesurez la croissance réelle.

04

Docker Compose, Unraid ou Synology?

Docker Compose est la méthode recommandée. Conservez les services et images du fichier de la version retenue : serveur Immich, apprentissage automatique, base et cache. Ne remplacez pas l’image PostgreSQL par une image générique; les extensions et versions font partie de la compatibilité.

Sur Synology, vérifiez que le modèle et DSM offrent Container Manager et satisfont CPU/RAM. Le guide Synology hébergé par Immich est communautaire, pas un engagement de support officiel. Un ancien NAS peut rester un dépôt de médias ou de sauvegardes tandis qu’un petit serveur Linux exécute l’application et sa base locale. Sur Unraid, documentez séparément les chemins des médias et de la base, ainsi que leur politique de stockage.

05

Installer un pilote avec les fichiers de la release

Changement — dans un nouveau dossier, téléchargez les fichiers de la release, jamais ceux de la branche main au hasard. Le bloc suivant crée des fichiers locaux; il ne démarre pas encore l’application. Il nécessite curl et un shell Linux. L’administration Docker donne des privilèges élevés sur l’hôte : réservez-la à l’administrateur.

Dans .env, définissez des chemins absolus dédiés pour UPLOAD_LOCATION et DB_DATA_LOCATION, TZ=America/Toronto et IMMICH_VERSION=v3.3.5. Remplacez le mot de passe PostgreSQL d’exemple par un secret aléatoire conservé dans votre gestionnaire de mots de passe; respectez les caractères acceptés par le modèle. Ne publiez jamais .env.

Bash — préparation, écrit des fichiers
# New directory / Nouveau dossier
mkdir immich-family-pilot
cd immich-family-pilot
umask 077
curl -fL -o docker-compose.yml https://github.com/immich-app/immich/releases/download/v3.3.5/docker-compose.yml
curl -fL -o .env https://github.com/immich-app/immich/releases/download/v3.3.5/example.env
chmod 600 .env
06

Valider avant le premier import

Après personnalisation, docker compose config --quiet valide la configuration sans imprimer les secrets résolus. Une validation réussie ne vérifie ni les permissions des dossiers ni la capacité disque. Examinez les ports publiés et limitez l’accès au réseau du pilote avant le démarrage.

Changement — docker compose up -d crée et démarre les conteneurs. Enregistrez immédiatement le compte administrateur depuis le réseau de confiance, puis créez un compte ordinaire pour chaque adulte. Testez l’import, le téléchargement de l’original et la lecture d’une vidéo. Pour arrêter un pilote problématique, docker compose stop conserve les données; ne supprimez pas les volumes pour résoudre un simple échec.

Bash — validation puis démarrage explicite
# Validate without printing secrets / Valider sans afficher les secrets
docker compose config --quiet
# CHANGE: run only after successful validation / CHANGEMENT
docker compose up -d
# Read-only status / État en lecture seule
docker compose ps
07

iPhone : vérifier les transferts réellement terminés

Choisissez les albums à transférer et autorisez l’accès Photos nécessaire. Activez l’actualisation en arrière-plan, mais iOS décide quand elle s’exécute : ce n’est pas une garantie de transfert immédiat. Pour le premier import, ouvrez régulièrement l’application sur un Wi-Fi stable.

Les éléments présents dans iCloud peuvent être téléchargés temporairement sur l’iPhone avant envoi, avec consommation d’espace et de données. Comparez un échantillon d’originaux côté serveur avant tout nettoyage du téléphone. La fonction de sauvegarde mobile alimente Immich; elle ne sauvegarde pas indépendamment le serveur.

08

Bibliothèque externe : garder les originaux en lecture seule

Une bibliothèque externe indexe des fichiers existants; elle appartient à un utilisateur. Ajoutez un montage en lecture seule sous volumes du service immich-server, sans remplacer les montages existants. Après recréation du conteneur, utilisez le chemin interne /mnt/family-archive dans Administration > External Libraries.

Le suffixe :ro limite les écritures sur les originaux et empêche certaines fonctions comme l’écriture de fichiers XMP. Un déplacement de fichiers suivi d’un scan peut perdre des associations conservées dans Immich. Sauvegardez aussi cette collection externe; un scan n’en crée pas une copie indépendante.

YAML — ajout sous volumes, changement de configuration
# Add to immich-server.volumes / Ajouter aux volumes existants
- /srv/family-archive:/mnt/family-archive:ro
09

Partager sans ouvrir toute la vie familiale

Utilisez des comptes nominatifs et des albums ciblés pour les proches. Le partage partenaire est unidirectionnel et peut donner accès aux métadonnées GPS et au repartage; activez-le seulement après avoir expliqué sa portée. Les doublons sont détectés par utilisateur, pas forcément entre les deux bibliothèques.

Test pratique : connectez-vous avec un deuxième compte et vérifiez ce qu’il voit, télécharge et peut repartager. Testez aussi la révocation. Un lien envoyé peut être transféré à une autre personne; sa révocation ne retire pas les copies déjà téléchargées.

10

Recherche sémantique et visages : de l’IA locale ciblée

La recherche contextuelle utilise des modèles comme CLIP et des index dans PostgreSQL. Essayez des descriptions simples, par exemple « chien dans la neige », puis comparez les résultats avec vos filtres de date ou d’album. La qualité et la langue dépendent du modèle sélectionné.

La reconnaissance faciale regroupe des visages; une personne doit encore valider les regroupements et les noms. Ces fonctions ne sont pas un assistant génératif qui comprend toutes vos archives ou exécute des tâches. Dans une installation avec apprentissage automatique local, l’inférence se fait sur votre matériel; les téléchargements de modèles et d’autres fonctions réseau restent à considérer. Protégez les métadonnées de personnes comme les photos elles-mêmes.

11

GPU : deux accélérations différentes

L’accélération de l’apprentissage automatique reste expérimentale. Les backends documentés comprennent CUDA/NVIDIA, OpenVINO/Intel, ROCm/AMD, ARM NN/Mali et RKNN/Rockchip, avec restrictions de matériel, pilotes et modèles. Une carte reconnue par l’hôte ne prouve pas son utilisation dans le conteneur.

Le transcodage vidéo utilise une configuration distincte : NVENC, Quick Sync, VAAPI ou RKMPP selon le matériel. Activer le GPU pour la recherche n’accélère pas automatiquement les vidéos. Commencez en CPU, mesurez les files d’attente, puis ajoutez une seule accélération et confirmez son utilisation dans les journaux et la télémétrie. Gardez la configuration CPU précédente pour revenir au pilote fonctionnel.

12

Sauvegarder un ensemble cohérent

Les sauvegardes de base intégrées contiennent des métadonnées, pas les photos et vidéos. Elles doivent accompagner les fichiers de UPLOAD_LOCATION et les bibliothèques externes. Conservez aussi Compose, .env protégé et les versions des images. Une copie du dossier PostgreSQL pendant son activité n’est pas une procédure de sauvegarde validée.

Pour le pilote familial, définissez une fenêtre sans import ni suppression, attendez la fin des travaux qui modifient les fichiers et créez un dump depuis Administration > Job Queues. Copiez ensuite le dump et les médias correspondants avec votre outil de sauvegarde. Si vous ne pouvez pas maîtriser les écritures, prévoyez un arrêt contrôlé ou une procédure cohérente adaptée à votre stockage. Documentez le point de récupération commun.

13

Une copie indépendante et un vrai exercice de restauration

Notre recommandation : une copie versionnée sur une autre destination et une copie hors site, chiffrée, avec des accès distincts. La parité RAID/Unraid aide contre certaines pannes de disque; elle ne protège pas d’une suppression ou d’un compte compromis. Fixez une perte acceptable, par exemple 24 heures, puis alertez si une sauvegarde dépasse ce délai.

Restaurez d’abord sur une instance isolée, avec chemins distincts, version compatible et aucun téléphone connecté. La documentation propose une restauration Web depuis l’accueil ou Administration > Maintenance; restaurer remplace la base courante. Ne faites jamais votre premier essai sur la seule instance familiale.

Validez les comptes, albums, originaux téléchargés, vidéos et bibliothèques externes. Comparez quelques empreintes de fichiers avec la source, mesurez la durée et notez les étapes manquantes. Déclarez l’essai réussi seulement après lecture des médias restaurés, pas à la fin du téléchargement de l’archive.

14

Accès distant : HTTPS et exposition minimale

Pour un usage familial privé, un VPN limite l’exposition de l’application; il doit être connecté sur le téléphone pour joindre le serveur. Ne publiez pas directement le port HTTP 2283 sur Internet. N’exposez ni PostgreSQL, ni le cache, ni le service d’apprentissage automatique.

Pour un accès Web public, utilisez HTTPS sur un sous-domaine comme photos.example.net. Immich ne prend pas en charge un sous-chemin /immich. Vérifiez les limites de taille, les délais du proxy et le routage de /.well-known/immich avec une grosse vidéo et l’application mobile.

Un Cloudflare Tunnel peut faire partie de l’architecture, mais testez les limites du service et la compatibilité de l’authentification ajoutée avec le client mobile. Une page de connexion supplémentaire conçue pour un navigateur ne garantit pas le fonctionnement des transferts en arrière-plan.

15

Authentification et secrets

Immich prend en charge OpenID Connect. Si votre fournisseur impose la MFA, testez connexion Web, retour mobile et récupération de compte avant d’en dépendre. Vérifiez les URL de redirection exactes dans la documentation; n’inventez pas de callback.

Limitez les comptes administrateurs, protégez les secrets du fournisseur et révoquez les clés API inutiles. Conservez un chemin de récupération testé avant de modifier les méthodes de connexion. Un serveur auto-hébergé ne rend pas ses utilisateurs anonymes pour son administrateur.

16

Mises à jour et retour arrière

Lisez les notes des versions traversées et mettez à jour les clients mobiles dans l’ordre recommandé. Faites une sauvegarde cohérente avant de changer les images. Après adaptation de Compose et .env, les commandes ci-dessous téléchargent et appliquent la version choisie : c’est un changement avec interruption possible.

Immich ne prend pas en charge le downgrade, même entre correctifs. Remettre une ancienne image sur une base migrée n’est donc pas un plan de retour arrière. Préparez plutôt la restauration de l’ensemble d’avant mise à jour dans un environnement compatible, puis une bascule contrôlée. Les nouveaux imports postérieurs au point restauré devront être récupérés séparément.

Bash — changement après sauvegarde et validation
docker compose config --quiet
# Stop on any error / Arrêter à la première erreur
docker compose pull
# Run only if pull succeeded / Seulement si pull a réussi
docker compose up -d
docker compose ps
17

Surveiller et dépanner sans effacer les preuves

Lecture seule — exécutez ces commandes dans le dossier Compose avec les droits Docker autorisés. Les journaux peuvent contenir des noms de fichiers ou des identifiants : expurgez-les avant partage. Évitez docker compose config sans --quiet dans un ticket, car les variables peuvent révéler des secrets.

Une file d’apprentissage lente invite à vérifier CPU, mémoire, modèles et stockage. Une bibliothèque externe vide invite à vérifier montage, chemin interne et permissions. Des transferts distants qui échouent seulement sur les grosses vidéos orientent vers les limites du proxy. Mesurez avant de réinstaller ou d’augmenter toutes les limites.

Surveillez espace libre, état des conteneurs, erreurs de transfert, âge des copies externes et dernier exercice de restauration. Un conteneur healthy ne garantit ni la présence de tous les originaux ni la validité des sauvegardes.

Consultez également le rapport d’intégrité : fichiers manquants, non suivis et différences d’empreintes demandent une investigation. Ne nettoyez pas automatiquement une anomalie avant d’avoir identifié le fichier original et sa copie de secours.

Bash — collecte en lecture seule
docker compose ps
docker compose images
docker compose logs --since 30m --tail 100 immich-server
docker compose logs --since 30m --tail 100 immich-machine-learning
df -h
# Snapshot of resource use / Mesure ponctuelle des ressources
docker stats --no-stream
18

Quand le pilote est prêt pour la famille

Avant l’import complet, exigez cinq résultats : originaux lisibles, partage vérifié depuis un autre compte, transfert iPhone confirmé, copie externe récente et restauration réussie. Documentez qui maintient le serveur et comment la famille récupérera les photos si cette personne est indisponible.

L’accompagnement professionnel peut couvrir le choix NAS/serveur, le réseau, l’accès distant et le plan de sauvegarde. Ce guide aide à préparer un pilote; il ne remplace pas une analyse de votre stockage, de vos risques et de votre procédure de récupération.