Self-Hosted Fotoverwaltung mit KI – die unterschätzte Alternative

Übersicht
Heute schauen wir uns Immich an, einen selbst gehosteten Fotoservice, der mit modernen Machine-Learning-Funktionen begeistert. Gesichtserkennung, Objektsuche und automatische Sortierung, was man sonst nur von Google oder Apple kennt, holt Immich auf den eigenen Server und dafür brauchen wir nicht mal viele Ressourcen. Die cleane Oberfläche rundet das Ganze ab. In diesem Artikel zeige ich euch, wie ihr Immich installiert und euer persönliches, smartes Fotoarchiv aufbaut, ganz ohne Cloud-Zwang.
Das Video zum Beitrag findet ihr hier
Installation
Docker
Da wir Immich mit Docker betreiben möchten, installieren wir als erstes natürlich Docker selbst, falls noch nicht geschehen. Das können wir ganz einfach mit dem offiziellen Convenience Script von Docker machen.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Verzeichnis
Bevor wir fortfahren, müssen wir uns ein geeignetes Verzeichnis erstellen, wo wir Immich später laufen lassen wollen. Ich habe meine Docker Compose Stacks immer gerne unter /opt
. In dem genutzten Lab läuft Dockge als Übersicht für die Docker Container, somit ist mein Zielverzeichnis /opt/stacks/
. Darunter erstelle ich einen neuen Ordner für Immich mit:
sudo mkdir immich
cd immich
Docker Compose File
Als nächstes benötigen wir das Docker Compose File für Immich. Dies beinhaltet alle nötigen Container. Das File können wir mit wget
herunterladen und anschließend noch auf unsere Bedürfnisse anpassen.
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
In meinem Fall kommentiere ich den Port aus, da ich später nur per https
über meinen Reverse-Proxy auf die Weboberfläche zugreifen möchte. Damit das funktioniert, muss ich zusätzlich noch das Netzwerk für den Reverse-Proxy (Caddy oder auch NPM) hinzufügen und allen Containern ein eigenes internal-netz
geben. Fertig sieht das Ganze dann so aus:
#
# WARNING: To install Immich, follow our guide: https://immich.app/docs/install/docker-compose
#
# Make sure to use the docker-compose.yml of the current release:
#
# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
#
# The compose file on main may not be compatible with the latest release.
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
#ports:
# - '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
networks:
- immich-internal
- reverse-proxy
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false
networks:
- immich-internal
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:8-bookworm@sha256:ff21bc0f8194dc9c105b769aeabf9585fea6a8ed649c0781caeac5cb3c247884
healthcheck:
test: redis-cli ping || exit 1
restart: always
networks:
- immich-internal
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.2.0@sha256:fa4f6e0971f454cd95fec5a9aaed2ed93d8f46725cc6bc61e0698e97dba96da1
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
# DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
restart: always
networks:
- immich-internal
volumes:
model-cache:
networks:
immich-internal:
reverse-proxy:
external: true
Docker Environment File
Unsere eigentlichen Einstellungen nehmen wir jetzt noch im Environment File vor. Die Datei können wir uns ebenfalls mit wget
herunterladen.
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
In der Datei haben wir jetzt 6 Variablen, die wir auf unsere Bedürfnisse anpassen können. Wichtig hierbei ist ein eigenes und vor allem sicheres Postgres Passwort zu vergeben. Achtet hier darauf, möglichst keine Sonderzeichen zu nutzen, da diese nur Probleme machen.
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables
# The location where your uploaded files are stored
UPLOAD_LOCATION=./library
# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=SuperSicheresKennwort12345
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
Start
Nachdem wir nun also die docker-compose.yaml
und die .env
in unserem Immich Verzeichnis haben, können wir die Container starten.
sudo docker compose up -d
Reverse Proxy
Wie erwähnt, möchte ich Immich nun direkt über eine gewünschte Domain und per https
erreichen. Dafür habe ich ein Reverse-Proxy Setup auf meinem Docker Host implementiert, der dies super einfach macht. In dem aktuellen Lab basiert das auf dem Nginx Proxy Manager. Eine weitere und noch schlankere Möglichkeit ist die Umsetzung mit Caddy.
Um jetzt Immich erreichen zu können, haben wir bereits das reverse-proxy
Docker-Netzwerk zu dem Hauptcontainer hinzugefügt. Nun können wir im Nginx Proxy Manager einfach einen neuen Host mit dem entsprechenden Containernamen hinzufügen und geben den eigentlichen Port an.
Erste Schritte
Wenn wir zu unserer gewünschten Domain navigieren, erhalten wir jetzt einen Willkommensbildschirm.
Account Erstellen
Der erste Account, den wir uns erstellen, wird automatisch ein Admin bei Immich und erhält alle Berechtigungen. Wir können später weitere Accounts erstellen.
Nach dem Registrieren loggen wir uns dann mit unserem erstellten Account ein.
Allgemeine Einstellungen
Nach dem ersten Einloggen landen wir in einem Einrichtungsmenü, wo wir einmal alle Basics konfigurieren.
Theme
Als erstes haben wir die Möglichkeit das Theme festzulegen, ob Hell oder Dunkel.
Privatsphäre
Als nächstes können wir verschiedene Funktionen aktivieren oder deaktivieren, die externe Tools nutzen.
Speichervorlage
Die Speichervorlagenfunktion würde ich einfach deaktiviert lassen, da selbst Immich hier andeutet, dass diese nicht stabil läuft.
Administration
Alle weiteren Einstellungen könnt ihr unter dem Punkt Verwaltung vornehmen. Hier sind alle Einstellungspunkte für die Immich-Instanz an sich.
Benutzer
Unter dem Reiter Benutzer könnt ihr neue Benutzer anlegen, wenn beispielsweise eure Familie oder Freunde ebenfalls auf die Immich Instanz zugreifen sollen.
Aufgaben
Unter dem Reiter Aufgaben seht ihr alle Jobs, die regelmäßig auf dem Server laufen. Ihr habt hier die Möglichkeit, diese auch manuell laufen zu lassen oder eigene Aufgaben zu erstellen.
Einstellungen
Ihr habt die Möglichkeit, eine Authentifizierung via einem OAuth-Dienst a la Authentik oder Microsoft Entra zu konfigurieren und könnt grundlegende Sachen wie das Backup und die verschiedenen Funktionen wie das maschinelle Lernen für die Gesichtserkennung einstellen.
Externe Bibliothek
Unter diesem Punkt habt ihr die Möglichkeit, eine externe Bilderbibliothek zu hinterlegen, welche nicht von Immich verwaltet wird.
Server-Statistiken
Der letzte Punkt gibt euch eine schöne Übersicht über euren Server und alle Daten.
Smartphone App
Natürlich gibt es für Immich eine App für die verschiedenen Betriebssysteme. Die könnt ihr einfach herunterladen und euch dann mit eurem Immich Server verbinden. In der App könnt ihr dann automatische Synchronisationen für eure Bilder konfigurieren.