Héberger Immich : votre alternative à Google Photos, auto-hébergée
Sauvegarde automatique depuis le téléphone, albums, reconnaissance de visages : le confort de Google Photos, mais sur votre serveur. Immich est l'alternative open source. Voici comment l'héberger.
Reprendre le contrôle de ses photos ne consiste pas seulement à déplacer des fichiers hors de Google Photos. Il faut conserver une expérience simple au quotidien : sauvegarde automatique depuis le téléphone, classement chronologique, albums partagés, recherche et reconnaissance des visages. Immich réunit ces fonctions dans une application open source que vous hébergez sur votre propre serveur.
Chaque membre de la famille peut installer l’application Immich sur Android ou iOS. Les nouvelles photos et vidéos sont alors envoyées vers le serveur, puis accessibles depuis l’application mobile ou l’interface web. Les originaux restent sur une infrastructure que vous contrôlez, avec vos propres règles de conservation et de sauvegarde.
Cette liberté implique toutefois trois précautions. Le stockage est l’enjeu principal, car plusieurs téléphones peuvent rapidement produire des centaines de gigaoctets, voire plusieurs téraoctets. La reconnaissance faciale et la recherche d’objets fonctionnent sans GPU, mais plus lentement sur CPU. Enfin, Immich évolue rapidement : il faut lire les notes de version, fixer explicitement la version déployée et disposer de sauvegardes restaurables.
Comprendre l’architecture d’Immich
Le déploiement officiel repose sur Docker Compose et plusieurs services complémentaires :
immich-serverfournit l’API, l’interface web et le traitement principal des médias.- Le service
machine-learninggénère les représentations nécessaires à la recherche, à la reconnaissance des visages et à l’identification d’objets. - PostgreSQL conserve les comptes, albums, métadonnées et index. Une extension vectorielle compatible avec la version utilisée, comme pgvecto.rs ou VectorChord selon la release, permet la recherche sémantique.
- Redis, ou le service de cache équivalent défini par la release, gère les files de travaux et certaines données temporaires.
- Le répertoire configuré par
UPLOAD_LOCATIONcontient la photothèque gérée par Immich, notamment les originaux importés.
Ces composants doivent rester cohérents entre eux. Utilisez toujours le fichier Compose et le fichier d’environnement provenant de la même release.
Le stockage est le prérequis numéro un
Avant de choisir un VPS, additionnez la taille actuelle des photothèques, estimez la production annuelle de chaque téléphone et prévoyez une marge pour les vidéos. Immich génère aussi des miniatures, des aperçus et éventuellement des fichiers transcodés. La capacité nécessaire dépasse donc celle des seuls fichiers visibles dans les galeries.
Le stockage doit être surveillé et extensible. Une partition pleine peut interrompre les importations, les traitements et la base de données. Configurez des alertes sur l’espace disponible et vérifiez également la capacité du support qui recevra les sauvegardes.
Les VPS TalCloud démarrent à 4,99 € par mois. L’environnement pour ce type de projet associe des serveurs situés en France, une approche compatible avec les exigences du RGPD, du stockage NVMe, une protection Anti-DDoS Netrix et un support humain. Aucun GPU n’étant proposé, il faut dimensionner le projet en considérant que le machine learning fonctionnera sur CPU.
Prérequis techniques
Prévoyez les éléments suivants :
- Un VPS Linux 64 bits avec beaucoup de stockage disponible.
- Docker Engine et le plugin Docker Compose (voir installer Docker sur un VPS).
- Un nom de domaine ou un sous-domaine, par exemple
photos.example.fr. - Un enregistrement DNS pointant vers l’adresse IP du VPS.
- Un accès SSH administrateur.
- Un emplacement de sauvegarde séparé du VPS.
- Une quantité de mémoire et de CPU adaptée au nombre d’utilisateurs et au volume de médias.
Le serveur doit également pouvoir sortir sur Internet pour télécharger les images Docker. N’exposez pas directement PostgreSQL ou Redis. Seul le reverse proxy destiné à recevoir le trafic web doit être public.
Installer Immich avec Docker Compose
Consultez la page des releases d’Immich, choisissez une version précise et remplacez vX.Y.Z dans les commandes suivantes. Évitez de construire un nouveau déploiement à partir d’un fichier Compose récupéré sans noter sa version.
mkdir -p /opt/immich
cd /opt/immich
export IMMICH_VERSION=vX.Y.Z
wget -O docker-compose.yml \
"https://github.com/immich-app/immich/releases/download/${IMMICH_VERSION}/docker-compose.yml"
wget -O .env \
"https://github.com/immich-app/immich/releases/download/${IMMICH_VERSION}/example.env"
Avec curl, l’équivalent est :
curl -L \
"https://github.com/immich-app/immich/releases/download/${IMMICH_VERSION}/docker-compose.yml" \
-o docker-compose.yml
curl -L \
"https://github.com/immich-app/immich/releases/download/${IMMICH_VERSION}/example.env" \
-o .env
Ouvrez ensuite .env et adaptez au minimum les paramètres suivants :
UPLOAD_LOCATION=/srv/immich/library
DB_DATA_LOCATION=/srv/immich/postgres
IMMICH_VERSION=vX.Y.Z
DB_PASSWORD=remplacer_par_un_secret_long_et_unique
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
Créez les répertoires avec des permissions adaptées au compte utilisé par Docker. UPLOAD_LOCATION doit pointer vers un volume suffisamment grand et persistant. Ne placez pas la photothèque dans un répertoire temporaire ou dans une couche interne du conteneur.
IMMICH_VERSION doit contenir une version explicite, identique à celle de la release téléchargée. N’utilisez pas aveuglément latest, car une recréation des conteneurs pourrait introduire une nouvelle version sans que vous ayez lu ses instructions de migration.
Protégez le fichier d’environnement, puis démarrez les services :
chmod 600 .env
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=100
Le premier démarrage peut prendre quelques minutes. PostgreSQL doit être prêt avant que tous les traitements deviennent disponibles.
Créer le compte administrateur
Avant la mise en place du reverse proxy, vous pouvez tester l’interface depuis un tunnel SSH ou une adresse temporairement protégée. Immich écoute généralement sur le port défini par le fichier Compose, souvent 2283.
Lors du premier accès, créez immédiatement le compte administrateur avec une adresse électronique valide et un mot de passe unique. Dans les réglages d’administration, désactivez ensuite l’inscription publique. Créez manuellement un compte pour chaque membre de la famille et attribuez des quotas adaptés si cette fonction est disponible dans votre version.
Vérifiez également les paramètres de partage. Un lien public vers un album doit être considéré comme accessible à toute personne qui le possède.
Activer la sauvegarde automatique mobile
Installez l’application Immich sur chaque téléphone, puis renseignez l’URL HTTPS du serveur :
https://photos.example.fr
Après connexion, ouvrez les paramètres de sauvegarde et sélectionnez les albums ou pellicules à envoyer. Activez la sauvegarde automatique en arrière-plan et choisissez si les transferts sont autorisés sur le réseau mobile.
Android et iOS peuvent limiter les applications en arrière-plan pour économiser la batterie. Accordez les permissions demandées, autorisez l’accès aux photos et vérifiez les réglages d’optimisation énergétique. Après la première configuration, prenez une photo de test, verrouillez le téléphone et confirmez qu’elle apparaît bien dans la timeline Immich.
Pour une photothèque initiale volumineuse, laissez l’application ouverte, le téléphone en charge et connecté au Wi-Fi. Contrôlez que tous les fichiers attendus ont été importés avant d’effacer quoi que ce soit du terminal.
Reconnaissance des visages et recherche d’objets
Le service de machine learning analyse les images afin de regrouper les visages et d’alimenter la recherche par contenu. Il fonctionne sur CPU sans GPU. Les fonctions restent disponibles, mais leur exécution est plus lente.
La première indexation d’une bibliothèque contenant plusieurs années de photos peut durer longtemps et solliciter fortement le processeur. Les vidéos, miniatures et autres tâches en attente peuvent également allonger la file de traitement. Consultez l’administration Immich et les journaux du service concerné :
docker compose logs -f immich-machine-learning
Laissez cette première analyse s’achever avant d’évaluer les performances. Aucun GPU n’est indispensable pour une petite installation familiale, mais un CPU limité demandera davantage de patience.
Publier Immich en HTTPS
Placez Immich derrière un reverse proxy comme Caddy, Nginx ou Traefik. Le proxy termine la connexion HTTPS et transmet les requêtes vers le port local d’Immich. Avec Caddy, une configuration minimale peut ressembler à ceci :
photos.example.fr {
reverse_proxy 127.0.0.1:2283
}
Si le fichier Compose le permet, liez le port Immich uniquement à l’interface locale :
ports:
- "127.0.0.1:2283:2283"
Le reverse proxy doit accepter les fichiers volumineux, les connexions longues et les en-têtes nécessaires aux communications temps réel. Nginx Proxy Manager convient également si vous préférez une interface graphique. Ouvrez uniquement les ports HTTP et HTTPS dans le pare-feu, puis redirigez HTTP vers HTTPS. Testez enfin l’envoi d’une vidéo conséquente depuis le mobile.
Sécuriser et mettre à jour l’installation
Maintenez le système hôte, Docker et le reverse proxy à jour. Protégez SSH avec des clés, désactivez l’authentification par mot de passe si possible et limitez les ports ouverts avec le pare-feu. Conservez .env hors de tout dépôt public.
Avant chaque mise à jour d’Immich :
- Lisez entièrement les notes de version et les éventuelles étapes de migration.
- Sauvegardez PostgreSQL et
UPLOAD_LOCATION. - Modifiez
IMMICH_VERSIONvers une version précise. - Téléchargez le fichier Compose correspondant si la release le demande.
- Exécutez
docker compose pull, puisdocker compose up -d. - Contrôlez les journaux, la connexion mobile, une recherche et l’ouverture de plusieurs photos.
- Ne supprimez l’ancienne sauvegarde qu’après validation de la restauration potentielle.
Évitez les mises à jour automatiques non supervisées des conteneurs Immich. Le projet avance vite et certaines versions peuvent nécessiter une procédure particulière.
Sauvegarder les originaux et PostgreSQL
Immich ne doit jamais être l’unique copie de vos souvenirs. Une sauvegarde complète comprend au minimum le répertoire UPLOAD_LOCATION et un export cohérent de PostgreSQL. Copier uniquement le répertoire de la base pendant qu’elle fonctionne ne remplace pas un pg_dump.
Exemple d’export depuis le service database :
mkdir -p /srv/backups/immich
docker compose exec -T database sh -c \
'pg_dump --clean --if-exists --username="$POSTGRES_USER" "$POSTGRES_DB"' \
| gzip > "/srv/backups/immich/database-$(date +%F).sql.gz"
Copiez ensuite les originaux vers un support distinct :
rsync -a /srv/immich/library/ /mnt/backup/immich-library/
Le support de destination ne doit pas être le même disque virtuel que le VPS. Prévoyez une copie hors serveur, chiffrez-la si elle quitte votre infrastructure et testez périodiquement une restauration dans un environnement isolé. Notre guide sur la stratégie de sauvegarde d’un serveur complète cette approche. Le contrôle concret à automatiser est simple : vérifier la date et la taille du dernier pg_dump, synchroniser UPLOAD_LOCATION, puis déclencher une alerte si l’une des deux opérations échoue.