Immich - Bilderarchiv
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.

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: #Applikationsserver
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} #Version aus der .env Datei
devices:
- /dev/dri:/dev/dri #Zur Grafikbeschleunigung mit Intel/AMD Grafikkraten im Host
volumes:
- ${UPLOAD_LOCATION}:/data #Speicherort der Bilder
- /etc/localtime:/etc/localtime:ro #Uhrzeit
env_file:
- .env #Name der .env Datei
depends_on:
- redis # Redis Cache Container
- database # Datenbankcontainer
restart: unless-stopped
healthcheck:
disable: false
networks:
- default #Internes Netzwerk
- caddy #Reverse Proxy Netzwerk
immich-machine-learning:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} #Version aus der .env Datei
group_add:
- video #Zur Grafikbeschleunigung mit Intel/AMD Grafikkraten im Host
devices:
- /dev/dri:/dev/dri #Zur Grafikbeschleunigung mit Intel/AMD Grafikkraten im Host
volumes:
- ./model-cache:/cache #Speicherort der KI-Modelle
env_file:
- .env #Name der .env Datei
restart: unless-stopped
healthcheck:
disable: false
networks:
- default #Internes Netzwerk
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} #Passwort au
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
+++++
+++++.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