Deployn

Immich installieren: Docker-Anleitung für Version 3

Immich mit Docker Compose installieren und einrichten: Admin-Konto, Reverse Proxy mit Caddy, App und Backup. Die Google-Photos-Alternative für VPS und NAS.

Veröffentlicht am Aktualisiert am
Immich installieren: Docker-Anleitung für Version 3 hero image
Inhalt
Getestet mit
Immich 3.3.6Docker 29.9Ubuntu 24.04
Zuletzt geprüft am

In einer Welt, in der Datenschutz immer wichtiger wird, ist Immich eine erfrischende Alternative zu den großen Cloud-Diensten wie Google Photos oder iCloud. Es handelt sich dabei um eine selbstgehostete, quelloffene Lösung, die dir volle Kontrolle über deine Fotos und Videos gibt. Immich ist kostenlos. Du zahlst nur für den Server, auf dem es läuft. In diesem Artikel zeige ich dir Schritt für Schritt, wie du Immich mit Docker auf deinem Homeserver, NAS oder einem anderen Linux-basierten System installierst und einrichtest. Getestet habe ich die Anleitung mit Immich 3.3.6 auf einem frischen Ubuntu-24.04-Server.

Open Source: Was macht Immich so besonders?

Immich ist mehr als nur eine weitere Fotoverwaltung. Der Entwickler Alex Tran hat die Software ursprünglich entwickelt, um die Fotos seines Neugeborenen sicher und privat zu speichern - eine Alternative zu Google Photos, die er selbst kontrollieren konnte. Heute ist Immich deutlich ausgereifter, mit beeindruckenden Funktionen:

  • Moderne, Google Photos-ähnliche Benutzeroberfläche
  • Automatische Foto-Uploads von Android und iOS
  • Gesichtserkennung und KI-basierte Bildsuche
  • Volle Kontrolle über deine Daten

Voraussetzungen für die Installation

Immich kann mittels Docker auf den meisten Linux-Systemen installiert werden. In diesem Video (YouTube) gehe ich die Installation auf einem VPS durch. Folgendes wird benötigt:

  • Server mit Docker: Ein Server, auf dem Docker installiert ist.
  • Hardware-Anforderungen: Empfohlen werden 6 GB RAM und 4 CPU-Kerne. In der Regel reichen jedoch auch 4 GB RAM und 2 CPU-Kerne aus. Im Test (4 vCPU, 8 GB RAM) belegten die vier Container im Leerlauf zusammen rund 1,7 GB RAM. Die Docker-Images sind zusammen etwa 4,4 GB groß.
  • Speicherplatz: Ausreichend Speicherplatz für Fotos und Videos.*
  • Optional:
    • Reverse Proxy: Ein Reverse Proxy (z. B. Nginx Proxy Manager, Caddy, Traefik) für den externen Zugriff und die Nutzung einer Domain.
    • DNS-Server: Ein DNS-Server (z. B. Adguard Home, Pi-Hole, Technitium) für die interne Weiterleitung.
    • VPN-Server: Falls der Server nicht im eigenen Netzwerk steht, empfiehlt sich die Einrichtung eines VPN-Servers wie WireGuard oder OpenVPN.
    • SMTP-E-Mail-Adresse: Für Benachrichtigungen kann eine SMTP-Adresse genutzt werden, z. B. ein Shared-Webhosting-Tarif von Netcup.

* In meiner Instanz von Immich habe ich knapp 2200 Fotos und knapp 400 Videos, die zusammen 25 GB Speicherplatz belegen.

Server Statistik

Vorbereitung

Ordnerstruktur erstellen

Zunächst erstellen wir eine Ordnerstruktur für Immich auf dem Server. Diese Ordner werden für die Datenbank und die Speicherung der Fotos und Videos verwendet.

Benötigte Ordner:

  • data
  • db

Beispiele:

Ubuntu Server
Terminalbash
cd ~
mkdir immich
cd immich
mkdir db data

Ergebnis:

Terminalbash
/home/user/immich
├── db
└── data

Wir können hier auch gleich eine leere Datei docker-compose.yml erstellen, die wir später benötigen.

Terminalbash
touch docker-compose.yml

Als Datenpfad benötigen wir in diesem Fall nur den relativen Bezug zur docker-compose.yml Datei. Das wäre in diesem Fall ./db und ./data.

Synology NAS

Bei einem Synology NAS können wir entweder einen neuen Freigabeordner für Immich erstellen oder einen Freigabeordner für alle Docker-Container nutzen. Bei meiner Konfiguration habe ich einen Freigabeordner docker auf meiner SSD erstellt und einen Freigabeordner dockerhdd auf meiner HDD. In beiden erstelle ich einen Ordner immich und auf der SSD zusätzlich den Unterordner db und auf der HDD den Unterordner data. Somit kann ich die Datenbank auf der SSD und die Fotos und Videos auf der HDD speichern.

Neues Verzeichnis

Wo auch immer die Ordner erstellt werden, über die Eigenschaften lässt sich der komplette Pfad herausfinden. Dieser wird später für die Docker-Container benötigt.

Pfad

Beispiel-Ergebnis:

Terminalbash
/volume1/docker/
└── immich
    └── db

/volume2/dockerhdd/
└── immich
    └── data
Ugreen NAS

Bei einem Ugreen NAS können wir einfach einen neuen immich Ordner im freigegebenen Ordner docker erstellen. In diesem Ordner erstellen wir dann die Unterordner data und db.

Neues Verzeichnis

Natürlich kann man auch einen anderen Freigabeordner erstellen. Das ist insbesondere dann nützlich, wenn man die Datenbank (db) auf einer SSD und die Bilder und Videos (data) auf einer HDD speichern möchte.

Wir benötigen den vollständigen Pfad, den wir über die Eigenschaften des Ordners herausfinden können. Dieser wird später für die Docker-Container benötigt. Dazu muss man auf den Link kopieren Button klicken.

Pfad

Beispiel-Ergebnis:

Terminalbash
/volume1/docker/
└── immich
    |── db
    └── data
# oder
/volume1/docker/
└── immich
    └── db

/volume2/dockerhdd/
└── immich
    └── data

Firewall

Um sicherzustellen, dass die erstellten Container miteinander kommunizieren können, empfiehlt es sich bei einer restriktiven Firewall entweder gleich den kompletten internen IP-Bereich freizugeben oder nach der Installation die von den Containern verwendeten IP-Adressen zu überprüfen. Andernfalls kann es vorkommen, dass die Container nicht miteinander kommunizieren können.

Installation leicht gemacht

Immich benötigt folgende Docker-Container:

  • Valkey für schnelle Zwischenspeicherung
  • Eine PostgreSQL-Datenbank mit der VectorChord-Erweiterung für die Bildsuche
  • Den Immich-Server als Herzstück
  • Die Immich-Machine für KI-Funktionen wie Gesichtserkennung

Docker Compose Datei

Wir brauchen zunächst die Containerbefehle, die wir zur Installation durchführen.

Immich Docker Compose Generator

Generieren Sie eine produktionsreife Docker Compose Konfiguration für Ihr selbst gehostetes Fotomanagement

Bitte beheben Sie die folgenden Probleme:

Konfiguration

Speichereinstellungen

Netzwerkeinstellungen

Sicherheitseinstellungen

Versionseinstellungen

Generierte Konfiguration

Produktionsreife Docker Compose Datei für Immich

Konfiguration erforderlich

Füllen Sie das obige Formular aus, um Ihre Docker Compose Datei zu generieren

Die Images können angepasst werden. Ich rate davon ab, latest bzw. release zu nutzen, da es zu Problemen führen kann, wenn ein neues, nicht kompatibles Image veröffentlicht wird. Der Generator setzt deshalb den Tag v3: Du bekommst damit alle Updates der Version 3, aber nie automatisch eine neue Hauptversion. Auf der Container-Seite siehst du, welches Image momentan das neueste ist.

Deine Installationsoptionen

Je nachdem, welches System du verwendest, hast du verschiedene Möglichkeiten.

Installation über Docker-Compose (Ubuntu Server)

Der Docker-Compose Code kann in die Datei docker-compose.yml kopiert werden. Bei den Pfaden können relative Pfade (z. B. ./db) oder absolute Pfade (z. B. /home/user/immich/db) verwendet werden. Die Pfade sollten zu den zuvor erstellten Ordnern führen.

Anschließend können die Container mit dem Befehl docker compose up -d oder sudo docker compose up -d gestartet werden. Beim ersten Start lädt Docker die Images herunter, das dauert je nach Verbindung ein paar Minuten.

Mit docker compose ps prüfst du, ob alle vier Container laufen. Die Spalte STATUS muss bei jedem Container healthy anzeigen:

Terminalbash
docker compose ps --format 'table {{.Name}}\t{{.Image}}\t{{.Status}}'
NAME                      IMAGE                                             STATUS
immich                    ghcr.io/immich-app/immich-server:v3               Up 13 minutes (healthy)
immich-machine-learning   ghcr.io/immich-app/immich-machine-learning:v3     Up 13 minutes (healthy)
immich_db                 ghcr.io/immich-app/postgres:17-vectorchord0.5.3   Up 15 minutes (healthy)
immich_valkey             valkey/valkey:8                                   Up 15 minutes (healthy)

Direkt nach dem Start steht beim Immich-Server kurz health: starting. Das ist normal. Ob der Server antwortet und welche Version läuft, siehst du so:

Terminalbash
curl http://localhost:2283/api/server/ping
curl http://localhost:2283/api/server/version
{"res":"pong"}
{"major":3,"minor":3,"patch":6,"prerelease":null}

Im Log des Servers steht die Version ebenfalls. Der Befehl filtert die beiden wichtigen Zeilen heraus:

Terminalbash
docker compose logs immich | grep -E 'Initializing|listening'
immich  | Initializing Immich v3.3.6
immich  | [Nest] 25  - 11/04/2026, 8:30:18 PM     LOG [Api:Bootstrap] Immich Server is listening on http://[::1]:2283 [v3.3.6] [production]

Beim allerersten Start meldet der Server außerdem zwei Warnungen, dass die Tabellen smart_search und face_search nicht existieren. Der Text sagt selbst, dass das bei einer neuen Instanz normal ist. Danach läuft Immich auf Port 2283, also unter http://SERVER-IP:2283.

Installation über Portainer

Unter Stacks kann nun ein neuer Stack hinzugefügt werden.

Neuer Stack

Wenn dieser Menüpunkt fehlt, sollte man erneut sichergehen, dass man die lokale (“local”) Umgebung ausgewählt hat und Portainer mit dem Image portainer/portainer-ce und nicht portainer/portainer betrieben wird.

Hier fügen wir den Docker Compose Code ein.

Compose Datei in den Stack einfügen

Anschließend können die Container gestartet werden. Das kann einige Minuten dauern.

Container gestartet

Installation über Dockge

In Dockge kann ein neuer Stack erstellt werden. Dazu wird der Docker-Compose Code in das Textfeld eingefügt und der Stack erstellt. Anschließend können die Container gestartet werden.

Neuer Stack

Die erstmalige Installation kann einige Minuten dauern.

Reverse Proxy

Um Immich über eine Domain wie immich.domain.de erreichbar zu machen, richten wir in der Zwischenzeit einen Reverse Proxy ein.

Nginx Proxy

Dabei gebe ich die Adresse meines Synology-NAS sowie die oben gewählte Portnummer ein. Außerdem kann ich mit einer Access Liste einstellen, ob nur ein lokaler Zugriff möglich ist.

Proxy Host

Wenn sich der Nginx Proxy Manager auf dem NAS befindet und der Webserver im gleichen Docker Netzwerk ist, kann man hier den Containernamen immich eingeben sowie den Port 2283.

Nachdem ich das SSL Zertifikat für den Proxy Host besorgt habe, füge ich aber auch noch ein paar zusätzliche Einstellungen in die “Custom Nginx Configuration” ein.

client_max_body_size 50000M;
proxy_redirect off;

Das sorgt dafür, dass auch größere Dateien (50.000 MB) zu Immich geladen werden können.

Caddy Proxy

Alternativ können auch andere Proxy Server genutzt werden. Insbesondere dann, wenn man ein anderes Gerät dafür verwendet, gibt es viele Optionen. Mit Caddy reicht für den Zugriff von überall dieser Eintrag in der Caddyfile. Die Adresse und der Port 2283 sind die von Immich:

caddy
immich.domain.de {
    reverse_proxy 192.168.1.123:2283
}

Der DNS-Eintrag für immich.domain.de muss auf den Server mit Caddy zeigen. Dann holt Caddy das Zertifikat bei Let’s Encrypt selbst. Ich habe das mit Caddy 2.11.7 auf dem Testserver ausprobiert: Das Zertifikat kam nach wenigen Sekunden (certificate obtained successfully), und https://immich.domain.de/api/server/ping lieferte {"res":"pong"}.

Ein Upload-Limit wie bei Nginx brauchst du nicht. Caddy begrenzt die Größe von Anfragen standardmäßig nicht.

Wenn Immich nur aus dem lokalen Netz erreichbar sein soll, kannst du alles von außen sperren:

caddy
immich.domain.de {
    @blocked not remote_ip private_ranges
    respond @blocked 403
    reverse_proxy 192.168.1.123:2283
}

Erster Login

Immich sollte nun unter der Domain oder der IP-Adresse des Servers (mit Port 2283) erreichbar sein, zum Beispiel unter http://192.168.1.123:2283. Beim ersten Aufruf begrüßt dich ein Willkommensbildschirm. Ein Klick auf „Erste Schritte“ startet die Einrichtung.

Willkommensbildschirm von Immich

Admin-Konto anlegen

Der erste Benutzer ist automatisch der Administrator. Er kann weitere Benutzer hinzufügen und die Einstellungen ändern. Trage E-Mail-Adresse, Passwort und Namen ein und klicke auf „Registrieren“. Danach bist du direkt angemeldet und der Einrichtungsassistent startet.

Admin-Registrierung

Einrichtungsassistent

Danach führt dich ein Assistent durch die Grundeinstellungen. Alle Schritte kannst du später in den Einstellungen ändern:

  1. Theme: Hell oder dunkel.
  2. Sprache: Die Sprache der Oberfläche.
  3. Privatsphäre auf dem Server: Hier kannst du die Kartenfunktion (lädt Kartenkacheln von tiles.immich.cloud) und die Versionsprüfung (fragt version.immich.cloud ab) ausschalten. Beide sind standardmäßig an und optional.
  4. Datenschutzeinstellungen Nutzer: Google Cast ist standardmäßig aus.
  5. Speichervorlage: Legt fest, in welche Ordner Immich die Dateien sortiert. Vorgewählt ist YYYY/MM/DD, also Jahr, Monat und Tag. Du kannst auch „Keine Vorlage“ wählen oder eine eigene Struktur bauen.
  6. Sicherungen: Ein Hinweis auf die 3-2-1-Regel: drei Kopien, auf zwei Geräten, eine davon an einem anderen Ort.
  7. Mobile App: Links zu den App Stores und zum Obtainium-Konfigurator.

Mit „Fertig“ landest du in der Fotoübersicht. Solange du noch nichts hochgeladen hast, ist sie leer.

Fotos hochladen

Über „Hochladen“ oben rechts oder per Drag-and-drop lädst du Fotos und Videos im Browser hoch. Ich habe drei Testbilder hochgeladen. Sie erscheinen sofort in der Zeitleiste, sortiert nach Aufnahmedatum.

Hochgeladene Fotos in der Zeitleiste

Benutzer und Speicherkontingent

In der Verwaltung kannst du unter „Benutzer“ → „Nutzer erstellen“ weitere Benutzer anlegen. Du vergibst E-Mail-Adresse, Passwort und Namen und kannst ein Kontingent in GiB setzen. Ohne Eintrag ist es unlimitiert. Vorgewählt ist, dass der Benutzer das Passwort beim ersten Login ändern muss. Mit dem Schalter „Administrator“ bekommt er zusätzliche Rechte.

Neuen Nutzer erstellen

Benachrichtigungen per E-Mail

Hat man eine SMTP-Adresse, kann man auch Benachrichtigungen einrichten. Das ist insbesondere dann nützlich, wenn mehrere Benutzer auf Immich zugreifen und Bilder teilen. Die Einstellung findest du unter „Verwaltung“ → „Einstellungen“ → „Benachrichtigungseinstellungen“ → „E-Mail“. Hier kann beispielsweise ein Webhosting Tarif von Netcup mit E-Mail Postfach genutzt werden. Die Kosten beginnen bei 2,17 € im Monat.

Benachrichtigungseinstellungen in der Verwaltung

Apps

Immich bietet auch Apps für Android und iOS an. Diese können im jeweiligen App Store heruntergeladen werden. Die Apps sind kostenlos und ermöglichen es, Fotos und Videos direkt von den Geräten hochzuladen.

Immich App Android

Immich App iOS

Beim ersten Start fragt die App nach der Adresse deines Servers. Trage dort die Domain (https://immich.domain.de) oder die IP-Adresse mit Port (http://192.168.1.123:2283) ein und melde dich mit deinem Konto an.

Features:

  • Automatischer Upload: Neue Fotos und Videos werden automatisch hochgeladen.
  • Teilen und Zusammenarbeiten: Alben können mit Familie und Freunden geteilt werden.

Update auf eine neue Version

Bei einem Update innerhalb von Version 3 reichen zwei Befehle im Ordner mit der docker-compose.yml:

Terminalbash
docker compose pull
docker compose up -d

Von Version 2 auf Version 3 wechselst du, indem du den Tag der beiden Immich-Images änderst:

yaml
image: ghcr.io/immich-app/immich-server:v2
image: ghcr.io/immich-app/immich-server:v3
yaml
image: ghcr.io/immich-app/immich-machine-learning:v2
image: ghcr.io/immich-app/immich-machine-learning:v3

Danach holst du die Images mit docker compose pull und startest mit docker compose up -d neu. Sichere vorher die Daten (siehe nächster Abschnitt) und lies die Hinweise zur Version 3. Mit Version 3 hat Immich die Unterstützung für die alte Datenbank-Erweiterung pgvecto.rs entfernt. Hast du Immich schon vor Version 1.133.0 installiert und noch nicht auf VectorChord umgestellt, folge zuerst der Anleitung zur Migration.

Ich habe den Wechsel von 2.7.5 auf 3.3.6 mit einer frischen Installation ohne Fotos getestet. Die Container starteten ohne Fehler, die Datenbank blieb gleich. Mit einer gewachsenen Bibliothek habe ich das Update nicht durchgespielt.

Backup erstellen

Für ein vollständiges Backup sollten die Ordner data/upload und data/library (Bilder und Videos), data/profile (Profilbilder) sowie data/backups (Datenbank-Dumps) gesichert werden. data/thumbs und data/encoded-video erzeugt Immich bei Bedarf neu. Nach dem Upload der Testbilder sah der Ordner data im Test so aus: backups, encoded-video, library, profile, thumbs und upload. Das Sichern lässt sich manuell machen. Alternativ auch automatisiert mit einem Skript oder einem Backup-Tool wie rsync oder Duplicati.

Ein Vorteil (und gleichzeitig Nachteil) von Immich liegt darin, dass die Bilder in einem normalen Dateisystem gespeichert werden. Das bedeutet falls irgendwas schief laufen sollte und Immich nicht mehr funktioniert, kann man die Bilder auch einfach so kopieren und auf einem anderen System wiederherstellen (vorausgesetzt die Bilder sind nicht gelöschte worden).

Fazit

Immich ist eine fantastische Alternative zu Google Photos und Synology Photos. Mit seiner Open-Source-DNA, den starken Funktionen und der aktiven Community bist du bestens für die private Fotoverwaltung gerüstet.

Teilen
XRedditE-Mail
Zurück zu allen Beiträgen

Änderungsprotokoll

  1. Auf Immich 3 umgestellt (Image :v3), Einrichtungsassistent mit Screenshots ergänzt, Ordnernamen im Backup-Abschnitt korrigiert, Terminal-Ausgaben und Abschnitt zum Update von Version 2 ergänzt.

Weiter in dieser Reihe

Kommentare