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

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.