Inhaltsverzeichnis
Letzte Aktualisierung am 02.06.2025, 23:06:28 Uhr
Ich bin schon länger auf der Suche nach einer Lösung, um meine ganzen Fotos zu verwalten. Angefangen hat es vor 10 Jahren mit einem SMB-Share auf meinem NAS. Mit den Jahren kamen immer mehr Fotos von Events, Urlaube, etc. hinzu.
Das SMB-Share hat mich nie im Stich gelassen. Klare Strukturen und Sortierung erfolgt entsprechend des Namensschemas für Die Hauptverzeichnisse und deren Unterordnern. Gerade im Urlaub machen oftmals mehre Personen Fotos. Durch die Unterordner war immer nachvollziehbar, wer die Bilder gemacht hat. Auch die Sicherung des SMB-Shares war simpel. Es gibt keine Abhängigkeiten zu Datenbanken, weitere Informationen wie Metadaten, Miniaturansichten, etc.
Seit ca. einem Jahr macht mich die aktuelle Lösung nicht mehr vollumfänglich glücklich. Keine Tagging, keine Schlagwörter, Geo Informationen, Teilen von Fotos ist umständlich bzw. nicht möglich.
Nach einigen Tests von verschiedenen Tools (z.B. Synology Photo) habe mir auch die Open Source Lösung Immich angeschaut. Nach vielen Recherchen/Lesen, habe das Tool ausprobiert und habe ich mich entschlossen dieses auch aufzusetzen.
Nachstehend beschreibe ich die notwendigen Schritte für den initialen Installation auf einem Synology NAS auf dem DSM 7.2.x installiert ist. Beim Test verwende ich Immich in der Version v1.134.0. Zudem die jeweiligen Standard Ports der Container bzw. Anwendungen.
Vorbereitungen
SMB-Shares
Ich habe ein SMB-Share mit dem Namen „docker“. Dort lege ich für jedes Projekt/Container ein gleichnamiges Verzeichnis an. In diesem Fall heißt der Ordner „immich-app“. Umso später den Überblick behalten. Aber auch wenn das Docker Projekt wieder gelöscht werden sollte, alle Daten, Dateien, etc. auf einen Schwung löschen zu können.
![]() |
Dort liegen später zwei Dateien (.env und compose.yaml) für das Project.
Die Daten, welche durch die Container von Immich erzeugt werden, lagere ich gerne in ein dediziertes SMB-Share aus. Dieses heißt „immich“.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Benutzer und Gruppen
Ein neuer Benutzer mit dem Namen „immich“ anlegen. Das Passwort darf gerne lange und komplex sein. Das Passwort muss nicht notiert werden. Da später keine Anmeldung vorgesehen ist.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Danach lege ich noch eine neue Gruppe mit dem Namen „immich“ an.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Bereitstellen der Container
Es gibt verschiedene Anleitungen im Internet, welche die Bereitstellung der Container mit Hilfe von Portainer auf einer Synology NAS realisieren. Ich beschränke mich auf 1st Party Lösungen, um so auch bei vermeidlichen Problemen den technischen Support von Synology an meiner Seite zu haben.
Falls der Container Manager noch nicht installiert ist, kann dies über das Paketzentrum vom DSM erfolgen.
Es ist kein Neustart des DSM/NAS erforderlich. Der Container Manager kann nach erfolgreicher Installation sofort verwendet werden.
Network
Im Gegensatz zu allen mir bekannten Anleitungen im Internet, habe ich mich dazu entschieden das notwendige Netzwerk Objekt manuell im Vorfeld anzulegen. Das hat der Vorteil, dass das IPv4 Subnetz von mir vorgegeben werden kann. Des Weiteren wird das Objekt bei einem „Clean“ und „Build“ des Projects nicht gelöscht und neu angelegt. Was zur Folge hat, dass auch ein zufällig gewähltes IPv4 Subnetz genommen wird.
![]() |
![]() |
![]() |
Falls im DSM die Firewall aktiv ist, muss nun auch für das neue Subnetz eine Regel angelegt werden. Somit ist sichergestellt, dass jegliche Kommunikation möglich ist.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Project anlegen
Das Tool Immich besteht aus mehreren Containern. Hat bietet es sich an dieses als Project im Container Manager zu erstellen.
![]() |
![]() Beschreibung der Parameter:
|
Nachstehend meine aktuelle Version der YAML-Datei:
Synology DSM 7.2.x | Link |
Ich habe, soweit es in meinen Augen sinnvoll ist, Parameter bzw. deren Werte in eine Environment Datei ausgelagert. Umso die größtmögliche Flexibilität zu haben.
Wer so wie ich ein SMB-Share mit Bildern an Immich als Externe Bibliothek durchreichen möchte, kann dies mit Zeile 24 zu tun. Wichtig in diesem Fall ist zu wissen, auf welchen Volume das SMB-Share im DSM aktuell liegt. Das findet man über das Control Panel -> Shared Folder heraus:
![]() |
Als Ziel innerhalb des Containers habe ich den identischen Pfad genommen. Um nicht durcheinander zu kommen zwischen dem Pfad im Synology DSM und des Containers. Wichtig ist nur, dass der Pfad im Container nicht existieren darf.
Wie vorhin bereits kurz erwähnt, habe ich viele Parameter bzw. dessen Werte in eine dedizierte Datei ausgelagert. Diese hat bei mir dem Namen „.env“ und hat folgenden Inhalt:
Synology DSM 7.2 | Link |
Nachstehend auch eine Beschreibung von verschiedenen Parametern:
UID: Es handelt sich um die ID des Benutzer immich, welcher vorhin im Kapitel Vorbereitungen -> Benutzer und Gruppen erstellt worden ist. Die ID kann meines Wissens nach aktuell nur über die Shell (via SSH) mit dem Befehl id -u immich ausgelesen werden. |
![]() |
GID: Es handelt sich um die ID der Gruppe immich, welcher vorhin im Kapitel Vorbereitungen -> Benutzer und Gruppen erstellt worden ist. Die ID kann meines Wissens nach aktuell nur über die Shell (via SSH) mit dem Befehl id -G immich | awk ‚{ print $2 }‘ ausgelesen werden. |
![]() |
DSM_APP_SHARE: Absoluter Pfad des SMB -Share, auf welchen die Daten der Container später gespeichert werden sollen. Wie der Pfad herausgefunden werden kann, habe ich bereits weiter oben beschrieben. |
DB_PASSWORD: Hier ein neues, langes, komplexes Passwort eingeben. |
Die Datei mit dem Namen „.env“ mit Hilfe der File Station in das Verzeichnis „docker/immich-app“ hochladen. Damit diese beim Start der Container von Docker verwendet werden kann.
![]() |
Verzeichnisse für Container erstellen
Ich habe bei den Vorbereitungen ein SMB-Share mit dem Namen „immich“ erstellt. In diesem Verzeichnis müssen nun Unterverzeichnisse erstellt werden.
Dazu die File Station im Synology DSM starten und links in das SMB-Share navigieren. Die Struktur muss wie folgt aussehen:
![]() |
Wenn du die Namen der Verzeichnisse in der YAML-Datei geändert hast, sind an dieser Stelle natürlich die neuen Namen zu verwenden. |
Zugriff auf App
Es gibt nun zwei Möglichkeiten den Zugriff auf Immich für die Anwender zu realisieren:
Dedizierten Port für die Anwendung
In diesem Fall ist dies aktuell „2283/tcp“. D.h. der Aufruf im Browser erfolgt über <IP:2283> oder <FQDN:2283> der NAS. In diesem Fall ist bei aktiver Firewall eine weitere Regel anzulegen. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Reverse Proxy
Diese Funktionalität wird oftmals verwendet, wenn viele/alle Anwendungen über verschiedene FQDN, aber immer über den gleichen Port (z.B. 443/tcp) erreichbar sein sollen. Die Konfiguration als Reverse Proxy findest du im DSM unter Control Panel -> Login Portal -> Advanced.
![]() |
![]() |
![]() |
![]() |
![]() |
Project starten
Es geht zurück in den Container Manager. Um die Anwendung bzw. deren Container zu starten.
![]() |
![]() |
![]() |
Der erste Start aller Container kann einige Zeit in Anspruch nehmen. Daher nicht ungeduldig werden. Zeit für einen Tee. |
![]() |
![]() |
Ist die Up Time der Container bei ca. 1 Minute ist die Anwendung in der Regel auch verfügbar. |
![]() |
Nun kann die initiale Einrichtung und Konfiguration von Immich durchgeführt werden. Darauf gehe ich an dieser Stelle nicht mehr drauf ein.
Benutzermanagement über DSM
Immich bringt standardmäßig eine eigene Benutzerverwaltung mit. Sprich es gibt keine Verknüpfung mit dem Synology DSM. In diesem Kapitel gehe ich auf die Anbindung von Synology DSM mit Hilfe von SSO-Server ein.
In der aktuellen Version bietet Immich für die Authentifizierung der Benutzer das Protokoll OAuth an. Genau dieses mache ich mir zu nutzen. Denn Synology bietet als 1st Party Package das Paket „SSO-Server“ an. Somit können sich später alle Benutzer aus dem Synology DSM an Immich anmelden.
Voraussetzung dafür ist, dass
- es für den SSO-Server einen dedizierten FQDN (z.B. sso.domain.de) gibt.
- es für Immich einen dedizierten FQDN (z.B. foto.domain.de) gibt und auch erreichbar darüber ist.
- ein gültiges SSL-Zertifikat (z.B. von Let’s Encrypt) vorhanden ist, welches die FQDN sowohl sso.domain.de und foto.domain.de abgedeckt.
SSO Server in Betrieb nehmen
Falls noch nicht geschehen bzw. in Verwendung über das Package Center das Paket „SSO-Server“ suchen und anschließend installieren. |
![]() |
Nach erfolgreicher Installation die App „SSO-Server“ starten. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Das Paket erzeugt selbstständig die Application ID und Application Secret. Diese Informationen sind immer einsehbar. Dazu den Eintrag aus der Liste (siehe letzter Screenshot) markieren und auf die Schaltfläche „Edit“ klicken. Es öffnet sich ein weiterer Dialog. |
![]() |
Konfiguration von OAuth in Immich
![]() |
![]() |
Der Parameter „ISSUER_URL“ muss dem Wert aus dem Synology SSO-Server entsprechen. Die URL ist im SSO-Server unter Services -> OIDC -> Well-known URL zu finden.
Der Parameter „Client_ID“ entspricht der Application ID. Dieser Wert findet man ebenfalls im Synology SSO Server, unter Application. Dort den entsprechenden Eintrag auswählen und editieren. Der Parameter „Client_SECRET“ entspricht dem Application secret. Dieser Wert findet man ebenfalls im Synology SSO Server, unter Application. Dort den entsprechenden Eintrag auswählen und editieren. |
![]() |
Im unteren Bereich können noch optionale Einstellungen vorgenommen werden, wie z.B. der Test für die Anmeldung via OAuth.
Standardmäßig können sich nun alle Benutzer, welche im Synology DSM vorhanden sind, auch an immich anmelden. Wenn dies nicht gewünscht ist, ist der Parameter „Auto Register“ zu deaktivieren (was im Screenshot bereits der Fall ist). D.h. soll sich ein Benutzer aus dem Synology DSM anmelden können, gibt es zwei Optionen:
|
Sind alle Konfigurationen durchgeführt müssen diese über die Schaltfläche „Save“ noch gespeichert werden. Danach gibt es in der Web UI am Seiten Ende die Option für die Anmeldung über OAuth. |
![]() |
![]() |
![]() |
![]() |
Benutzer, welche über die Funktion „AUTO REGISTER“ an Immich angemeldet haben, müssen aktuell leider den (Benutzer)namen noch manuell hinzufügen. |
![]() |
![]() |
Danach erscheint überall der Nutzernamen.
Aktualisierung der Images
Natürlich müssen mit der Zeit auch die Container Images aktualisiert werden. Nachstehend beschreibe ich die verschiedenen Schritte.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Wie in dem Screenshot oben zu sehen ist, gibt es „nur“ für redis ein neues Image. Es können natürlich problemlos auch mehrere Images aktualisiert werden. |
![]() |
![]() |
![]() |
![]() |
Sind alle Images aktualisiert, kann das Project wieder gestartet werden. |
![]() |
![]() |
![]() |
Das kann natürlich beim ersten Start wieder länger dauern. Daher nicht ungeduldig werden. |
Einbinden vorhandener Bildersammlung
Nachdem die Instanz up and running ist, geht es natürlich noch darum die Bilder zu importieren. Auf Grund diverser Kommentare im Forum und Erfahrungsberichte, sowie die Warnungen auf der GitHub Startseite des Projekts, habe ich mich für folgende Lösung entschieden:
- Ich lege die Bilder nach wie vor auf meinem bestehenden SMB-Share „photo“ ab.
- Reiche dieses Share als Volume (read only) in der Docker Compose File an Immich durch.
- Verwende in Immich die Funktion „External Library Management“. Alle Miniaturansichten, Metadaten, KI, Datenbank, etc. werden auf das SMB-Share „immich“ geschrieben.
- Die Sicherung der Bilder kann wie bisher erfolgen – keep it simple. Sollte einmal bei einem Update von Immich es zu einem Defekt/Ausfall kommen, ist das zwar unschön. Aber meine Bilder sind nach wie verfügbar und einsehbar.
Wer sich für den gleichen Weg entscheidet, muss die Zeile 24 in der YAML-Datei ein kommentieren. Wichtig in diesem Fall ist zu wissen, auf welchen Volume das SMB-Share im DSM aktuell liegt. Das findet man über das Control Panel -> Shared Folder heraus: |
![]() |
Damit die YAML-Datei bearbeitet werden kann, muss das Project gestoppt werden. |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Anschließend in den Browser wechseln und Immich aufrufen. Für die Konfiguration muss sich das Benutzerkonto mit den Administrationsrechte anmelden. |
![]() |
![]() |
![]() |
![]() |
![]() |
Über das „3 Punkte“ Menü kann nun manuell ein „Scan“ gestartet werden. Anschließend wird in der Übersicht dargestellt wie viele Bilder und Videos gefunden worden sind und wie groß diese insgesamt sind. |
Diese Schritte können für beliebig viele SMB-Shares wiederholt werden. Wichtig dabei ist, dass jeder Pfad/Name eindeutig sein muss!
Nun können die Bilder einem oder mehreren Alben zugewiesen und verwaltet werden.
Automatisch Alben erzeugen
Wer aber so faul ist wie ich und gerne die Ordnerstruktur auf dem SMB-Share, auf dem die Bilder eigentlich liegen, als Album haben möchte, sucht natürlich nach Automatismen. Und ich bin fündig geworden. 🙂
Zuerst wieder die Container bzw. das Project stoppen. Anschließend folgende Zeilen in der YAML-Datei ganz am Ende hinzufügen:
immich-folder-album-creator: container_name: immich-folder-album-creator image: salvoxia/immich-folder-album-creator:latest security_opt: # Prevent escalation of privileges after the container is started - no-new-privileges:true cap_drop: # Prevent access to raw network traffic - NET_RAW restart: unless-stopped environment: API_URL: http://${IMMICH_SERVER_HOSTNAME}:${IMMICH_SERVER_PORT}/api API_KEY: "geheim" ROOT_PATH: /volume3/photo ALBUM_LEVELS: "1,3" CRON_EXPRESSION: "*/5 * * * *" RUN_IMMEDIATELY: true TZ: ${TZ} depends_on: immich-server: condition: service_healthy
Sehr wichtig dabei ist, dass die Einrückungen der Zeilen in der YAML-Datei passen. Anderenfalls wird sich das Project später nicht mehr starten lassen.
Abgesehen davon muss in der Konfiguration der Parameter „API_KEY“ mit einem Wert gefüllt werden. Und zwar muss der API Key von dem Benutzer ausgestellt werden, auf den die externe Bibliothek auch läuft. In dessen Kontext werden schlussendlich auch die Alben erstellt.
Über den Parameter „ALBUM_LEVELS“ lässt sich granular steuern, für welche Verzeichnisse ein Album erzeugt werden sollen. Wie, was, wo kann in der Dokumentation nachgelesen werden.
Die Variable „ROOT_PATH“ beinhaltet den absoluten Pfad des Verzeichnisses innerhalb des Containers „Immich-Server“.
Anschließend kann das Project über den Container Manager im Synology DSM wieder gestartet werden. Sobald alle Container laufen und „healthy“ sind, werden die Alben erstellt.
![]() |
![]() |
Fehlersuche
Beendet sich ein Container unerwartet, so ist mein erster Anlaufpunkt das Logfile des Containers. Dieses findet man im Container Manager -> Container.
![]() |
Den betroffenen Container auswählen und danach den Reiter „Log“ anklicken.
![]() |
Viel Spaß beim Ausprobieren. 🙂