# 2.1 - Préparer Linux et Docker

Docker Compose est la méthode recommandée par Immich pour un déploiement Linux standard.

## Préparer le serveur

```bash
sudo apt update
sudo apt upgrade
sudo apt install ca-certificates curl wget openssl rsync
```

Installer Docker Engine depuis le dépôt officiel Docker correspondant à la distribution. Vérifier ensuite :

```bash
docker --version
docker compose version
docker info
```

La commande attendue est `docker compose` avec un espace. L'ancien exécutable `docker-compose` peut être incompatible avec le fichier officiel actuel.

## Créer l'arborescence

```bash
sudo mkdir -p /srv/immich/{app,data,postgres}
sudo chown -R "$USER":"$USER" /srv/immich/app
```

Définir séparément les permissions des données et de PostgreSQL selon les UID réellement utilisés par les conteneurs. Ne pas appliquer `chmod 777`.

## Vérifier le stockage

```bash
df -hT /srv/immich
df -i /srv/immich
findmnt /srv/immich
```

La base PostgreSQL doit rester sur un stockage local fiable. Les partages réseau ne sont pas pris en charge pour `DB_DATA_LOCATION` dans le déploiement Compose officiel.

## Heure et réseau

```bash
timedatectl
getent hosts ghcr.io
curl -I https://github.com
```

Le serveur doit pouvoir télécharger les images depuis GitHub Container Registry et les modèles de machine learning.

## Autoriser Docker sans sudo

Option facultative :

```bash
sudo usermod -aG docker "$USER"
```

Fermer puis rouvrir la session. L'appartenance au groupe Docker donne des privilèges proches de root. Elle doit rester limitée aux administrateurs.

## Contrôles avant installation

```bash
docker run --rm hello-world
docker compose version
free -h
lscpu
```

Si un GPU NVIDIA sera utilisé :

```bash
nvidia-smi
docker run --rm --gpus all nvidia/cuda:12.3.2-base-ubuntu22.04 nvidia-smi
```

Le second test nécessite le NVIDIA Container Toolkit et une image disponible. Adapter la version CUDA au pilote installé si nécessaire.

Références :

- `https://docs.immich.app/install/docker-compose/`
- `https://docs.immich.app/install/requirements/`