# 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

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

Sur TrueNAS avec accès au shell :

```bash
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/`