Immich (photos et vidéos)
immich - Gestionnaire web photos et vidéos installé sur une machine virtuelle Alpine Linux
Immich
Immich est une application qui permet de télécharger et d’afficher des actifs (photos et vidéos) sur un serveur Immich auto-hébergé. L’application offre des fonctionnalités de sauvegarde automatique, de marquage, de recherche, de géocodage et de détection d’objet.
Exigences
Un système avec au moins 4 Go de RAM et 2 cœurs CPU.
Voici quelques-unes des fonctionnalités clés qui en font une solution intéressante :
- Lecteur photo et vidéo : Prise en charge les formats de fichiers courants, y compris les fichiers RAW pour les photos
- Données Exif : Les informations Exif (Exchangeable Image File Format) sont utilisées pour fournir des détails supplémentaires aux photos, comme la date de prise de vue, le modèle de l’appareil photo…
- Vue carte : Permet de visualiser où les photos ont été prises sur une carte, cela ajoute une dimension géographique intéressante
- Détection des visages : Immich utilise des algorithmes de reconnaissance faciale pour organiser et retrouver plus facilement des photos de personnes
- Gestion par Dossier et Favoris : Organisez vos photos comme vous le souhaitez et marquez les photos préférées pour un accès plus rapide
- Portail d’administration : Gestion des paramètres de l’application et des utilisateurs
- Partage via des liens : Partagez vos photos et vidéos facilement avec des liens
- Moteur de recherche : Facilite la recherche des photos grâce à des options avancées
- Vue 360° : Profitez d’une vue immersive de vos photos panoramiques
- Accélération matérielle (GPU) : Optimisez la performance de traitement des images et vidéos grâce à l’accélération matérielle
- Édition rapide, mode sombre, authentification viaOAuth2 et OIDC, etc.
Particularités
- son ergonomie, sobre et efficace, agréable à utiliser
- les options de tri « intelligentes » pour classer automatiquement les photos/vidéos qui permettent de les retrouver très facilement ( lieu,détection des visages, tags personnalisés etc)
- les vidéos super fluides, avec un aperçu au survol de la souris digne des perfs d’un Netflix
- la possibilité de synchroniser les photos de son smartphone
- autohébergeable, tu peux l’installer sur ton serveur ou sur ton pc en local avec docker
- une appli conçue et orientée « respect de la vie privée »
Télécharger les fichiers requis
Créez un répertoire de votre choix (par exemple ./immich-app) pour tenir les fichiers docker-compose.yml et .env.
Déplacer vers le répertoire que vous avez créé
1
2
mkdir -p /sharenfs/docker-app/immich-app
cd /sharenfs/docker-app/immich-app
Télécharger docker-compose.yml et example.env en exécutant les commandes suivantes:
1
2
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
Personnaliser
fichier docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
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}:/data
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9
healthcheck:
test: redis-cli ping || exit 1
restart: always
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
# DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always
healthcheck:
disable: false
volumes:
model-cache:
fichier .env
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=../../docker-data/immich/data
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=../../docker-data/immich/postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Europe/Paris
# The Immich version to use. You can pin this to a specific version like "v2.1.0"
IMMICH_VERSION=v2
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=Mot_de_Passe_Database
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
- UPLOAD_LOCATION avec votre emplacement préféré pour stocker des actifs de sauvegarde. Ce devrait être un nouveau répertoire sur le serveur avec suffisamment d’espace libre.
- Envisagez de changer DB_PASSWORD en une valeur personnalisée. Postgres n’est pas publiquement exposé, donc ce mot de passe n’est utilisé que pour l’authentification locale. Pour éviter les problèmes avec l’analyse de cette valeur par Docker, il est préférable d’utiliser uniquement les caractères A-Za-z0-9.
pwgenest un utilitaire pratique pour cela. - Définir le fuseau horaire en décommentant la ligne TZ=.
Démarrer les conteneurs
À partir du répertoire que vous avez créé à l’étape 1 (qui devrait maintenant contenir vos fichiers docker-compose.yml et .env personnalisés), exécutez la commande suivante pour démarrer Immich comme un service de fond :
1
2
cd ~/immich-app
docker compose up -d
Proxy nginx immich.rnmkcy.eu
Configurer le fichier /etc/nginx/conf.d/immich.rnmkcy.eu.conf sur serveur debian cwwk rnmkcy.eu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name immich.rnmkcy.eu;
include /etc/nginx/conf.d/ssl-modern.inc;
# enable websockets: http://nginx.org/en/docs/http/websocket.html
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
# set timeout
proxy_read_timeout 600s;
proxy_send_timeout 600s;
send_timeout 600s;
location / {
proxy_pass http://192.168.0.205:2283;
}
}
Se connecter sur le lien https://immich.rnmkcy.eu
Le premier utilisateur à s’enregistrer sera l’utilisateur administrateur.
L’utilisateur administrateur pourra ajouter d’autres utilisateurs à l’application.
cliquez sur le bouton Commencer.

- Thème: Sombre
- Langue: French
Bibliothèque externe
Ce guide vous accompagne dans l’ajout d’une bibliothèque externe. Ce guide suppose que vous exécutez Immich dans Docker et que les fichiers auxquels vous souhaitez accéder sont stockés dans un répertoire sur la même machine.(External Library)
Le dossier externe /sharenfs/docker-data/immich/PhotosVideos
Modifier le fichier docker-compose.yml
Ajout de la ligne - /sharenfs/docker-data/immich/PhotosVideos:/mnt/PhotosVideos:ro
Dossier local: /sharenfs/docker-data/immich/PhotosVideos
Dossier container: /mnt/PhotosVideos
1
2
3
4
5
6
7
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}:/data
- /sharenfs/docker-data/immich/PhotosVideos:/mnt/PhotosVideos:ro
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
Mise à jour
1
docker compose up -d
Se connecter en administration
Nom de la source externe: /sharenfs/docker-data/immich/PhotosVideos/
Propriétaire de la source: yann
Dossier: /mnt/PhotosVideos
Un message vous indique que la bibliothèque est mise à jour , cliquer sur ‘Analyser’ puis rafraîchir la page
Configuration SSO pour Immich avec Authelia OIDC
Dans cet article de blog, nous allons configurer Authelia comme fournisseur OIDC et l’utiliser pour activer l’authentification unique (SSO) dans Immich ⭐
cwwk - Configuration Authelia
La configuration Authelia est définie dans un fichier de
configuration.yml. Ce fichier permet de définir les paramètres de configuration OIDC nécessaires, tels qu’un fournisseur et un client.
En consultant la documentation publique OIDC d’Authelia , la configuration contient plusieurs paramètres nécessitant soit une valeur secrète, soit un certificat.
Ces éléments doivent être générés de manière sécurisée avant d’ajuster la configuration.
Passe en mode su, puis se rendre dans le répertoire authelia
1
2
sudo -s # ou su -
cd /etc/authelia
Création d’un certificat RSA
Authelia nous oblige à définir un certificat (clé privée) via la directive key et une chaîne de certificats (clé publique) via la directive certificate_chain.
Vous pouvez générer les deux via la commande suivante :
1
authelia crypto certificate rsa generate --common-name auth.rnmkcy.eu && cat public.crt && cat private.pem
⚠️ Veuillez ajuster le nom commun du certificat à votre FQDN d’Authelia
Création d’un secret client
Authelia nous demande de définir un secret client sécurisé.
Vous pouvez en générer un via la commande suivante :
1
authelia crypto hash generate pbkdf2 --variant sha512 --random --random.length 72 --random.charset rfc3986
La commande précédente renvoie 2 lignes
1
2
Random Password: -G3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Digest: $pbkdf2-sha512xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
⚠️ Veuillez noter le mot de passe en clair (
Random Password) ainsi que le hachage $pbkdf2 (Digest) du mot de passe pour une utilisation ultérieure.
Création fournisseur et client OIDC
Une fois le certificat RSA et le secret client créés de manière sécurisée, nous pouvons commencer à ajuster le fichier de configuration d’Authelia.
Nous ajouterons un fournisseur d’identité et un client en insérant nos secrets et informations de certificat auto-générés.
Mettez ce qui suit à la fin de votre configuration Authelia /etc/authelia/configuration.yml :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
identity_providers:
oidc:
hmac_secret: 'my-secure-hmac-secret-key-to-change' # Commande: openssl rand -base64 48
jwks:
- key_id: 'authelia'
algorithm: 'RS256'
use: 'sig'
certificate_chain: |
-----BEGIN CERTIFICATE-----
<PASTE-HERE-YOUR-PUBLIC-KEY-DATA> # /etc/authelia/public.crt sur une ligne
-----END CERTIFICATE-----
key: |
-----BEGIN PRIVATE KEY-----
<PASTE-HERE-YOUR-PRIVATE-KEY-DATA> # /etc/authelia/private.pem sur une ligne
-----END PRIVATE KEY-----
enable_client_debug_messages: false
minimum_parameter_entropy: 8
enforce_pkce: 'public_clients_only'
enable_pkce_plain_challenge: false
enable_jwt_access_token_stateless_introspection: false
discovery_signed_response_alg: 'none'
discovery_signed_response_key_id: ''
require_pushed_authorization_requests: false
lifespans:
access_token: '1h'
authorize_code: '1m'
id_token: '1h'
refresh_token: '90m'
cors:
endpoints:
- 'authorization'
- 'token'
- 'revocation'
- 'introspection'
allowed_origins:
- 'https://immich.rnmkcy.eu'
allowed_origins_from_client_redirect_uris: false
clients:
- client_id: immich
client_name: Immich OIDC
client_secret: '$pbkdf2-<PASSWORD-HASH-DATA>'
public: false
authorization_policy: 'two_factor'
redirect_uris:
- 'https://immich.rnmkcy.eu/auth/login'
- 'https://immich.rnmkcy.eu/user-settings'
- 'app.immich:///oauth-callback'
scopes:
- 'openid'
- 'profile'
- 'email'
userinfo_signed_response_alg: 'none'
token_endpoint_auth_method: 'client_secret_post'
🛑 Assurez-vous de copier-coller correctement les informations du certificat. La clé publique doit être définie dans certificate_chain. La clé privée doit être définie dans key.
Remplacez toutes les entrées rnmkcy.eu par celles de vos domaines FQDN.
Assurez-vous d’ajuster correctement les paramètres clés suivants à votre environnement :
- hmac_secret
- certificate_chain
- key
- allowed_origins
- client_secret
- Veuillez définir le hachage
$pbkdf2du mot de passe et non le mot de passe en clair - redirect_uris
Après avoir ajusté la configuration d’Authelia, vérifiez et redémarrez-le pour appliquer la nouvelle configuration. Inspectez activement les journaux des conteneurs pour détecter d’éventuels problèmes.
1
2
3
4
5
# en mode su
# vérification
authelia validate-config --config /etc/authelia/configuration.yml
# relancer
systemctl restart authelia
Immich - Configuration OAuth
La configuration OAuth Immich peut être ajustée en vous connectant à l’application web en tant qu’administrateur.
Accédez à votre instance web Immich et connectez-vous en tant qu’administrateur.
Voici une brève explication des paramètres clés :
- issuer_url:
https://auth.rnmkcy.eu
il s’agit du nom de domaine complet (FQDN) de votre instance Authelia - client_id:
immich
Il s’agit du nom du client défini dans le fichier configuration.yml d’Authelia - client_secret:
-G3xxxxxxxxxxxxxxxxxxxxx
Il s’agit du secret client sous forme de mot de passe en clair (Random Password). Défini dans le fichier configuration.yml d’Authelia comme $pbkdf2 hachage du mot de passe. - scope:
openid email profile
Peut être laissé tel quel - id_token_signed_response_alg:
RS256
Pour Authelia, veuillez choisir RS256. - userinfo_signed_response_alg:
none - Inscription automatique:
DESACTIVEE, Démarrage automatique du flux d’authentification OAuth/OIDC. Si cette option est activée, l’option d’authentification locale avec nom d’utilisateur et mot de passe ne sera plus disponible.
Ensuite, vous pouvez cliquer sur le bouton Enregistrer et tester le SSO OIDC nouvellement configuré.
Se déconnecter de la session en cours.
Les applications web et mobile d’Immich afficheront un nouveau bouton
Login with OAuthpour se connecter via OAuth/OIDC. Cliquez simplement sur ce bouton, authentifiez-vous sur Authelia et vous serez redirigé vers Immich en tant qu’utilisateur authentifié.
Docker Immich cli
Docker cli
Arrêter et supprimer tous les containers
1
2
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Suppression de toutes les images Docker
Si vous devez supprimer toutes les images de votre système, utilisez la commande suivante :
1
docker rmi $(docker images -q)
Volumes: docker volume ls
1
2
3
4
DRIVER VOLUME NAME
local 6759a084ed614d62f55591939193e70040dea6c63a9ff363e5ff71218f9d2e71
local 772714802d90e4f60d007649df17e40552a000308d2b26ba00156460648f95f6
local immich_model-cache
Supprimer les volumes
1
2
3
docker volume rm immich_model-cache
docker volume rm 6759a084ed614d62f55591939193e70040dea6c63a9ff363e5ff71218f9d2e71
docker volume rm 772714802d90e4f60d007649df17e40552a000308d2b26ba00156460648f95f6
Réseaux: docker network ls
1
2
3
4
5
NETWORK ID NAME DRIVER SCOPE
edfc6860b686 bridge bridge local
4704cd997213 host host local
4f59432079d3 immich_default bridge local
d57684d7dba7 none null local
Pour supprimer un réseau Docker spécifique, utilisez la commande docker network rm suivie de l’ID ou du nom du réseau.
1
docker network rm immich_default
Désinstaller Docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Remove unused data
docker system prune --all --volumes
# Remove all services
docker service rm $(docker service ls -q)
# Remove all containers
docker rm -f $(docker ps -aq)
# Remove all images
docker rmi -f $(docker images -aq)
# Remove all volumes
docker volume rm $(docker volume ls -q)
Immich Cli
Liste des containers: docker ps
1
2
3
4
5
6
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b859c6a470da ghcr.io/immich-app/immich-server:release "tini -- /bin/bash s…" 27 hours ago Up 27 hours (healthy) 0.0.0.0:2283->2283/tcp, [::]:2283->2283/tcp immich_server
851b32a59d0b ghcr.io/immich-app/immich-machine-learning:release "tini -- python -m i…" 3 days ago Up 2 days (healthy) immich_machine_learning
317aeaf6ce72 ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0 "/usr/local/bin/immi…" 3 days ago Up 2 days (healthy) 5432/tcp immich_postgres
9f4520f5586e valkey/valkey:8-bookworm "docker-entrypoint.s…" 3 days ago Up 2 days (healthy) 6379/tcp immich_redis
Lier un container
1
2
3
docker exec -it <id or name> <command> # attach to a container with a command
docker exec -it immich_server bash
docker exec -it immich_machine_learning bash
Se lier au serveur
1
docker exec -it immich_server bash
Liste des utilisateurs: immich-admin list-users
``
Initializing Immich v1.134.0
Detected CPU Cores: 2
[
{
id: ‘9e4c8992-8987-4840-9197-219ec8be1f67’,
email: ‘yann@yanfi.net’,
name: ‘yann’,
profileImagePath: ‘’,
avatarColor: ‘primary’,
profileChangedAt: 2025-06-10T18:07:16.330Z,
storageLabel: ‘admin’,
shouldChangePassword: true,
isAdmin: false,
createdAt: 2025-06-10T18:07:16.330Z,
deletedAt: null,
updatedAt: 2025-06-10T18:47:44.121Z,
oauthId: ‘9aec801a-75f3-4452-a55d-1d3e94e045fe’,
quotaSizeInBytes: null,
quotaUsageInBytes: 0,
status: ‘active’,
license: null
}
]
1
2
3
Désactiver oauth: `immich-admin disable-oauth-login`
Initializing Immich v1.134.0 Detected CPU Cores: 2 OAuth login has been disabled. ```















