SSD Nodes Learn Hosting plans →
Guides Matt ConnorPar Matt Connor

Immich auto-hébergé : 6 Go de RAM et mises à niveau sûres

Vérifiez la RAM réellement nécessaire, le port 2283 derrière HTTPS et l’erreur « exit 137 ». Découvrez pourquoi Immich v3 refuse pgvecto.rs et comment restaurer.

Ce que vous allez mettre en place

Immich est un service auto-hébergé de sauvegarde de photos et de vidéos, une véritable alternative à Google Photos. Son application mobile importe automatiquement le contenu de votre pellicule en arrière-plan. Le service propose une timeline, des albums, la reconnaissance faciale et une recherche basée sur le machine learning, capable de trouver « plage » ou une personne sans que vous ayez à ajouter le moindre tag. Vous l’exécutez sur un VPS que vous contrôlez, les fichiers originaux restent sur votre disque et personne ne les analyse pour vous vendre quoi que ce soit. Si vous hésitez encore avec l’autre candidat évident, notre comparatif PhotoPrism et Immich met côte à côte leurs besoins minimaux en RAM, leurs applications mobiles et leurs commandes de sauvegarde.

L’installation utilise quatre conteneurs définis dans le fichier Docker Compose fourni par le projet. Cette étape prend dix minutes. Le reste de ce guide concerne les difficultés réelles : le conteneur de machine learning consomme beaucoup de mémoire sur une petite machine, les fichiers originaux occupent rapidement l’espace disque, l’application mobile a besoin de l’URL exacte du serveur et vous devez placer HTTPS devant Immich avant de l’exposer hors de votre réseau. Immich publie en outre assez souvent des changements incompatibles pour qu’un docker compose pull imprudent puisse empêcher votre serveur de démarrer. Prenez ces quatre points au sérieux et Immich est très fiable. Ignorez-les et vous risquez de perdre un week-end.

Prérequis et points à connaître

  • RAM : la documentation officielle indique 6 GB minimum et 8 GB recommandés. Considérez 4 GB avec du swap comme le strict minimum. Les conteneurs immich-server et Postgres sont modestes. Le conteneur immich-machine-learning est le plus gourmand : il charge les modèles CLIP et de reconnaissance faciale en RAM pour créer les index de recherche. Sur une machine de 2 GB, le kernel le tue. Ajoutez du swap, même avec 4 GB de RAM.
  • Disque : prévoyez un espace suffisant pour toute votre bibliothèque, avec une marge. Vos originaux sont copiés intégralement. Immich génère aussi des miniatures et des images d’aperçu, soit environ 10–20 % d’espace supplémentaire. Une photothèque de 200 GB nécessite un volume de 300 GB. Postgres est peu volumineux en comparaison.
  • CPU : n’importe quel VPS KVM moderne convient, mais le ML sur CPU est lent. L’indexation de la recherche intelligente d’un import volumineux peut s’exécuter en arrière-plan pendant plusieurs heures. C’est normal. Un GPU n’est pas nécessaire.
  • Un nom de domaine pointant vers le VPS. L’application mobile privilégie fortement un endpoint HTTPS. Vous aurez aussi besoin d’un reverse proxy en amont. Cette configuration ressemble à celle d’une instance Nextcloud auto-hébergée avec Docker, TLS et sauvegardes : Immich est l’équivalent photo de ce serveur de fichiers.
  • Docker et le plugin Compose installés : Docker Engine et le plugin Compose v2 provenant du dépôt apt officiel de Docker, exactement comme indiqué dans notre guide sur les bases de Docker Compose.

Étape 1 : Ajoutez du swap avant toute autre chose

La cause la plus fréquente d’échec d’Immich sur un petit VPS est l’arrêt forcé du conteneur ML par l’OOM killer. Commencez par fournir au kernel un espace où déplacer temporairement des pages mémoire.

sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
free -h

free -h doit maintenant afficher une ligne Swap: de 4.0Gi. Cela n’accélérera pas ML. Le swap sert de tampon et ne constitue pas une garantie, mais le conteneur a ainsi beaucoup moins de risques de s’arrêter en plein indexage sur une machine équipée de 4 GB de RAM.

Étape 2 : Récupérez les fichiers compose et env officiels, et utilisez-les tels quels

Immich fixe les versions de ses services et, surtout, l’image de sa base de données dans les fichiers qu’il fournit. Ne copiez pas un fichier compose depuis un blog, y compris celui-ci, comme source de référence. Téléchargez les fichiers de la release :

sudo mkdir -p /opt/immich && cd /opt/immich
sudo wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
sudo wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

Ils proviennent de la release taguée, les références d’image correspondent donc aux bonnes versions. Le fichier compose définit quatre services. Il est utile de savoir à quoi sert chacun avant de modifier quoi que ce soit :

  • immich-server (ghcr.io/immich-app/immich-server, conteneur immich_server), l’API et l’interface web, en écoute sur le port 2283. Il monte vos téléchargements sur /data.
  • immich-machine-learning (ghcr.io/immich-app/immich-machine-learning, conteneur immich_machine_learning), la recherche CLIP et la reconnaissance faciale. Il met en cache les modèles téléchargés dans un volume model-cache. C’est le service qui consomme le plus de mémoire.
  • database (conteneur immich_postgres), Postgres avec l’extension vectorielle VectorChord, qui assure la recherche par similarité. Le tag de l’image est épinglé par digest directement dans le fichier compose, par exemple ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:.... Les anciennes installations utilisaient pgvecto.rs ; sa prise en charge a été supprimée dans Immich v3.0. Toute installation effectuée aujourd’hui utilise donc VectorChord. Ne modifiez jamais ce tag manuellement.
  • redis (conteneur immich_redis), une instance Valkey/Redis pour les files d’attente de tâches.

Étape 3 : Configurez .env, où se trouvent vos photos et votre base de données

Ouvrez .env et définissez quatre éléments. Tout ce qui se trouve sous la ligne marquée reste inchangé.

# Where original uploads are stored on the host
UPLOAD_LOCATION=/opt/immich/library

# Where the Postgres data lives. NEVER put this on an NFS/network share.
DB_DATA_LOCATION=/opt/immich/postgres

# "v3" is a floating tag that tracks the latest v3.x. Pin a full tag like
# v3.0.2 instead; then you upgrade on purpose, not by surprise.
IMMICH_VERSION=v3.0.2

# Change this to a long random string. Letters and digits only.
DB_PASSWORD=REPLACE_WITH_A_LONG_RANDOM_STRING

# Set your timezone so timestamps and "on this day" line up
TZ=Europe/London

###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

Deux règles qui évitent des problèmes. UPLOAD_LOCATION doit pointer vers votre disque de données principal. Si vous ajoutez ultérieurement un volume de données, définissez dès le départ ce paramètre sur son chemin de montage. Le déplacer plus tard implique de déplacer les miniatures et de mettre à jour les chemins des ressources. DB_DATA_LOCATION doit être placé sur un disque local : Postgres se corrompt sur un partage NFS ou SMB, et la documentation l’indique clairement. Utilisez uniquement des lettres et des chiffres dans DB_PASSWORD pour éviter une catégorie de problèmes d’échappement dans les chaînes de connexion.

Étape 4 : Premier démarrage et création du compte administrateur

cd /opt/immich
sudo docker compose up -d
sudo docker compose ps

Le résultat attendu est de quatre conteneurs, tous running, puis finalement healthy :

NAME                      STATUS
immich_machine_learning   Up (healthy)
immich_postgres           Up (healthy)
immich_redis              Up (healthy)
immich_server             Up (healthy)

Le premier up télécharge plusieurs gigaoctets d’images. L’opération peut donc prendre un certain temps. Suivez sa progression avec sudo docker compose logs -f immich-server ; une fois prêt, le serveur indique dans les journaux qu’il écoute sur le port 2283. Ouvrez ensuite http://YOUR_SERVER_IP:2283 dans un navigateur. Lors de la première visite, l’assistant Getting Started s’affiche. Le premier compte créé est le compte administrateur. Définissez un mot de passe robuste. Ce compte gère les paramètres du serveur, les utilisateurs et la configuration ML dont vous aurez besoin plus tard.

Étape 5 : l’application mobile et la sauvegarde en arrière-plan

Installez « Immich » depuis l’App Store ou le Play Store. L’écran de connexion demande une Server Endpoint URL. Saisissez l’URL complète, schéma compris, par exemple https://photos.example.com (l’application ajoute elle-même /api). Connectez-vous avec le compte que vous venez de créer, puis ouvrez l’écran Backup de l’application, sélectionnez les albums à protéger (généralement Camera et Screenshots), puis activez Background backup. Sur iOS, les sauvegardes en arrière-plan sont limitées par le système d’exploitation. Les téléversements au premier plan s’exécutent toujours. Ceux en arrière-plan s’exécutent lorsque le système d’exploitation l’autorise.

C’est précisément à cette étape que les utilisateurs restent souvent bloqués. Lisez donc l’étape 6 avant d’essayer de résoudre le problème dans l’application.

Étape 6 : HTTPS via un reverse proxy et règle de l’URL complète

L’application mobile exige réellement HTTPS dès qu’elle sort de votre réseau domestique. Placez un reverse proxy devant le port 2283 et faites-y terminer TLS. Si vous exécutez déjà plusieurs conteneurs, Traefik avec TLS automatique pour plusieurs applications Docker est l’option la plus propre : un bloc de labels achemine photos.example.com vers le conteneur immich-server et récupère le certificat à votre place. Si vous préférez nginx, le guide Let’s Encrypt avec Certbot et nginx vous fournit un certificat et un bloc proxy_pass http://127.0.0.1:2283;. Une fois le proxy en place, l’ajout d’un nouveau service consiste surtout à créer un sous-domaine. C’est ainsi qu’une interface multimédia comme Halcyon, le thème de vidéoclub des années 90 pour Jellyfin peut fonctionner à côté d’Immich sur le même serveur. Il en va de même pour un HarnessRouter auto-hébergé qui place Codex et Claude Code derrière une seule API, qui se lie volontairement à l’interface loopback et n’est accessible qu’une fois que le proxy termine TLS devant lui. Modifiez donc son identifiant par défaut avant de lui associer un sous-domaine. Tous les conteneurs ne doivent toutefois pas avoir un nom d’hôte public : un outil réservé à l’administration, comme un scanner de sécurité open-kritt auto-hébergé, doit plutôt rester complètement hors du proxy et être accessible via un tunnel SSH lorsque vous ouvrez rarement son interface. D’autres services n’utilisent pas le proxy, car HTTP ne correspond pas du tout à leur protocole. Un serveur relais RustDesk auto-hébergé en est l’exemple le plus clair : il écoute sur quelques ports TCP et UDP bruts et nécessite des règles de pare-feu plutôt qu’un sous-domaine. Un réglage du proxy est important pour Immich : augmentez la limite de taille des téléversements, car les vidéos des téléphones sont volumineuses. Avec nginx, il s’agit de client_max_body_size 50000M; dans le bloc server. La valeur par défaut de 1 MB rejette les téléversements vidéo avec 413 Request Entity Too Large. Si votre proxy répond également aux défis HTTP-01 de Let’s Encrypt, vérifiez que /.well-known/immich est toujours acheminé vers Immich et non vers le gestionnaire de défis.

La règle appliquée par l’application est la suivante : le point de terminaison doit être accessible exactement à l’URL que vous saisissez. L’application accepte un http://YOUR_SERVER_IP:2283 simple (son indication de connexion est http://your-server-ip:port), mais tout ce qui traverse Internet doit utiliser HTTPS. Un schéma incorrect ou une adresse IP directe sans le port indiqué provoque le message « l’application ne peut pas joindre le serveur ». Ce cas est décrit ci-dessous comme une panne identifiée.

Étape 7 : bibliothèques externes et uploads, importer un arbre de photos existant

Il existe deux façons d’ajouter des photos dans Immich. Elles ne fonctionnent pas de la même manière.

  • Les uploads sont des fichiers dont Immich assure la gestion. L’application ou l’uploader web copie le fichier dans UPLOAD_LOCATION. Immich peut les renommer, les déplacer et les supprimer.
  • Les bibliothèques externes sont des imports en lecture seule de fichiers déjà présents dans un dossier du serveur, par exemple un ancien arbre Pictures ou une exportation NAS. Immich les indexe sur place et les affiche dans la timeline, mais ne modifie et ne supprime jamais les fichiers originaux.

Pour importer un arbre existant, montez-le en lecture seule dans le conteneur du serveur. Modifiez docker-compose.yml sous immich-server: et ajoutez un volume :

  immich-server:
    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
      - /srv/photos:/mnt/media/photos:ro

La directive :ro garantit qu’Immich ne pourra jamais modifier les fichiers originaux. Recréez le conteneur avec sudo docker compose up -d, puis dans l’interface web ouvrez votre avatar → Administration → Bibliothèques externes → Créer une bibliothèque, sélectionnez l’utilisateur propriétaire, cliquez sur Ajouter sous Dossiers et saisissez le chemin du conteneur, /mnt/media/photos, et non le chemin de l’hôte /srv/photos. Cliquez sur Analyser. Utiliser le chemin de l’hôte au lieu de celui du conteneur est l’erreur la plus fréquente avec les bibliothèques externes : l’analyse ne trouve rien et indique 0 fichier.

Étape 8 : la discipline de mise à niveau exigée par Immich

C’est cette étape qui fait la différence entre une instance Immich fonctionnelle et une instance en panne. Immich publie rapidement ses versions et ne rétroporte pas les correctifs ni ne prend en charge les downgrades. Le tag flottant v3 est officiellement pris en charge pour suivre les releases, et Immich cherche à limiter les breaking changes aux versions majeures. Toutefois, chaque pull déclenche une mise à niveau, que vous ayez lu les notes ou non, et une mise à niveau imprévue ne peut pas être annulée. Il est donc utile d’appliquer cette même méthode — épingler la version, puis lire les notes — à tous les conteneurs conservés durablement sur le serveur. C’est pourquoi un agent KiroCrew auto-hébergé est épinglé sur un tag connu comme fonctionnel, au lieu de changer de version au prochain redémarrage. La discipline à suivre :

  1. Épinglez une version. Définissez IMMICH_VERSION avec un tag concret tel que v3.0.2, et non avec le tag flottant v3, qui récupère toujours la dernière version v3.x.
  2. Lisez les notes de version à chaque fois avant la mise à niveau. Elles signalent les breaking changes, notamment celles qui concernent la base de données ou les extensions vectorielles. La release v3.0 en est l’exemple évident : elle a supprimé pgvecto.rs, si bien que les utilisateurs de l’ancienne extension devaient terminer la migration vers VectorChord, introduite dès la v1.133, avant de pouvoir effectuer la mise à niveau.
  3. Sauvegardez d’abord la base de données (étape 9). Faites-le toujours, et redoublez de prudence lorsque les notes mentionnent la base de données.
  4. Récupérez également le nouveau fichier compose. IMMICH_VERSION épingle uniquement les images du serveur et de ML. L’image Postgres est épinglée par digest dans docker-compose.yml. Une version qui nécessite une extension de base de données plus récente est donc fournie avec un nouveau fichier compose. Téléchargez à nouveau les deux fichiers de la release, réappliquez vos valeurs .env, puis effectuez la mise à niveau.
  5. Mettez d’abord à jour vos clients mobiles. Le serveur ne communique qu’avec la version majeure correspondante, et l’application est généralement compatible avec la version majeure actuelle et la précédente. Lorsque le serveur est plus récent que l’application, les releases actuelles (v3.3.1, vérifiées le 2026-10-10) affichent une notification Une mise à jour de l’application est disponible avec un bouton Mettre à jour sur le téléphone. Immich recommande donc de mettre à jour tous les clients mobiles avant le serveur.

Les commandes à exécuter une fois les nouveaux fichiers en place :

cd /opt/immich
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune

Étape 9 : sauvegardez la base de données et les originaux, puis testez la restauration

Une sauvegarde d’Immich comprend deux éléments. L’un sans l’autre est inutilisable. La base de données contient la structure des albums, les visages, les index de recherche et l’association entre chaque asset et son fichier. Le répertoire des originaux contient les photos elles-mêmes. Restaurer un seul de ces éléments produit soit des photos sans organisation, soit une structure vide qui pointe vers des fichiers absents. Cette structure en deux parties n’est pas propre à Immich : un centre de support Chatwoot auto-hébergé nécessite la même association entre un dump PostgreSQL et son répertoire d’uploads. Sinon, la boîte de réception restaurée revient avec toutes ses pièces jointes manquantes. Copier le répertoire de données PostgreSQL comme une arborescence de fichiers peut sembler éviter l’étape du dump, mais cela ne constitue pas une sauvegarde utilisable. C’est un piège que le guide complet de sauvegarde et de restauration d’Immich traite avec le cas d’une restauration qui laisse une timeline vide.

Effectuez le dump de la base de données avec pg_dump depuis le conteneur PostgreSQL, spécifiquement pour la base immich, et non pour l’ensemble du cluster :

sudo docker exec -t immich_postgres pg_dump --clean --if-exists \
  --dbname=immich --username=postgres | gzip > /opt/immich/immich-db-$(date +%F).sql.gz

Sauvegardez ensuite UPLOAD_LOCATION, c’est-à-dire toute l’arborescence /opt/immich/library, notamment ses sous-répertoires library/, upload/ et profile/, avec restic, rsync ou borg vers une autre machine ou un object storage. Quelle que soit la méthode de planification utilisée, une entrée cron ou un timer systemd, cette tâche doit disposer d’un moyen de vous alerter en cas d’échec. Une unité systemd OnFailure= configurée pour utiliser votre propre serveur push ntfy envoie un message sur votre téléphone la nuit où un dump échoue, au lieu de vous laisser le découvrir pendant une restauration. Effectuez d’abord la sauvegarde de la base de données, puis celle des fichiers. Ainsi, le dump ne référencera jamais une photo que la sauvegarde des fichiers n’a pas encore copiée. Sauvegardez séparément les bibliothèques externes depuis leur source réelle. Immich ne les gère pas.

Passons maintenant à l’étape que tout le monde ignore : testez la restauration. Une restauration doit être exécutée sur une stack neuve, dont le serveur n’a jamais démarré, avec une image PostgreSQL dont l’extension vector est compatible avec le dump. C’est précisément pourquoi vous ne devez jamais choisir le tag de l’image DB au hasard. Sur une machine de test utilisant le même compose et .env, supprimez tout état existant, démarrez uniquement la base de données, puis chargez le dump :

cd /opt/immich
sudo docker compose down -v
sudo docker compose pull
sudo docker compose create
sudo docker start immich_postgres
sleep 10
gunzip --stdout immich-db-2026-07-15.sql.gz |
  sed "s/SELECT pg_catalog.set_config('search_path', '', false);/SELECT pg_catalog.set_config('search_path', 'public, pg_catalog', true);/g" |
  sudo docker exec -i immich_postgres psql --dbname=immich --username=postgres --single-transaction --set ON_ERROR_STOP=on
sudo docker compose up -d

La réécriture sed de search_path est obligatoire sur une base de données VectorChord. Si vous l’omettez, la restauration s’interrompt en cours d’exécution. Lorsque la stack redémarre avec vos originaux en place, ouvrez l’interface web. Si vos photos et vos albums sont présents, votre sauvegarde fonctionne. Si vous n’avez jamais effectué ce test, vous n’avez pas de sauvegarde, seulement un espoir.

Modes d’échec et chaînes affichées

Le conteneur ML est arrêté par l’OOM killer. sudo docker compose logs immich-machine-learning se termine brutalement, docker compose ps indique que Restarting, et le code de sortie est 137. sudo dmesg | grep -i oom le confirme : Out of memory: Killed process ... (python3). Les tâches de recherche et de reconnaissance faciale restent alors bloquées. La cause est un manque de RAM pour les modèles. Procédez dans cet ordre : ajoutez du swap (étape 1), augmentez la RAM du VPS ou, si ce n’est vraiment pas possible, ouvrez Administration → Settings → Machine Learning Settings et désactivez le paramètre général de machine learning. Cette option désactive toutes les fonctions ML en une seule fois. Désactiver uniquement Smart Search et Facial Recognition ne suffit pas, car l’OCR et les autres types de modèles restent activés par défaut. Vous conservez les sauvegardes et les albums, mais perdez la recherche par contenu. Supprimer le service immich-machine-learning du fichier compose produit le même effet.

Le serveur Immich refuse de démarrer après une mise à niveau. Le conteneur Postgres peut fonctionner correctement. C’est immich_server qui vérifie la version de l’extension vectorielle au démarrage et refuse de démarrer. Son journal se répète avec une ligne telle que The database currently has VectorChord 0.5.3 activated, but the Postgres instance only has 0.4.2 available. This most likely means the extension was downgraded. ou, avec les anciennes stacks, The pgvecto.rs extension is not available in this Postgres instance.. La cause est une image de base de données dont la version de l’extension est antérieure à celle vers laquelle vos données ont été mises à niveau. Cela arrive presque toujours après la modification manuelle du tag de l’image ou la restauration d’un dump plus récent sur une image plus ancienne. Pour corriger le problème, utilisez l’image Postgres correspondante, récupérez le fichier compose de la release correspondant à votre base de données, ne revenez pas à une version antérieure et restaurez uniquement sur une image compatible.

L’application mobile ne peut pas joindre le serveur. L’écran de connexion affiche une erreur telle que Could not connect to server après la saisie de l’URL. Les causes habituelles sont les suivantes : vous avez saisi http:// alors que le proxy ne sert que https:// ; vous vous êtes connecté directement au backend sans indiquer le port, et l’application a donc essayé example.com (port 443) au lieu de example.com:2283 ; le reverse proxy ne transmet pas /api ; ou un proxy qui gère les challenges HTTP-01 de Let’s Encrypt achemine /.well-known/immich vers un autre service qu’Immich. Saisissez l’URL complète https://photos.example.com et vérifiez d’abord qu’elle se charge dans le navigateur du téléphone. Si le navigateur fonctionne mais pas l’application, le proxy supprime le chemin ou achemine mal /.well-known/immich. Le certificat peut également être autosigné, ce que l’application refuse avec une erreur de handshake, sauf si vous activez la prise en charge des certificats autosignés dans ses paramètres.

Espace disque épuisé pendant l’importation. Les téléversements échouent, les miniatures deviennent vides et les journaux affichent ENOSPC: no space left on device ou, côté Postgres, could not extend file ... No space left on device. df -h indique que le volume UPLOAD_LOCATION est rempli à 100%. C’est pourquoi il faut dimensionner le disque avant d’importer une bibliothèque volumineuse. Pour récupérer le service, attachez un volume plus grand, arrêtez la stack, déplacez UPLOAD_LOCATION dessus, mettez à jour .env, puis redémarrez la stack. Vous pouvez aussi étendre le disque existant si votre fournisseur le permet. Postgres peut se bloquer lorsqu’il n’y a plus d’espace. Libérez de l’espace et redémarrez le conteneur de base de données avant de conclure à une corruption.

FAQ

De combien de RAM et d’espace disque Immich a-t-il besoin ?

Les exigences officielles d’Immich sont de 6 GB de RAM au minimum et de 8 GB recommandés. En pratique, 4 GB avec du swap constituent le minimum pour une petite bibliothèque. Configurez du swap dans tous les cas, car c’est le conteneur de machine learning qui provoque les pics de consommation. Pour l’espace disque, prévoyez la taille complète de votre bibliothèque, plus environ 10–20 % pour les miniatures et les aperçus générés. Utilisez du stockage local et ne placez jamais le répertoire de données PostgreSQL sur un partage réseau. Si vous cherchez encore quels services installer, le guide des services à auto-héberger en 2026 compare l’empreinte d’Immich à celle d’autres services.

Puis-je exécuter Immich sans GPU ?

Oui. Le conteneur de machine learning fonctionne très bien sur CPU. Un GPU accélère uniquement l’indexation de la recherche intelligente et, avec la bonne variante d’image, le transcodage vidéo. Sur CPU, l’indexation initiale d’une grande bibliothèque peut prendre plusieurs heures en arrière-plan. Elle ne bloque toutefois ni les sauvegardes ni la navigation. Si votre serveur est trop limité pour exécuter le machine learning, vous pouvez le désactiver complètement avec le bouton général dans les paramètres d’administration et conserver toutes les autres fonctions.

Comment mettre Immich à niveau en toute sécurité ?

Épinglez IMMICH_VERSION sur un tag précis comme v3.0.2, lisez les notes de version avant chaque mise à niveau et sauvegardez d’abord la base de données. Comme l’image PostgreSQL est épinglée dans docker-compose.yml et non par IMMICH_VERSION, téléchargez à nouveau le fichier compose et example.env depuis la version cible, réappliquez vos valeurs, puis exécutez docker compose pull && docker compose up -d. Ne laissez jamais la version évoluer automatiquement sans surveillance. Immich ne prend pas en charge les retours à une version antérieure. Une mise à niveau que vous n’avez pas vérifiée ne peut donc pas être annulée.

Que dois-je sauvegarder exactement ?

Deux éléments, ensemble : un pg_dump de la base de données immich et l’intégralité du répertoire des originaux UPLOAD_LOCATION. La base de données contient les albums, les visages et la correspondance entre les assets et les fichiers. Le répertoire contient les photos réelles. Une restauration nécessite les deux éléments, ainsi qu’une image de base de données avec une extension vectorielle compatible. Effectuez d’abord le dump de la base de données, puis copiez les fichiers. Testez la restauration au moins une fois sur un serveur de test. Une sauvegarde non testée n’est pas une sauvegarde.

Comment importer mon dossier de photos existant ?

Montez le dossier en lecture seule dans le conteneur immich-server en tant que volume supplémentaire, par exemple - /srv/photos:/mnt/media/photos:ro. Recréez ensuite le conteneur. Dans Administration → External Libraries, créez une bibliothèque et ajoutez le chemin container /mnt/media/photos. Immich indexe les fichiers sur place et ne les modifie ni ne les supprime. L’erreur la plus fréquente consiste à saisir le chemin de l’hôte au lieu du chemin du conteneur. L’analyse ne trouve alors aucun fichier.