Ce guide détaille l’installation complète d’Immich avec support de l’accélération matérielle NVIDIA dans un container LXC unprivileged sur Proxmox, en suivant les recommandations officielles Docker Compose.
Architecture
- Hôte : Proxmox VE
- Container : LXC unprivileged (Debian/Ubuntu)
- GPU : NVIDIA avec support NVENC
- Stockage : Mount point dédié pour les données Immich
- Déploiement : Docker Compose (méthode officielle)
Prérequis
- driver nvidia installer sur l’hôte
1. Configuration du container LXC sur Proxmox
Configuration du fichier LXC
Sur l’hôte Proxmox, éditez le fichier de configuration de votre container (remplacez XXX par l’ID de votre container) :
nano /etc/pve/lxc/XXX.conf
Ajoutez la configuration suivante :
# Autorisation des périphériques GPU NVIDIA
lxc.cgroup2.devices.allow: c 195:* rwm
lxc.cgroup2.devices.allow: c 226:* rwm
lxc.cgroup2.devices.allow: c 508:* rwm
lxc.cgroup2.devices.allow: c 511:* rwm
# Montage des périphériques NVIDIA dans le container
lxc.mount.entry: /dev/nvidia1 dev/nvidia1 none bind,optional,create=file
lxc.mount.entry: /dev/nvidiactl dev/nvidiactl none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-modeset dev/nvidia-modeset none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm dev/nvidia-uvm none bind,optional,create=file
lxc.mount.entry: /dev/nvidia-uvm-tools dev/nvidia-uvm-tools none bind,optional,create=file
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
# Activation du nesting pour Docker
features: nesting=1
# Mount point pour le stockage Immich
mp0: /dev/<mon vm>/<mon export>,mp=/mnt/immich
# Mapping des UID/GID pour container unprivileged pour mp0
lxc.idmap: u 0 100000 65536
lxc.idmap: g 0 100000 65536
Pour les autorisations des périphériques GPU Nvidia, prendre le premier nombre 195,226,508,511
pve:~# ls /dev/nv* -al |grep -v nvme |grep -v nvram
crw-rw-rw- 1 root root 195, 0 12 déc. 21:38 /dev/nvidia0
crw-rw-rw- 1 root root 195, 1 12 déc. 21:38 /dev/nvidia1
crw-rw-rw- 1 root root 195, 255 12 déc. 21:38 /dev/nvidiactl
crw-rw-rw- 1 root root 508, 0 20 déc. 13:00 /dev/nvidia-uvm
crw-rw-rw- 1 root root 508, 1 20 déc. 13:00 /dev/nvidia-uvm-tools
crw-rw-rw- 1 root root 508, 0 12 déc. 21:39 /dev/nvidia-vgpuctl
/dev/nvidia-caps:
cr-------- 1 root root 511, 1 12 déc. 21:38 nvidia-cap1
cr--r--r-- 1 root root 511, 2 12 déc. 21:38 nvidia-cap2
pve:~# ls /dev/dri/ -al
crw-rw---- 1 root video 226, 0 12 déc. 21:20 card0
crw-rw---- 1 root render 226, 128 20 déc. 13:00 renderD128
Explications :
lxc.idmap: Mapping des utilisateurs/groupes pour un container unprivilegedlxc.cgroup2.devices.allow: Autorise l’accès aux périphériques GPU (codes majeurs)lxc.mount.entry: Monte les devices NVIDIA nécessaires dans le containerfeatures: nesting=1: Indispensable pour exécuter Docker dans le containermp0: Mount point pour stocker les données Immich (ajustez selon votre configuration)
Redémarrage du container
pct stop XXX
pct start XXX
Vérification du montage GPU
Connectez-vous au container et vérifiez la présence des périphériques :
pct enter XXX
ls -la /dev/nvidia* /dev/dri/
Vous devriez voir les périphériques NVIDIA montés.
2. Installation des pilotes NVIDIA dans le container
Installation des pilotes
Depuis l’intérieur du container :
# Téléchargez les pilotes NVIDIA (version adaptée à votre GPU)
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/580.119.02/NVIDIA-Linux-x86_64-580.119.02.run
# Installation sans les modules kernel (déjà sur l'hôte)
chmod +x NVIDIA-Linux-x86_64-580.119.02.run
./NVIDIA-Linux-x86_64-580.119.02.run --no-kernel-modules
Vérification
nvidia-smi
Si la commande retourne les informations de votre GPU, l’installation est réussie.
3. Installation de Docker
Installation de Docker
Suivez la documentation officielle Docker pour votre distribution :
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
Configuration du proxy Docker (optionnel)
Si vous utilisez un proxy, créez le fichier de configuration :
mkdir -p /etc/systemd/system/docker.service.d
nano /etc/systemd/system/docker.service.d/http-proxy.conf
Ajoutez :
[Service]
Environment="HTTP_PROXY=http://
<proxy>/"
Environment="HTTPS_PROXY=http://
<proxy>/"
Environment="NO_PROXY=localhost,127.0.0.1,
<domain>,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12"
Rechargez la configuration :
systemctl daemon-reload
systemctl restart docker
4. Installation du NVIDIA Container Toolkit
Installation des prérequis
apt-get update && apt-get install -y --no-install-recommends \
curl \
gnupg2
Configuration du dépôt
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
Installation du toolkit
apt-get update
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.18.1-1
apt-get install -y \
nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
Configuration de Docker pour utiliser NVIDIA
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
Vérification
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi
Si vous voyez les informations de votre GPU, Docker peut accéder au GPU correctement.
5. Installation de CUDA Toolkit (optionnel)
Si vous avez besoin des outils de développement CUDA :
wget https://developer.download.nvidia.com/compute/cuda/13.1.0/local_installers/cuda-repo-debian13-13-1-local_13.1.0-590.44.01-1_amd64.deb
dpkg -i cuda-repo-debian13-13-1-local_13.1.0-590.44.01-1_amd64.deb
cp /var/cuda-repo-debian13-13-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
apt-get update
apt-get -y install cuda-toolkit-13-1
6. Création de l’utilisateur Immich
adduser --shell /bin/bash --disabled-password immich --comment "Immich User"
apt install -y git
usermod -aG video,render,docker immich
Note : L’utilisateur immich aura l’UID 1000 dans le container, ce qui correspondra à l’UID 101000 sur l’hôte Proxmox grâce au mapping unprivileged.
7. Préparation du stockage
Création de la structure des répertoires
Sur le mount point /mnt/immich :
mkdir -p /mnt/immich/{upload,library,thumbs,encoded-video,profile,backups,immich}
Je ne comprend pas pourquoi il a besoin de /mnt/immich/immich, sans ça, il ne démarre pas.
Configuration des permissions
chown -R 1000:1000 /mnt/immich
chmod -R u+rwX,g+rwX /mnt/immich
Important : Dans un container unprivileged, l’UID 1000 dans le container correspond à l’UID 101000 sur l’hôte Proxmox.
8. Installation d’Immich (méthode officielle)
Téléchargement de la configuration officielle
Basculez sur l’utilisateur immich :
su - immich
cd ~
Téléchargez les fichiers de configuration officiels :
# Clonez le repository officiel ou téléchargez le docker-compose.yml
mkdir immich-app
cd immich-app
# Téléchargez le fichier docker-compose.yml officiel
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
wget -O hwaccel.transcoding.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.transcoding.yml
Configuration du fichier .env
Éditez le fichier .env :
nano .env
Modifiez au maximum via ce fichier, plus simple que de faire des modifications dans le docker compose :
# Chemin de stockage des uploads
UPLOAD_LOCATION=/mnt/immich
# Base de données
DB_PASSWORD=votreMotDePasseSecurise
# Version d'Immich
IMMICH_VERSION=release
# Timezone
TZ=Europe/Paris
no_proxy=
https_proxy=
http_proxy=
OMP_NUM_THREADS="4"
HF_HUB_DISABLE_XET="1"
MACHINE_LEARNING_WORKER_TIMEOUT=300
MACHINE_LEARNING_MODEL_INTRA_OP_THREADS=2
IMMICH_MAX_UPLOAD_SIZE="8192MB"
Modification du docker-compose.yml pour adapter les paths
Éditez docker-compose.yml et modifiez la section immich-server :
nano docker-compose.yml
#
# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}/upload:/data/upload
- ${UPLOAD_LOCATION}/library:/data/library
- ${UPLOAD_LOCATION}/thumbs:/data/thumbs
- ${UPLOAD_LOCATION}/encoded-video:/data/encoded-video
- ${UPLOAD_LOCATION}/profile:/data/profile
- ${UPLOAD_LOCATION}/backups:/data/backups
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false
environment:
- NVIDIA_VISIBLE_DEVICES=all
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:fb8d272e529ea567b9bf1302245796f21a2672b8368ca3fcb938ac334e613c8f
healthcheck:
test: redis-cli ping || exit 1
restart: always
volumes:
model-cache:
9. Démarrage d’Immich
Première exécution
# En tant qu'utilisateur immich
cd ~/immich-app
docker compose up -d
Vérification des logs
docker compose logs -f
10. Accès à Immich
Ouvrez votre navigateur et accédez à :
http://IP_DU_CONTAINER:2283
Suivez l’assistant de configuration pour créer votre compte administrateur.
Voir les logs
docker logs immich_machine_learning -f
docker logs immich_server -f
Docker GPU
Modifier le fichier /etc/nvidia-container-runtime/config.toml
no-cgroups = true
# Reconfigurer le runtime
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
# Vérifier la configuration Docker
docker info | grep -i nvidia
⚠️ Il faut que docker run --rm --gpus all nvidia/cuda:13.1.0-base-ubuntu22.04 nvidia-smi fonctionne comme nvidia-smi
Vérifier l’utilisation du GPU par Immich
# Pendant le transcodage d'une vidéo
nvidia-smi dmon
Vous devriez voir l’utilisation du moteur de décodage/encodage lors de l’upload de fichier
Dernière mise à jour : Décembre 2025