Ein Blick hinter die Kulissen der modernen Open-Source-Fotoverwaltung
Nachdem wir im zweiten Teil dieser Serie Immich unter Debian 13 installiert haben, werfen wir nun einen Blick hinter die Kulissen. Wer versteht, wie Immich intern aufgebaut ist, kann Fehler schneller beheben, Updates sicher durchführen und die Anwendung besser an die eigenen Anforderungen anpassen.
Immich setzt auf eine moderne Microservice-Architektur. Statt aus einer einzigen großen Anwendung zu bestehen, arbeiten mehrere spezialisierte Dienste zusammen. Jeder übernimmt eine klar definierte Aufgabe – von der Speicherung der Bilder über die KI-Analyse bis hin zur Bereitstellung der Weboberfläche.
In diesem Beitrag lernen Sie die wichtigsten Komponenten kennen und verstehen, wie sie miteinander kommunizieren.
Warum eine Microservice-Architektur?
Frühere Anwendungen bestanden häufig aus einer einzigen, großen Software, die sämtliche Aufgaben erledigte. Dieses sogenannte Monolith-Konzept ist einfach zu entwickeln, stößt jedoch bei wachsendem Funktionsumfang schnell an seine Grenzen.
Immich verfolgt einen anderen Ansatz. Die Software ist in mehrere spezialisierte Dienste aufgeteilt. Jeder Dienst übernimmt einen klar abgegrenzten Aufgabenbereich.
Diese Architektur bietet zahlreiche Vorteile:
- bessere Skalierbarkeit
- einfachere Wartung
- unabhängige Weiterentwicklung einzelner Komponenten
- höhere Stabilität
- bessere Ausnutzung der Hardware
- einfachere Fehleranalyse
Fällt beispielsweise die KI-Komponente aus, bleibt die eigentliche Fotoverwaltung weiterhin nutzbar.
Überblick über die Architektur
Eine typische Immich-Installation besteht aus mehreren Docker-Containern.
Der Datenfluss sieht vereinfacht folgendermaßen aus:
Smartphone
│
▼
Webserver (Immich Server)
│
├────────► PostgreSQL
│
├────────► Redis
│
├────────► Machine Learning
│
▼
Bildspeicher
│
▼
Thumbnails
Alle Komponenten kommunizieren intern über das Docker-Netzwerk miteinander. Von außen ist in der Regel nur der Immich-Server über den Reverse Proxy erreichbar.
Die Server-Komponenten
Je nach Version können die Container leicht variieren. Im Wesentlichen bestehen aktuelle Installationen aus den folgenden Komponenten:
- Immich Server
- Machine Learning Service
- PostgreSQL
- Redis
Jeder Dienst übernimmt eine spezielle Aufgabe.
Immich Server
Der Immich Server bildet das Herzstück der Anwendung.
Er übernimmt unter anderem:
- Anmeldung der Benutzer
- Upload neuer Bilder
- Verwaltung der Alben
- Freigaben
- Suche
- API für Apps
- Kommunikation mit den übrigen Diensten
Sowohl die Weboberfläche als auch die mobilen Apps greifen ausschließlich auf diesen Server zu.
Die Weboberfläche
Die Weboberfläche ist die zentrale Verwaltungsoberfläche für alle Benutzer.
Über den Browser können Anwender:
- Bilder hochladen
- Fotos durchsuchen
- Alben verwalten
- Personen zuordnen
- Karten anzeigen
- Einstellungen ändern
- Benutzer verwalten
Die Oberfläche kommuniziert dabei ausschließlich mit dem Immich Server. Direkte Zugriffe auf Datenbank oder Dateisystem erfolgen nicht.
Mobile Apps
Immich stellt offizielle Apps für Android und iOS bereit.
Diese übernehmen unter anderem:
- automatische Backups
- Upload neuer Fotos
- Synchronisation
- Anzeige der gesamten Mediathek
- Offline-Zugriffe (je nach Funktion)
- Suche
- Alben
- Freigaben
Auch die mobilen Apps greifen ausschließlich über die API des Immich Servers auf die Daten zu. Dadurch bleibt die interne Architektur verborgen und Änderungen an den Backend-Diensten wirken sich nicht auf die Bedienung der Apps aus.
Machine Learning Service
Eine Besonderheit von Immich ist der separate Machine-Learning-Dienst.
Er übernimmt alle KI-gestützten Aufgaben, beispielsweise:
- Gesichtserkennung
- Personengruppierung
- Objekterkennung
- Smart Search
- Bildklassifizierung
- Analyse neuer Fotos
Da diese Berechnungen sehr rechenintensiv sind, laufen sie getrennt vom eigentlichen Immich Server. So bleibt die Benutzeroberfläche auch während umfangreicher Analysen flüssig bedienbar.
Je nach Hardware kann der Machine-Learning-Service die CPU oder – mit entsprechender Konfiguration – auch eine unterstützte GPU nutzen.
PostgreSQL
Die eigentlichen Bilddateien werden nicht in der Datenbank gespeichert.
PostgreSQL verwaltet stattdessen alle Metadaten, darunter:
- Benutzerkonten
- Alben
- Kommentare
- Gesichtsinformationen
- Dateipfade
- GPS-Daten
- Zeitstempel
- Berechtigungen
- Suchinformationen
- Einstellungen
Die Datenbank bildet somit das organisatorische Rückgrat der Anwendung.
Redis
Redis dient als schneller In-Memory-Speicher und entlastet den Immich Server.
Typische Aufgaben sind:
- Verwaltung von Warteschlangen
- Zwischenspeicherung von Daten
- Hintergrundaufgaben
- Job-Steuerung
- Synchronisation einzelner Prozesse
Durch Redis können viele Aufgaben parallel abgearbeitet werden, ohne dass der eigentliche Server blockiert wird.
Die Microservices im Zusammenspiel
Die einzelnen Dienste arbeiten eng zusammen.
Ein Beispiel:
- Ein Smartphone lädt ein neues Foto hoch.
- Der Immich Server speichert die Datei.
- Die Metadaten werden in PostgreSQL abgelegt.
- Redis legt Analyseaufgaben in eine Warteschlange.
- Der Machine-Learning-Service verarbeitet das Bild.
- Gesichter und Objekte werden erkannt.
- Die Suchdaten werden in PostgreSQL aktualisiert.
- Vorschaubilder werden erzeugt.
- Das Foto erscheint in der Zeitleiste.
Für den Benutzer geschieht dieser Ablauf nahezu in Echtzeit.
Die Datenbankstruktur
Immich verwendet eine relationale PostgreSQL-Datenbank.
Vereinfacht lässt sich der Aufbau wie folgt darstellen:
Benutzer
│
├── Alben
│
├── Fotos
│
├── Videos
│
├── Personen
│
├── Freigaben
│
└── Einstellungen
Die eigentlichen Mediendateien liegen separat im Dateisystem. In der Datenbank befinden sich lediglich Verweise und Metadaten.
Dateispeicherung
Alle hochgeladenen Bilder und Videos werden im konfigurierten Speicherverzeichnis abgelegt.
Typischerweise befinden sich dort:
- Originalbilder
- Videos
- Vorschaubilder
- Profilbilder
- temporäre Dateien
Da die Dateien außerhalb der Datenbank liegen, lassen sie sich einfach sichern oder auf ein anderes Speichermedium verschieben.
Für größere Installationen kann der Speicher auch auf einem NAS oder einem anderen Dateisystem bereitgestellt werden.
Thumbnail-Erstellung
Große Fotos mit 30 oder 50 Megapixeln wären für die Darstellung im Browser ungeeignet.
Deshalb erzeugt Immich automatisch verschiedene Vorschaubilder.
Diese werden verwendet für:
- Timeline
- Alben
- Suchergebnisse
- Kartenansicht
- Personenansicht
Die Originaldateien bleiben dabei unverändert erhalten.
Kommunikation der Dienste
Ein großer Vorteil von Docker besteht darin, dass sämtliche Container über ein internes Netzwerk miteinander kommunizieren.
Die Kommunikation erfolgt vereinfacht nach folgendem Schema:
Browser
│
▼
Reverse Proxy
│
▼
Immich Server
│
┌────┼──────────────┐
│ │ │
▼ ▼ ▼
Redis PostgreSQL Machine Learning
│
▼
Dateisystem
Von außen sichtbar ist lediglich der Reverse Proxy. PostgreSQL, Redis und der Machine-Learning-Service bleiben ausschließlich intern erreichbar. Das erhöht die Sicherheit erheblich und reduziert die Angriffsfläche.
Warum Docker für diese Architektur ideal ist
Docker bringt für Immich zahlreiche Vorteile mit sich:
- klare Trennung der einzelnen Dienste
- einfache Updates
- reproduzierbare Installationen
- unkomplizierte Backups
- einfache Migration auf neue Server
- saubere Versionsverwaltung
- flexible Skalierung
Gerade bei komplexeren Anwendungen wie Immich erleichtert Docker den Betrieb und die Wartung erheblich.
Best Practices
Für eine stabile und leistungsfähige Installation haben sich folgende Empfehlungen bewährt:
- Alle Dienste ausschließlich über Docker betreiben.
- PostgreSQL und Redis nicht direkt aus dem Internet erreichbar machen.
- Einen Reverse Proxy mit HTTPS verwenden.
- Das Datenverzeichnis auf einer SSD speichern.
- Für umfangreiche KI-Analysen ausreichend Arbeitsspeicher bereitstellen.
- Regelmäßig Datenbank und Bildverzeichnis sichern.
- Logs der Container bei Problemen zuerst prüfen.
Die Architektur von Immich zeigt, warum die Software trotz ihres großen Funktionsumfangs schnell, flexibel und zuverlässig arbeitet. Durch die Aufteilung in spezialisierte Dienste wie Immich Server, Machine-Learning-Service, PostgreSQL und Redis lassen sich Aufgaben effizient verteilen und unabhängig voneinander weiterentwickeln. Docker sorgt dabei für eine saubere Trennung der Komponenten und vereinfacht Installation, Wartung sowie Updates.
Mit diesem Verständnis der internen Abläufe fällt es leichter, Fehler zu analysieren, die Performance zu optimieren und die eigene Installation sicher zu betreiben.
Im nächsten Teil der Serie widmen wir uns der Weboberfläche von Immich. Sie lernen die Benutzeroberfläche im Detail kennen – von der Zeitleiste über die Kartenansicht bis hin zur leistungsfähigen Suche und den zahlreichen Verwaltungsfunktionen.