---
title: "Immich avec Docker Compose et hébergement en un clic"
description: "Auto-hébergez Immich, l’alternative open source à Google Photos : sauvegarde mobile, chronologie, albums, reconnaissance faciale et recherche intelligente."
---

[← Tous les templates](https://pethost.dev/fr/templates/) · [Médias](https://pethost.dev/fr/templates/media/)

# Déployez Immich en un clic

Vos photos et vidéos, sauvegardées depuis votre téléphone, avec recherche intelligente, visages et albums

Une alternative auto-hébergée à Google Photos et iCloud Photos.

[Déployer sur Pethost](https://console.pethost.dev/?template=immich)

## Qu’est-ce que Immich ?

Immich est une bibliothèque de photos et de vidéos auto-hébergée, que l’on fait tourner à la place de Google Photos ou d’iCloud Photos. Ses applications pour iPhone et Android sauvegardent la pellicule en arrière-plan, et la page web comme les applications montrent tout sur une seule chronologie, avec des albums, des favoris, une archive, une carte de l’endroit où chaque photo a été prise et des souvenirs du même jour les années précédentes.

L’apprentissage automatique, qui tourne dans Immich sans rien envoyer à un service cloud, trouve les personnes sur vos photos et regroupe leurs visages, lit le texte dans les images et fait marcher la recherche intelligente, qui retrouve une photo à partir de mots comme « chien sur une plage ». Immich conserve les fichiers RAW, les Live Photos et les photos animées, partage des albums ou des liens avec qui vous voulez et, avec le « Partage avec les partenaires », laisse une autre personne voir votre bibliothèque. Chaque personne sur le serveur a son propre compte.

Ce template fait tourner le serveur d’Immich, son apprentissage automatique, Valkey et son PostgreSQL avec les extensions vectorielles qu’il lui faut, sa bibliothèque dans un volume. L’administrateur est créé à partir de l’e-mail et du mot de passe que vous indiquez avant qu’Immich ne réponde à qui que ce soit, et les liens partagés prennent l’adresse du projet. Immich demande au moins 6 GB de mémoire et 2 cœurs, il tient donc dans l’offre Grow ; vos photos occupent le disque, alors surveillez sa taille à mesure que la bibliothèque grandit.

## Hébergement de Immich sur Pethost

1. Vous vous connectez à Pethost avec une clé d’accès, GitHub ou Google. Pas encore de machine ? Vous choisissez une offre, et le lien attend qu’elle soit prête.
2. Nouveau projet s’ouvre sur Immich. Vous remplissez ce qu’il demande et cliquez sur Créer le projet : **E-mail**, **Mot de passe administrateur**.
3. En une minute ou deux, Immich tourne à sa propre adresse en HTTPS. Ses secrets sont créés au hasard, et ses données sont dans la sauvegarde nocturne.
4. C’est un projet comme les autres : vous ou votre agent pouvez le modifier, revenir à une version précédente ou le restaurer.

## Questions sur Immich

**Immich est-il gratuit ?**

Oui. Immich est open source sous licence AGPL-3.0, et ses créateurs disent que toutes ses fonctions sont gratuites pour toujours, sans rien derrière un paywall. Pour soutenir le projet, vous pouvez l’acheter pour vous ou pour un serveur, ce qui ne débloque rien de plus.

**Comment sauvegarder les photos de mon téléphone dans Immich ?**

Installez l’application Immich depuis l’App Store ou Google Play, indiquez l’adresse de votre Immich comme « URL du point d’accès au serveur », connectez-vous et activez la « Sauvegarde » pour les albums que vous choisissez. L’application envoie les nouvelles photos et vidéos en arrière-plan, et ignore ce qui s’y trouve déjà.

**Immich reconnaît-il les visages ?**

Oui. Son apprentissage automatique, qui tourne dans Immich et n’envoie vos photos nulle part, détecte les visages sur chaque photo et les regroupe dans « Personnes », où vous leur donnez un nom. Il lit aussi le texte dans les images, et sa recherche intelligente trouve des photos d’après ce qu’elles montrent.

**De combien de mémoire et de disque Immich a-t-il besoin ?**

Immich demande au moins 6 GB de mémoire et 2 cœurs, et prend ici environ 1,5 GB au repos, environ 2,5 GB pendant que l’apprentissage automatique traite de nouvelles photos, et davantage au premier envoi, quand il télécharge ses modèles. Le disque contient vos originaux plus les miniatures et les vidéos transcodées : prévoyez donc plus que la taille de la bibliothèque elle-même.

**Immich est-il sûr pour l’unique copie de mes photos ?**

Immich lui-même conseille une sauvegarde 3-2-1 des photos auxquelles vous tenez : trois copies, sur deux types de support, dont une ailleurs. Pethost sauvegarde les volumes du projet chaque nuit, et Immich fait aussi lui-même des dumps de sa base de données ; gardez quand même les originaux à un autre endroit.

**De combien de mémoire et de disque Immich a-t-il besoin ?**

Immich prend environ 1,5 GB de mémoire au repos avec sa base de données et l’apprentissage automatique, environ 2,5 GB pendant qu’il traite de nouvelles photos, et davantage au premier envoi, quand il télécharge ses modèles ; le disque, c’est votre bibliothèque plus ses miniatures et ses vidéos. Sur Pethost, l’offre Grow lui suffit, avec de la place pour d’autres applications à côté.

## Le fichier Docker Compose de Immich

Le template, c’est ce compose.yaml et les variables écrites dans le .env du projet à sa création. Pethost exécute le fichier tel qu’il est écrit.

**Conteneurs :** immich-server (ghcr.io/immich-app/immich-server:v3), immich-machine-learning (ghcr.io/immich-app/immich-machine-learning:v3), redis (valkey/valkey:9), database (ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0).

**Volumes, dans la sauvegarde nocturne :** library, db, model-cache.

```
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:v3
    restart: unless-stopped
    environment:
      DB_HOSTNAME: database
      DB_USERNAME: postgres
      DB_PASSWORD: ${DB_PASSWORD}
      DB_DATABASE_NAME: immich
      REDIS_HOSTNAME: redis
      TZ: ${TZ:-Etc/UTC}
      URL: ${URL}
      ADMIN_EMAIL: ${ADMIN_EMAIL}
      ADMIN_PASSWORD: ${ADMIN_PASSWORD}
    # A new Immich makes whoever opens it first its administrator. So its first start runs it on
    # port 2284, which nobody reaches, signs the administrator up there with the email and password
    # given, and sets the address shared links use; only then does Immich answer on 2283.
    command:
      - |
        set -e
        if [ ! -f /data/.pethost-admin ]; then
          # In a process group of its own, so that its workers stop with it.
          IMMICH_PORT=2284 setsid start.sh &
          setup=$$!
          SETUP_PID=$$setup node -e '
            const base = "http://127.0.0.1:2284/api";
            const { URL: url, ADMIN_EMAIL: email, ADMIN_PASSWORD: password } = process.env;
            const json = { "content-type": "application/json" };
            const call = async (path, options) => {
              const response = await fetch(base + path, options);
              if (!response.ok) throw new Error(path + ": " + response.status + " " + (await response.text()));
              return response.json();
            };
            const setUp = async () => {
              const { isInitialized } = await call("/server/config");
              if (isInitialized) return;
              const name = email.split("@")[0];
              await call("/auth/admin-sign-up", { method: "POST", headers: json, body: JSON.stringify({ email, password, name }) });
              const { accessToken } = await call("/auth/login", { method: "POST", headers: json, body: JSON.stringify({ email, password }) });
              const headers = { ...json, authorization: "Bearer " + accessToken };
              const config = await call("/system-config", { headers });
              config.server.externalDomain = url;
              await call("/system-config", { method: "PUT", headers, body: JSON.stringify(config) });
            };
            (async () => {
              let failure;
              for (let i = 0; i < 300; i++) {
                // Immich stops if it cannot start: the container starts again and so does this.
                try {
                  process.kill(Number(process.env.SETUP_PID), 0);
                } catch {
                  process.exit(1);
                }
                try {
                  return await setUp();
                } catch (error) {
                  failure = error;
                  await new Promise((done) => setTimeout(done, 1000));
                }
              }
              console.error(failure);
              process.exit(1);
            })();
          '
          kill -- -$$setup
          wait $$setup || true
          while kill -0 -- -$$setup 2>/dev/null; do sleep 1; done
          touch /data/.pethost-admin
        fi
        unset ADMIN_PASSWORD
        exec start.sh
    volumes:
      - library:/data
    depends_on:
      redis:
        condition: service_started
      database:
        condition: service_healthy
    # Its first start makes the database and the administrator before it answers on 2283.
    healthcheck:
      test: ["CMD-SHELL", "immich-healthcheck"]
      interval: 30s
      start_period: 10m
      start_interval: 5s

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:v3
    restart: unless-stopped
    volumes:
      - model-cache:/cache

  redis:
    image: valkey/valkey:9
    restart: unless-stopped
    healthcheck:
      test: redis-cli ping | grep -q PONG || exit 1

  database:
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    restart: unless-stopped
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: immich
      POSTGRES_INITDB_ARGS: --data-checksums
    shm_size: 128mb
    volumes:
      - db:/var/lib/postgresql/data

volumes:
  library:
  db:
  model-cache:
```

[compose.yaml](https://pethost.dev/templates/immich/compose.yaml)[Le voir sur GitHub](https://github.com/pethost-dev/templates/tree/main/immich)

## [Aussi dans Médias](https://pethost.dev/fr/templates/media/)

- [**Owncast**Vidéo en direct et chat sur votre propre page](https://pethost.dev/fr/templates/owncast/)
- [**Navidrome**Un serveur de musique qui diffuse votre propre collection](https://pethost.dev/fr/templates/navidrome/)
- [**RomM**Une bibliothèque et un lecteur dans le navigateur pour vos jeux rétro](https://pethost.dev/fr/templates/romm/)
- [**Komga**Un serveur et une liseuse web pour vos BD, mangas et livres numériques](https://pethost.dev/fr/templates/komga/)
- [**Lychee**Une galerie pour téléverser, classer et partager vos photos](https://pethost.dev/fr/templates/lychee/)
- [**Audiobookshelf**Votre propre serveur de livres audio et de podcasts : écoutez dans le navigateur ou les applis, avec la progression gardée d’un appareil à l’autre](https://pethost.dev/fr/templates/audiobookshelf/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Templates](https://pethost.dev/fr/templates/)
- [À propos](https://pethost.dev/about/)
- [Docs](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/fr/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [Conditions](https://pethost.dev/terms/)
- [Confidentialité](https://pethost.dev/privacy/)
- [Remboursements](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Bases de données

- [Postgres](https://pethost.dev/fr/postgres/)

Comparatifs

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/fr/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/fr/blog/coolify-cloud-vs-dokploy-cloud/)
- [Tarifs Railway vs Render vs Fly.io](https://pethost.dev/fr/blog/railway-vs-render-vs-fly-io-pricing/)
- [Hébergement Docker Compose managé](https://pethost.dev/fr/blog/managed-docker-compose-hosting/)

Alternatives

- [Alternatives à Railway](https://pethost.dev/fr/blog/railway-alternatives/)
- [Alternatives à Heroku](https://pethost.dev/fr/blog/heroku-alternatives/)
- [Alternatives à Dokploy](https://pethost.dev/fr/blog/dokploy-alternatives/)
- [Alternatives à Coolify](https://pethost.dev/fr/blog/coolify-alternatives/)
- [Alternatives à Render](https://pethost.dev/fr/blog/render-alternatives/)
- [Alternatives à Sliplane](https://pethost.dev/fr/blog/sliplane-alternatives/)
