Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Cloud / Hosting 02.06.2026 · 10 min Lesezeit

Immich mit Docker: die selbstgehostete Google-Photos-Alternative

Immich per Docker Compose selbst hosten: Ihre private Foto- und Video-Cloud mit automatischem Mobil-Backup, Gesichtserkennung und KI-Smartsuche. Schritt für Schritt zur datensouveränen Alternative zu Google Photos.

Geprüft am 09.10.2026 · für Immich 3.3.1

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Kleiner weißer Heimserver neben Smartphone und einem Stapel Fotoabzüge auf einem Sideboard als Sinnbild für eine private Foto-Cloud

Immich ist eine quelloffene, selbstgehostete Foto- und Video-Verwaltung und eine Google-Photos-Alternative ohne fremde Cloud: automatisches Backup per Mobile-App, Zeitleiste im Web, Gesichtserkennung und semantische CLIP-Smartsuche (ein KI-Modell, das Bilder und Suchbegriffe vergleicht). Diese Anleitung zeigt Einrichtung per Docker Compose, App-Anbindung, optionale GPU-Beschleunigung sowie Update und Backup.

Voraussetzungen

Datenbank und KI-Modelle laufen mit, planen Sie daher:

  • Linux-Server (64-bit), Debian 12 oder Ubuntu 24.04, amd64 oder arm64.
  • Docker mit Compose-Plugin (docker compose).
  • CPU: mindestens 2 Kerne, empfohlen 4. Machine Learning braucht seit Version 3 auf amd64 mindestens x86-64-v2 (die meisten CPUs ab etwa 2012); in VMs einen passenden CPU-Typ einstellen.
  • RAM: mindestens 6 GB, empfohlen 8 GB. Mit 4 GB nur ohne Machine Learning stabil.
  • Speicher: DB_DATA_LOCATION zwingend auf lokalem Unix-Dateisystem (EXT4, ZFS, APFS) auf SSD. NFS, SMB/CIFS, NTFS, exFAT oder WSL-Mounts führen zu Datenbank-Korruption. UPLOAD_LOCATION (Fotos) darf auf ein großes Datenlaufwerk.
  • Optional GPU: NVIDIA, Intel oder AMD für KI und Transcoding (Schritt 7).
  • Optional: Domain und Reverse-Proxy für HTTPS.

Grundlagen: Docker-Compose-Grundlagen und Stacks.

Schritt 1: Projektverzeichnis anlegen

Legen Sie ein Verzeichnis für Compose-Datei, .env und Daten an:

mkdir -p ~/immich
cd ~/immich

Beim Start legt Compose darin library (Fotos) und postgres (Datenbank) an.

Verifizieren: pwd gibt /home/BENUTZER/immich aus, und df -hT . zeigt ein lokales Dateisystem wie ext4 oder zfs, kein nfs oder cifs.

Schritt 2: Offizielle Compose-Vorlage und .env laden

Laden Sie die offizielle Compose-Vorlage und die Umgebungsdatei aus dem letzten Release:

# Offizielle Compose-Vorlage
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml

# Passende .env-Vorlage
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

Zum Verständnis der Stack laut Vorlage (Stand Immich v3.3.1, ohne Kommentare). Verwenden Sie für den Betrieb die heruntergeladene Datei:

name: immich

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      - ${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
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false

  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:9@sha256:c123e3715db63d06d4ad6964884037aa0d5d4d703939b9929954112889708e1d
    healthcheck:
      test: redis-cli ping | grep -q PONG || 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'
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    shm_size: 128mb
    restart: always
    healthcheck:
      disable: false

volumes:
  model-cache:

Wichtig: Die @sha256:-Digests bei valkey und postgres sind in der Vorlage exakt gepinnt und ändern sich mit Releases. Nicht von Hand ändern, immer die Originaldatei nutzen.

Verifizieren: ls -la zeigt docker-compose.yml und .env, und docker compose config --services listet immich-server, immich-machine-learning, redis und database.

Schritt 3: .env konfigurieren

Passen Sie die zentralen Werte in der .env an, vor allem das Datenbank-Passwort:

# Speicherort fuer Fotos und Videos (kann auch ein grosses Laufwerk sein)
UPLOAD_LOCATION=./library

# Datenbank-Verzeichnis: MUSS lokale SSD, Unix-FS sein (kein NFS/SMB/NTFS!)
DB_DATA_LOCATION=./postgres

# Zeitzone (in der Vorlage auskommentiert)
TZ=Europe/Berlin

# Version: Major-Tag wie in der Vorlage ('v3') oder feste Version wie 'v3.3.1'
IMMICH_VERSION=v3

# Datenbank-Zugangsdaten - DB_PASSWORD UNBEDINGT aendern (nur A-Z, a-z, 0-9)!
DB_PASSWORD=IhrSicheresPasswort123
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
  • DB_PASSWORD (Vorlage: postgres) unbedingt ändern. Nur Buchstaben und Ziffern, z. B. aus openssl rand -hex 24.
  • UPLOAD_LOCATION: Ort der Fotos, gern ein großes Datenlaufwerk.
  • DB_DATA_LOCATION: zwingend lokale SSD mit Unix-Rechten, sonst droht Datenbank-Korruption.
  • IMMICH_VERSION: Die Vorlage setzt den Major-Tag v3 (Updates innerhalb von Version 3, kein versehentlicher Major-Sprung). Ohne Variable nutzt Compose release; für volle Kontrolle eine feste Version wie v3.3.1.
  • TZ auf Ihre Zeitzone setzen, etwa Europe/Berlin (in der Vorlage auskommentiert).
  • Datenbank ausnahmsweise nicht auf SSD: auskommentierte Variable DB_STORAGE_TYPE: 'HDD' in der docker-compose.yml.

Verifizieren: grep -E '^(DB_PASSWORD|IMMICH_VERSION|TZ)=' .env zeigt Ihr eigenes Passwort (nicht postgres), v3 und Ihre Zeitzone.

Schritt 4: Immich starten

Images ziehen und Stack starten:

cd ~/immich
docker compose up -d

# Status der vier Container pruefen
docker compose ps

# Logs verfolgen (zum Debuggen beim ersten Start)
docker compose logs -f immich-server

Der erste Start lädt Server, Machine Learning, Valkey (Cache) und die VectorChord-Postgres-Datenbank, das dauert einige Minuten. Dann öffnen Sie:

http://SERVER-IP:2283

SERVER-IP durch die Serveradresse ersetzen; lokal geht auch http://localhost:2283.

Verifizieren: docker compose ps zeigt vier Container mit Status Up, Server, Machine Learning und Datenbank nach kurzer Zeit mit (healthy). curl -s http://localhost:2283/api/server/ping antwortet mit {"res":"pong"}.

Schritt 5: Ersteinrichtung und Admin-Konto anlegen

Immich hat keinen voreingestellten Login; der erste registrierte Benutzer wird Administrator:

  1. Unter http://SERVER-IP:2283 erscheint „Willkommen bei Immich“, dort auf Erste Schritte klicken.
  2. Auf der Seite Admin-Registrierung das Admin-Konto mit E-Mail, Namen und starkem Passwort anlegen, mit Registrieren abschließen und anmelden. Nach dem ersten Login führt ein Onboarding-Assistent durch Theme, Sprache, Privatsphäre, Speichervorlage, Sicherungen und Mobile App.
  3. Bei Bedarf weitere Benutzer im Admin-Bereich anlegen.
  4. In der Administration unter Auftrags-Schlangen die Machine-Learning-Jobs (Gesichtserkennung, Intelligente Suche) prüfen.
Immich-Seite Admin-Registrierung: Felder E-Mail (1), Passwort (2), Passwort bestätigen (3), Name (4) und Schaltfläche Registrieren (5)
Admin-Konto anlegen: 1 E-Mail, 2 Passwort, 3 Passwort wiederholen, 4 Name, 5 auf Registrieren klicken.
Immich-Administration, Benutzerverwaltung: Menüpunkt Benutzer (1) und Schaltfläche Nutzer erstellen (2), darunter das Admin-Konto
Weitere Benutzer: 1 in der Administration Benutzer öffnen, 2 auf Nutzer erstellen klicken.
Immich-Administration, Auftrags-Schlangen: Menüpunkt Auftrags-Schlangen (1) und Aufgabe Intelligente Suche (2) mit Zählern Aktiv und Wartend
Machine-Learning-Jobs: 1 Auftrags-Schlangen öffnen, 2 Aufgaben wie Intelligente Suche prüfen.

Verifizieren: Nach dem Anmelden mit dem neuen Konto erscheint die leere Zeitleiste, und in der Benutzerliste der Administration ist Ihr Konto als Admin markiert.

Schritt 6: Mobile-App und automatisches Foto-Backup

Die Immich-App gibt es für Android, iOS und über F-Droid.

  1. App aus App Store, Play Store oder F-Droid installieren.
  2. Server-URL mit Port eingeben: http://SERVER-IP:2283 (von außen Ihre HTTPS-Domain, Schritt 8).
  3. Mit dem Konto aus Schritt 5 anmelden.
  4. Automatisches Backup aktivieren und Alben wählen (z. B. Kamerarolle).

Die App lädt neue Aufnahmen im Hintergrund hoch; die Gesichtserkennung gruppiert Personen, die CLIP-Smartsuche findet Inhalte wie Strand oder Hund ohne Beschriftung.

Verifizieren: Die Backup-Ansicht der App meldet die ausgewählten Alben als gesichert, und die hochgeladenen Fotos erscheinen in der Zeitleiste der Web-Oberfläche.

Schritt 7: Optional – GPU für KI und Transcoding

Auf der CPU funktionieren KI und Transcoding, bei großen Mediatheken aber langsam. Für GPUs liefert Immich zwei zusätzliche Vorlagen.

Hardware-beschleunigtes Machine Learning

Unterstützt werden CUDA (NVIDIA, Compute Capability >= 5.2), OpenVINO (Intel), ROCm (AMD), ARM NN (Mali) und RKNN (Rockchip):

wget -O hwaccel.ml.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.ml.yml

NVIDIA braucht auf dem Host den Treiber ab Version 545 und das NVIDIA Container Toolkit. Dann ergänzen Sie beim Dienst immich-machine-learning den extends-Block und setzen das Image-Tag auf -cuda:

  immich-machine-learning:
    container_name: immich_machine_learning
    # Image-Tag um -cuda ergaenzen:
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}-cuda
    extends:
      file: hwaccel.ml.yml
      service: cuda
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always

Hardware-beschleunigtes Transcoding

Für das Video-Transcoding gibt es eine eigene Vorlage mit NVENC (NVIDIA), Quick Sync (Intel), VAAPI und RKMPP (Rockchip):

wget -O hwaccel.transcoding.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.transcoding.yml

Beim Dienst immich-server kommentieren Sie den extends-Block ein und ersetzen cpu durch nvenc, quicksync, rkmpp, vaapi oder vaapi-wsl. Aktivieren Sie das Verfahren zusätzlich in den Transcoding-Einstellungen der Web-Oberfläche und starten Sie neu:

docker compose up -d

Verifizieren: Bei CUDA zeigt docker exec immich_machine_learning nvidia-smi die Grafikkarte, und docker compose logs immich-machine-learning enthält beim nächsten ML-Job keine Fehlermeldung zu CUDA. Beim Transcoding zeigt nvidia-smi auf dem Host während einer Videokonvertierung einen ffmpeg-Prozess.

Schritt 8: Reverse-Proxy und HTTPS

Port 2283 ist fürs lokale Netz gedacht und darf nie ungeschützt ins Internet. Von außen gehört Immich hinter einen Reverse-Proxy mit TLS, etwa Nginx:

server {
    listen 443 ssl;
    server_name fotos.example.de;

    ssl_certificate     /etc/letsencrypt/live/fotos.example.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/fotos.example.de/privkey.pem;

    # Grosszuegig fuer Video- und Foto-Uploads
    client_max_body_size 50000M;

    location / {
        proxy_pass http://127.0.0.1:2283;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Ein großzügiges client_max_body_size verhindert, dass große Videos blocken; Upgrade und Connection braucht Immich für WebSockets. fotos.example.de durch Ihre Domain ersetzen und in der App die HTTPS-Domain eintragen. Zertifikat: Let's Encrypt mit certbot.

Verifizieren: sudo nginx -t meldet syntax is ok, und curl -sI https://fotos.example.de liefert HTTP/2 200 bzw. HTTP/1.1 200. Die Mobile-App verbindet sich über die HTTPS-Adresse.

Schritt 9: Update-Workflow und Backup

Update

Kein blindes Auto-Update: Lesen Sie vor jedem Pull die Release-Notes, Major-Versionen bringen Breaking Changes.

cd ~/immich

# 1. Backup machen (siehe unten), DANN:
docker compose pull
docker compose up -d

# Alte, ungenutzte Images aufraeumen
docker image prune

Downgrades werden nicht unterstützt, auch nicht innerhalb eines Minor-Tags: erst Backup, dann Update. Bei sehr alten Versionen die VectorChord-Migration beachten (Troubleshooting). Für v2 auf v3 setzen Sie IMMICH_VERSION=v2 auf v3 und laden vorher die aktuelle docker-compose.yml aus dem Release.

Backup

Ein vollständiges Backup besteht aus Datenbank-Dump und Originaldateien. Den Dump erzeugen Sie aus dem Postgres-Container:

# 1. Datenbank-Dump (komprimiert)
docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > immich-db-backup.sql.gz

# 2. Zusaetzlich das UPLOAD_LOCATION (Ihre Fotos) sichern, z.B.:
tar czf immich-library-$(date +%F).tar.gz ./library

Legen Sie beide Backups nach 3-2-1-Prinzip außerhalb des Servers ab und testen Sie regelmäßig eine Wiederherstellung.

Verifizieren: Nach dem Update zeigt docker compose ps alle Container als (healthy), und die Web-Oberfläche nennt unter Administration die neue Versionsnummer. gunzip -t immich-db-backup.sql.gz läuft ohne Fehler durch, und tar tzf immich-library-*.tar.gz | head listet Dateien aus library.

Troubleshooting

  • Datenbank startet nicht oder korrumpiert: DB_DATA_LOCATION liegt auf ungeeignetem Dateisystem; nur lokales EXT4/ZFS auf SSD.
  • Machine Learning läuft nicht stabil: 4 GB RAM reichen nicht; RAM erhöhen (mindestens 6, besser 8 GB) oder ML in den Admin-Einstellungen deaktivieren. Auf amd64 braucht ML seit v3 eine x86-64-v2-CPU; letzte Version für ältere CPUs ist v2.7.5.
  • Postgres-Fehler bei größeren Operationen: shm_size: 128mb beim database-Dienst nie entfernen.
  • VectorChord-Migration nach langer Pause: Seit v1.133.0 nutzt Immich VectorChord statt pgvecto.rs, v3.0.0 unterstützt pgvecto.rs nicht mehr. Wer eine Version vor v1.133.0 betreibt, folgt vor dem Update auf v3 dem Abschnitt Migrating to VectorChord der Upgrade-Doku. Danach kein Downgrade unter v1.133.0.
  • Live-Updates / Browser-Upload hängen: WebSocket-Header (Upgrade, Connection) fehlen oder client_max_body_size ist zu klein.
  • Container-Logs: docker compose logs -f immich-server bzw. docker compose logs -f database.

Häufige Fragen

Ist Immich eine vollwertige Google-Photos-Alternative?

Für automatisches Mobil-Backup, Zeitleiste, Alben, Gesichtserkennung und KI-Suche ja. Immich gilt seit Version 2.0 (Oktober 2025) als stabil, seit Juli 2026 ist Version 3 aktuell. Wegen aktiver Entwicklung sind getestete Backups und Release-Notes vor Updates Pflicht.

Brauche ich zwingend eine GPU?

Nein, alles läuft auch auf der CPU; eine GPU beschleunigt nur (Schritt 7).

Wo speichert Immich meine Fotos?

Originale unter UPLOAD_LOCATION (Standard ./library), Metadaten in der Datenbank unter DB_DATA_LOCATION. Sichern Sie beides; der Dump allein reicht nicht.

Warum Valkey und VectorChord statt Redis und pgvecto.rs?

Valkey ist der Redis-kompatible Nachfolger, VectorChord der Nachfolger von pgvecto.rs. Die offizielle Vorlage bringt die korrekt gepinnten Images mit.

Wie viele Benutzer kann ich anlegen?

Beliebig viele, jeweils mit eigener Mediathek und eigenem App-Backup (Schritt 5).

Kann ich die Version festpinnen?

Ja, über IMMICH_VERSION (Vorlage: v3, fest z. B. v3.3.1), siehe Schritt 3. Vor jedem Update Release-Notes lesen und Backup machen.

Fazit

Offizielle Vorlage und .env laden, DB_PASSWORD ändern, docker compose up -d: Damit läuft eine private Foto-Cloud mit App-Backup, Gesichtserkennung und CLIP-Suche. Entscheidend bleiben Update-Disziplin (Release-Notes, vorher Backup), Datenbank auf lokaler SSD und HTTPS per Reverse-Proxy für den Zugriff von außen.

Weiterführende Anleitungen und Quellen

Offizielle Quellen: