In dieser Anleitung zeige ich euch, wie ihr Immich mittels Docker und Traefik bereitstellen könnt. Immich ist eine open source, high performance self-hosted backup Lösung für eure Bilder und Videos vom Handy. Es gibt für die Handys die passenden Apps.
| Datum | Änderungen |
|---|---|
| 18.10.2022 | Erstellung der Anleitung |
| 29.03.2023 | Container typesense in docker-compose.yml und .env letzte Zeile ergänzt. Client und Server müssen identisch sein. |
| 01.06.2023 | Anpassung der Traefik Labels @christian |
| 29.11.2023 | Anpassung auf Version 1.88.2 @Andi.bar |
| 30.12.2023 | Anpassung auf Version v1.91.0 |
| 31.05.2024 | Anpassung an aktuelle Version. Danke an @drr00t |
| 17.06.2024 | Anpassung auf Version v1.106.4 |
| 11.10.2025 | Anpassung auf Version 2.01 (stable) ( Änderungen Images redis, database, DB_Storage_Type ssd or hdd) |
| 04.03.2026 | docker-compose.yml und .env an aktuelle Version im Github angepasst |
| 06.03.2026 | .env Hostnames und docker-compose.yml korrigiert / ergänzt Danke @andreas |
1. Ordner anlegen
Als Erstes legst du die Ordner an.
mkdir -p /opt/containers/immich
mkdir -p /opt/containers/immich/upload
mkdir -p /opt/containers/immich/example
2. .env anlegen
Nun wird die .env angelegt. Laut Dokumentation soll die Version auf v2 festgesetzt werden.
nano /opt/containers/immich/.env
Kopiert nun folgenden Inhalt:
DB_USERNAME=postgres
DB_PASSWORD=hier ein sicheres Kennwort ## Ein Passwort setzen ##
DB_DATABASE_NAME=immich
DB_DATA_LOCATION=/opt/containers/immich/postgres
UPLOAD_LOCATION=/opt/containers/immich/upload
EXAMPLE_LOCATION=/opt/containers/immich/example
IMMICH_VERSION=v2
PUBLIC_LOGIN_PAGE_MESSAGE=
TZ=Europe/Berlin
REDIS_HOSTNAME=immich_redis
DB_HOSTNAME=immich_postgresCode-Sprache: PHP (php)
Noch anzupassen:
Sicheres Passwort festlegen
3. Docker Compose anlegen
Jetzt erstellen wir uns eine Docker Compose Datei.
nano /opt/containers/immich/docker-compose.yml
Kopiert nun folgenden Inhalt:
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
volumes:
- ${UPLOAD_LOCATION}:/data
env_file:
- .env
ports:
- 2283:2283
labels:
traefik.docker.network: proxy
traefik.enable: "true"
traefik.http.routers.immich-secure.entrypoints: websecure
traefik.http.routers.immich-secure.rule: Host(`immich.euredomain.de`)
traefik.http.routers.immich-secure.service: immich
traefik.http.routers.immich-secure.tls: "true"
traefik.http.routers.immich-secure.tls.certresolver: tls_resolver
traefik.http.services.immich.loadbalancer.server.port: "2283"
networks:
default: null
proxy: null
depends_on:
- redis
- immich-postgres
restart: always
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:2bce660b767cb62c8c0ea020e94a230093be63dbd6af4f21b044960517a5842d
healthcheck:
test: redis-cli ping || exit 1
restart: always
immich-postgres:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
env_file:
- .env
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: 'SSD'
volumes:
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always
volumes:
model-cache:
networks:
proxy:
external: true
Code-Sprache: PHP (php)
Noch anzupassen:
- hostname = eure Domain bei Traefik (immich.euredomain.de)
4. Immich starten
Dazu gebt ihr einfach folgenden Befehl ein:
docker compose -f /opt/containers/immich/docker-compose.yml up -d
Der Start dauert etwas. Wenn ihr nun auf eure Webseite (immich.euredomain.de) geht, solltet ihr folgendes sehen:

Nun könnt ihr anfangen.

Zuerst erstellen wir einen Admin-Account.


Benutzer anlegen.


Jetzt könnt ihr euch die mobilen Apps für Android & IPhone auf das Handy aus dem Appstore & Playstore besorgen und eure Videos und Bilder auf dem Server laden. Bei der IPhone App ist mir aufgefallen, dass der Upload bei der automatischen Sperre abbricht. Also, deaktiviert beim ersten Upload die automatische Sperre. Ich bin begeistert von “diesem feinen Stück Software”. 🙂 Viel Spaß.

Hallo,
es gibt bei mir ein neues Problem mit Immich. Eigentlich hat alles lange gut funktioniert. Über tausend Bilder hat Immich problemlos hochgeladen. Bei dem Versuch eines Freundes, ca. 400 Fotos über die App von einem Handy hochzuladen gab es nach der Hälfte einen Abbruch und Fehlermeldungen. Jetzt habe ich nochmal über die Computer versucht hochzuladen, in kleineren Chargen etwa 500 Bilder, und habe festgestellt, dass die CPU des Servers durch Phyton lange auf 100% ausgelastet war. Danach ging dann gar nichts mehr, alle meine Websites waren über den Crowdsec-Stack nicht mehr erreichbar. Wie ich festgestellt habe, hatte Crowdsec meine öffentliche IP wegen “http-probing” gebannt. Hat jemand das gleiche Problem und weiß, wo der Fehler liegt?
Wäre sehr dankbar, wenn mir jemand da helfen könnte.
Hallo, ich habe die Anleitung so übernommen. Leider zieht der Traefik-Crowdsec-Stack keine Zertifikat von Let’s encrypt, sodass der Browser immer die Meldung “Gesicherte Verbindung fehlgeschlagen” anzeigt. Hat jemand dasselbe Problem und kennt die Lösung?
Hallo
steje , hat es einen Grund dass aus der .env die Einträge zum Hostname entfernt wurden. Ich bekomme es nur zum laufen wenn ich die Zeilen aus der alten Anleitung bestehen lasse. Bei mir sieht es dann so aus:
DB_HOSTNAME=immich_postgres
DB_USERNAME=postgres
DB_PASSWORD=hier ein sicheres Kennwort ## Ein Passwort setzen ##
DB_DATABASE_NAME=immich
DB_DATA_LOCATION=/opt/containers/immich/postgres
REDIS_HOSTNAME=immich_redis
UPLOAD_LOCATION=/opt/containers/immich/upload
EXAMPLE_LOCATION=/opt/containers/immich/example
IMMICH_VERSION=v2
PUBLIC_LOGIN_PAGE_MESSAGE=
TZ=Europe/Berlin
Gruß Andreas
Hallo
steje bei deiner Überarbeitung ist dir bei
immich-postgres: (Zeile 46)
der Doppelpunkt abhanden gekommen.😀