Immich

Veröffentlicht: 15.11.2025 | Aktualisiert: 11.04.2026

Immich ist Google / Apple Fotos souverän selbst gehostet, mit fast allen von dort bekannten Features.

Konkret bedeutet das, dass die Bilder die wir auf dem Handy machen, automatisch zu Immich hochgeladen werden und dort dann auf allen anderen verbundenen Endgeräten sowie über die Web-UI zur Verfügung stehen. Über eine einfache KI werden außerdem Gesichter erkannt und über die Geotags der Bilder Positionsdaten verfügbar gemacht.

Gegenüber anderen freuen Open-Source Alternativen wie die in Nextcloud, Opencloud oder Owncloud sticht die Spezialisierung und Zuverlässigkeit der Synchronisation heraus.

Setup

Immich ist eine klassische Client/Server App.

Server

Immich lässt sich als Service auf unserem VPS betreiben.

Zur Realisierung richten wir die folgende Docker-Compose Infrastruktur in einem Projektordner unserer Wahl ein.

immich/
├── compose.yml
├── .env
├── db/
├── data/
└── model-cache/

Der Inhalt der Dateien folgt diesem Schema

+++++
compose.yml

services:
    immich-server:
        container_name: immich_server
        image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
        devices:
            - /dev/dri:/dev/dri
        volumes:
            - ${UPLOAD_LOCATION}:/data
            - /etc/localtime:/etc/localtime:ro
        env_file:
            - .env
        depends_on:
            - redis
            - database
        restart: unless-stopped
        healthcheck:
            disable: false
        networks:
            - default

    immich-machine-learning:
        container_name: immich_machine_learning
        image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
        group_add:
            - video
        devices:
            - /dev/dri:/dev/dri
        volumes:
            - ./model-cache:/cache
        env_file:
            - .env
        restart: unless-stopped
        healthcheck:
            disable: false
        networks:
            - default

    redis:
        container_name: immich_redis
        image: docker.io/valkey/valkey:8@sha256:81db6d39e1bba3b3ff32bd3a1b19a6d69690f94a3954ec131277b9a26b95b3aa
        healthcheck:
            test: redis-cli ping || exit 1
        restart: unless-stopped
        networks:
            - default

    database:
        container_name: immich_postgres
        image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
        environment:
            POSTGRES_PASSWORD: ${DB_PASSWORD}
            POSTGRES_USER: ${DB_USERNAME}
            POSTGRES_DB: ${DB_DATABASE_NAME}
            POSTGRES_INITDB_ARGS: "--data-checksums"
        user: "1000:1000"
        volumes:
            - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
        shm_size: 512mb
        restart: unless-stopped
        networks:
            - default
networks:
    caddy:
        external: true

+++++
Die Variablen erklärt:

ServiceVariableZweckBeispiel
AppimageDocker Image, mit der Versionsangabe aus der .envghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
AppdevicesHardwarebeschleunigung über eine (integrierte) Grafikkarte des Servers, falls verfügbar.* /dev/dri:/dev/dri
Appvolumes

+++++
.env

# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/zfsdata/apps/immich/library

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=./db

# 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=Europe/Berlin

# The Immich version to use. You can pin this to a specific version like "v2.1.0"
IMMICH_VERSION=v2

# 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=DEIN-DB-PASSWORD

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=immich

PUID=1000
PGID=1000

+++++
Während wir die beiden Ordner nur anlegen.

Client Setup

Apple iOS: https://get.immich.app/ios

Android: https://get.immich.app/android

Alternativen

  • Google Fotos
  • Apple Fotos
  • OpenCloud
  • Nextcloud
  • OwnCloud