Skip to main content

1.2 - Architecture et services

Une installation Immich standard repose sur plusieurs services. Le nom exact des conteneurs varie entre Docker Compose, TrueNAS et les versions du catalogue.

Composants principaux

Composant Rôle
immich-server interface Web, API, uploads et traitements en arrière-plan
PostgreSQL utilisateurs, métadonnées, albums, chemins et index vectoriels
VectorChord extension PostgreSQL utilisée pour la recherche vectorielle
Redis file d'attente et coordination des tâches
immich-machine-learning recherche intelligente et reconnaissance faciale
Stockage /data originaux, miniatures, profils, vidéos encodées et sauvegardes

Les anciennes installations peuvent utiliser pgvecto.rs et des services nommés pgvecto ou pgvecto_upgrade. Les versions récentes utilisent l'image PostgreSQL Immich avec VectorChord.

Flux simplifié

  1. Le mobile ou le navigateur envoie un fichier au serveur.
  2. Le serveur écrit l'original dans le stockage.
  3. Le serveur enregistre le chemin et les métadonnées dans PostgreSQL.
  4. Redis distribue les tâches en arrière-plan.
  5. Les workers extraient les métadonnées, créent les miniatures et transcodent les vidéos.
  6. Le service de machine learning calcule les informations de recherche et de visages.

Workers

Le conteneur serveur comprend généralement :

  • api pour les requêtes Web et mobiles ;
  • microservices pour les miniatures, vidéos et autres tâches.

Sur une petite installation, les deux restent dans le même service. Les séparer est réservé aux besoins avancés de répartition ou de limitation des ressources.

Vérifier les services Docker

docker compose ps
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}'
docker compose logs --tail=100

Sur TrueNAS avec accès au shell :

sudo docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}' | grep -i immich

Ne pas supposer un nom de conteneur. L'identifier avant d'utiliser docker logs, docker exec ou pg_dump.

Dépendances critiques

Immich ne peut pas fonctionner correctement si :

  • PostgreSQL est indisponible ou incompatible ;
  • les dossiers de /data sont absents ou non accessibles ;
  • Redis ne peut pas traiter les files d'attente ;
  • le reverse proxy bloque les gros envois ;
  • une migration de base a été interrompue.

Références :

  • https://docs.immich.app/developer/architecture/
  • https://docs.immich.app/administration/jobs-workers/