Pendant des années, mes photos étaient sur Synology Photos : les photos de l’appareil photo sur le NAS, les screenshots Windows dans un dossier partagé, les photos du téléphone synchronisées automatiquement. Ça marchait. Mais ça manquait de tout ce qu’on attend aujourd’hui d’une galerie moderne : reconnaissance faciale, recherche par IA, timeline fluide, album partagé avec la famille.
Immich répond à tout ça, en self-hosted, avec une interface qui rivalise avec les meilleures apps cloud. Voilà comment je l’ai mis en place sur mon homelab.
[SCREENSHOT: Immich — interface web principale avec la bibliothèque de photos organisée par date et les albums]Pourquoi Immich
Il existe plusieurs alternatives self-hosted à Google Photos : PhotoPrism, Piwigo, Nextcloud Photos. J’ai essayé les trois. Immich s’en distingue sur un point crucial : l’application mobile. L’app iOS d’Immich est aussi bonne que Google Photos — backup automatique en arrière-plan, interface rapide, reconnaissance faciale, albums partagés. C’est le point qui a tué les autres alternatives pour moi.
Autres atouts :
- Reconnaissance faciale locale (machine learning embarqué)
- Recherche intelligente : « plage 2023 », « anniversaire Emma », « chien » — ça fonctionne vraiment
- Timeline identique à Google Photos
- Albums partagés avec la famille
- Mémoires (« il y a 3 ans… »)
Architecture sur mon homelab
Immich tourne sur le nœud 3 (Minisforum MS-01) car c’est lui qui a le plus de RAM disponible. Le machine learning (reconnaissance faciale, CLIP pour la recherche) est CPU-intensif au premier index — prévoir 30-60 minutes pour 80 000 photos.
Stockage :
- Photos originales : NAS UNAS Pro via NFS (SFP+ 10GbE) — les originaux ne quittent jamais le NAS
- Base de données PostgreSQL : SSD NVMe local pour les performances
- Cache et thumbnails : SSD NVMe local
Installation via Dockge
Immich propose un compose officiel. Récupère-le depuis la doc officielle (immich.app/docs) — il est mis à jour régulièrement avec les changements de version.
Structure minimale
services:
immich-server:
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
container_name: immich_server
restart: unless-stopped
ports:
- "2283:2283"
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
depends_on:
- redis
- database
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
container_name: immich_machine_learning
volumes:
- model-cache:/cache
restart: unless-stopped
redis:
image: redis:6.2-alpine
container_name: immich_redis
restart: unless-stopped
database:
image: tensorchord/pgvecto-rs:pg14-v0.2.0 # PostgreSQL avec extension vectorielle pour la recherche IA
container_name: immich_postgres
restart: unless-stopped
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
model-cache:
Le fichier .env
UPLOAD_LOCATION=/mnt/nas/immich # point de montage NFS vers le NAS
DB_PASSWORD=motdepassecomplexe
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
[SCREENSHOT: Immich — section Administration avec les statistiques de la bibliothèque (nombre de photos, vidéos, espace utilisé)]
Migration depuis Google Photos
La migration se fait en deux étapes :
Export Google Takeout
Google Photos > Paramètres > Télécharger tes données (Google Takeout). Sélectionne uniquement Google Photos. Télécharge les archives ZIP sur ton NAS.
Import dans Immich
Immich dispose d’un outil CLI pour importer depuis Takeout en préservant les dates et métadonnées :
docker run --rm -it -v /mnt/nas/takeout:/import ghcr.io/immich-app/immich-cli:latest upload --recursive /import --server http://192.168.1.40:2283 --key <API_KEY>
L’API key se génère dans Immich : Settings > API Keys. Le CLI gère les doublons automatiquement — tu peux relancer l’import si ça s’arrête à mi-chemin.
Application mobile
Installe l’app Immich (iOS/Android), configure l’URL de ton serveur (local ou via NPM en HTTPS), et active le backup automatique. Sur iOS, Immich utilise les APIs de backup en arrière-plan — les nouvelles photos sont uploadées automatiquement quand tu es sur le Wi-Fi.
Pour l’accès depuis l’extérieur, j’expose Immich via Nginx Proxy Manager sur https://photos.mondomaine.fr.
Backup Immich
Immich gère les originaux et la base de données de façon séparée. Mon setup de backup :
- Photos originales : stockées sur le NAS, sauvegardées sur le Synology et le disque off-site via la stratégie 3-2-1
- Base PostgreSQL : dump quotidien via un script cron + heartbeat Uptime Kuma
#!/bin/bash
docker exec immich_postgres pg_dumpall -U postgres | gzip > /mnt/backup/immich_db_$(date +%Y%m%d).sql.gz
# Heartbeat Uptime Kuma
curl -s "http://uptime-kuma:3001/api/push/TOKEN?status=up&msg=OK"
Les limites
Immich est un projet actif avec des mises à jour fréquentes — les versions ne sont pas rétrocompatibles. Le projet le dit explicitement : ne pas utiliser :latest sans lire les release notes. Je fixe la version dans le .env et je lis le changelog avant chaque update.
Configure un utilisateur « famille » en plus de ton admin. Donne-lui accès uniquement aux albums partagés, pas à ta bibliothèque complète. Immich gère les partages par album avec des liens publics ou des accès par compte. Sur mon setup, ma femme a son propre compte avec sa bibliothèque, et nous avons des albums partagés pour les photos communes. Deux bibliothèques distinctes, zéro mélange.
👉 Pour aller plus loin : sauvegarder son homelab avec PBS, Nginx Proxy Manager pour le HTTPS, et le setup homelab complet.
Immich au quotidien
Depuis la migration, toutes mes photos arrivent automatiquement dans Immich depuis le téléphone. La reconnaissance faciale a identifié les personnes qui apparaissent le plus, la recherche IA retrouve « vacances montagne 2023 » en quelques secondes.
Point d’attention : Immich évolue vite. Lis toujours le changelog avant une mise à jour et fais un snapshot PBS avant. Les nouveautés valent la contrainte.
