
🔥 Was ist Immich?
Immich ist eine moderne, selbst gehostete Alternative zu Google Photos.
Mit Immich bekommst du:
- automatische Foto-Backups vom Smartphone
- Gesichtserkennung & KI-Suche
- eine Timeline wie bei Google Photos
- volle Kontrolle über deine Daten
👉 Alles läuft lokal auf deinem NAS – keine Cloud, kein Abo, keine Abhängigkeit.
🌐 Offizielle Website: https://immich.app/
📦 GitHub (Source + Releases): https://github.com/immich-app/immich
📚 Dokumentation: https://docs.immich.app/
⚙️ Voraussetzungen
Für die Installation benötigst du:
- Ugreen NAS oder Synology DiskStation
- Docker / Container Manager installiert
- Zugriff auf
/volume1/docker/ - NAS-IP (z. B.
192.168.178.10)
📁 Schritt 1: Ordnerstruktur erstellen (WICHTIG)
Öffne den Dateimanager deines NAS und öffne den Ordner /volume1/docker/. Hier erstellst Du einen Ordner Namens /immich. In diesem Ordner erstellst Du 2 weitere Ordner: |library|postgres|model-cache
Die erstellte Struktur sieht dann so aus:
/volume1/docker/immich/
├── library
├── postgres
├── model-cache
🔐 Rechte korrekt setzen
Ugreen NAS
- Rechtsklick → Eigenschaften
- Benutzer:
docker,admin, dein User - Rechte: Lesen + Schreiben aktivieren
Synology DiskStation
- Systemsteuerung → Gemeinsame Ordner →
docker - Unterordner
immichöffnen - Berechtigungen setzen für:
dockeradmin- deinen Benutzer
👉 Wichtig:
Alle Ordner müssen Schreibrechte & Leserechte haben, sonst startet Immich nicht korrekt.
🐳 Schritt 2: Docker Compose in der GUI erstellen
🔹 Ugreen NAS
- Docker / Container Manager öffnen
- Links „Projekt“ erstellen
- Name:
immich - Pfad:
/volume1/docker/immich
- Compose-Datei aus Schritt 3 einfügen.
🔹 Synology DiskStation
- Container Manager öffnen
- „Projekt“ → „Erstellen“
- Name:
immich - Pfad:
/volume1/docker/immich
docker-compose.ymlaus Schritt 3 einfügen.
🧱 Schritt 3: Docker Compose
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:v2
restart: unless-stopped
depends_on:
- redis
- database
ports:
- "2283:2283"
environment:
DB_HOSTNAME: database
DB_USERNAME: postgres
DB_PASSWORD: DeinDBPasswort123
DB_DATABASE_NAME: immich
volumes:
- /volume1/docker/immich/library:/data
- /etc/localtime:/etc/localtime:ro
networks:
- immich
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:v2
restart: unless-stopped
volumes:
- /volume1/docker/immich/model-cache:/cache
networks:
- immich
redis:
container_name: immich_redis
image: valkey/valkey:9
restart: unless-stopped
networks:
- immich
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: DeinDBPasswort123
POSTGRES_DB: immich
POSTGRES_INITDB_ARGS: '--data-checksums'
volumes:
- /volume1/docker/immich/postgres:/var/lib/postgresql/data
shm_size: 128mb
networks:
- immich
networks:
immich:
driver: bridge⚠️ WICHTIG: Häufigster Fehler
👉 NICHT verwenden:
postgres:14 ❌
👉 Richtig:
ghcr.io/immich-app/postgres...
Sonst bekommst du:
- Fehler: No vector extension found
- Immich startet nicht
🔑 Schritt 4: Passwörter korrekt setzen
Diese Werte müssen identisch sein:
| Immich Server | PostgreSQL |
|---|---|
| DB_USERNAME | POSTGRES_USER |
| DB_PASSWORD | POSTGRES_PASSWORD |
| DB_DATABASE_NAME | POSTGRES_DB |
▶️ Schritt 5: Container starten
- Projekt starten
- ca. 1–2 Minuten warten
🌐 Schritt 6: Zugriff
Im Browser öffnen:
http://<deine-NAS-IP>:2283 also z.B.: http://192.168.178.10:2283
⚙️ Schritt 7: Ersteinrichtung
- Benutzer erstellen
- Storage Template → aktivieren
- Backup-Hinweis überspringen
- fertig
📱 Schritt 8: App verbinden
- Immich App installieren
- Server eintragen:
http://<deine-NAS-IP>:2283
📦 Wo liegen deine Daten?
| Typ | Speicherort |
|---|---|
| Bilder | /volume1/docker/immich/library |
| Datenbank | /volume1/docker/immich/postgres |
| KI Modelle | /volume1/docker/immich/model-cache |
💾 Backup Empfehlung
Beim sichern Projekt stoppen und dann mindestens sichern:
/volume1/docker/immich/library
/volume1/docker/immich/postgres
❌ Typische Fehler
Immich startet nicht
→ falsche Berechtigungen
Keine Verbindung
→ falscher Port oder Container läuft nicht oder Port besetzt
Machine Learning funktioniert nicht
→ falsche URL oder Container nicht aktiv
🌍 Immich von außen erreichbar machen
Standardmäßig ist Immich nur im lokalen Netzwerk erreichbar.
Für den Zugriff von unterwegs brauchst du:
- eine Domain
- einen Reverse Proxy
- HTTPS
👉 Beispiel:
https://immich.de → Reverse Proxy → http://localhost:2283
Ich habe dazu bereits ausführliche Anleitungen erstellt:
- Reverse Proxy Synology einrichten
- NAS von außen erreichbar machen
- Nginx Proxy Manager auf Ugreen konfigurieren
👉 Nutze diese Guides und verbinde deine Domain einfach mit Immich auf Port 2283.
⚠️ Wichtig
- Port 2283 niemals direkt freigeben
- immer über HTTPS gehen
✅ Ergebnis
Danach erreichst du Immich weltweit über:
https://deinedomain.de
auch direkt in der App.
🧠 Fazit
Immich läuft stabil auf Ugreen und Synology, wenn:
- die Ordnerstruktur korrekt ist
- die Rechte sauber gesetzt sind
- das richtige PostgreSQL-Image verwendet wird
👉 Dann bekommst du eine der aktuell besten self-hosted Foto-Cloud Lösungen.











Läuft bestens! Danke dafür!
Danke für die tolle Erklärung, läuft genial. 🙂
Jetzt nur eine bescheide Docker-Newbie-Frage: Wie hebe ich die Version von 2.6.3 auf 2.7.4 an? Im Container Manager wird mir kein Update angeboten.
Hängt das mit “:v2” anstatt “:latest” zusammen?
Danke für Alles im Voraus
Freut mich, wenn es läuft
Eigentlich sollte bei ghcr.io/immich-app/immich-server trotzdem auch die aktuelle 2.7.x kommen, weil v2 der Major-Tag ist und immer auf die neueste Version aus der v2-Reihe zeigen sollte.
Wenn dir kein Update angeboten wird, liegt das meist eher am Container Manager bzw. daran, dass das neue Image noch nicht erkannt oder neu geladen wurde.
Du kannst zuerst im Container Manager -> Images schauen, ob dort ein Update angezeigt wird.
Falls nicht, kannst du testweise in deiner Compose-Datei das Image von:
ghcr.io/immich-app/immich-server:v2
auf:
ghcr.io/immich-app/immich-server:latest
ändern.
Danach das Projekt neu deployen bzw. den Container neu erstellen, dann sollte die aktuelle Version gezogen werden.
Diese kannst Du dann künftig unter “Images” im Containermanager aktualisieren.
⚠️ Ganz wichtig: Vor jedem Update ein Backup machen. Also Projekt vollständig stoppen und alles sichern.
Bei korrekt eingebundenen Volumes bleiben die Daten normalerweise erhalten, ein Backup ist trotzdem Pflicht.
Super, danke für die einfache Erklärung 🙂
Geniales Video – Vielen Dank!
Ich habe meine Billder auf Immich ausschliesslich auf einer externen Bibliothek.
Jedoch Schaffe ich es nicht, die Fotos, welche von einem Mobiltelefon hoochgeladen werden, direkt via Immich in einen vordefinierten Ordner in der ext. Bibliothek zu speichern.
In den Foren steht, man müsse die .env Datei anpassen. Jedoch sehe ich in meiner FileStation unter docker/immich/ keine .env Datei nur eine compose.yaml Datei. Ausgeblendete Dateien kann ich in der Filestation irgendwie nirgends anzeigen lassen.
Kannst du mir echt Helfen oder gar ein Video für deine Commmunity erstellen, wie der Uploadordner angepasst werden kann? Danke im Vorraus!
Moin! Da du eine externe Bibliothek nutzt, ist das vermutlich schon der Kern des Themas.
Diese externen Bibliotheken sind bei Immich in der Regel dafür gedacht, bestehende Ordner einzulesen – nicht als direktes Ziel für Uploads vom Smartphone.
Falls du die Compose aus dem Blogbeitrag verwendet hast, zeigt der Mount aktuell auf:
– /volume1/docker/immich/library:/data
Das bedeutet, dass Uploads vom Handy immer in diesem Pfad landen (/data im Container).
Wenn du einen anderen Zielordner möchtest, könntest du den Volume-Mount entsprechend anpassen, zum Beispiel:
– /volume1/photo/ImmichUploads:/data
Danach müsstest du das Projekt einmal neu erstellen, damit die Änderung greift.
Zur .env:
Falls du die Compose aus dem Blogbeitrag nutzt, gibt es keine separate .env, da die Variablen direkt in der compose.yaml unter environment: definiert sind.
Falls dein Ziel ist, Uploads direkt in eine bestehende externe Bibliothek zu bekommen, müsste man noch genauer schauen, wie diese Bibliothek bei dir eingebunden ist.