What is it for?
Immich automatically backs up the photos and videos on your phone, with an interface very close to Google Photos: face recognition, search by content ("beach", "dog"), map, shared albums.
Who is it for?
Families who want their photos back from Google or iCloud.
Good to know
The official docs recommend at least 6 GB of RAM on the server, ideally 8 GB: face recognition is demanding.
Photos fill a disk quickly: plan for a large enough one.
After installing
- Right after installing, open the site and create the administrator account: until it exists, the first visitor can create it.
- Install the Immich app on your phone and turn on automatic backup.
The docker-compose
Example behind Traefik. To adapt it (Nginx Proxy Manager, local port…) with a line-by-line explanation, use the generator (in French).
# docker-compose.yml : Immich
services:
immich-server:
image: ghcr.io/immich-app/immich-server:release
container_name: immich
restart: unless-stopped
depends_on:
- redis
- database
environment:
DB_PASSWORD: "${DB_PASSWORD}"
DB_USERNAME: postgres
DB_DATABASE_NAME: immich
TZ: Europe/Paris
volumes:
- ./library:/data
- /etc/localtime:/etc/localtime:ro
networks:
- traefik
- default
labels:
- traefik.enable=true
- traefik.http.routers.immich.rule=Host(`photos.mydomain.com`)
- traefik.http.routers.immich.entrypoints=websecure
- traefik.http.routers.immich.tls.certresolver=letsencrypt
- traefik.http.services.immich.loadbalancer.server.port=2283
- traefik.docker.network=traefik
immich-machine-learning:
image: ghcr.io/immich-app/immich-machine-learning:release
container_name: immich-immich-machine-learning
restart: unless-stopped
volumes:
- ./model-cache:/cache
redis:
image: docker.io/valkey/valkey:9@sha256:70739f85ad2ee01a726a965584a0f94895f01b0c60b3cc8b0aeef11eaa6888cf
container_name: immich-redis
restart: unless-stopped
security_opt:
- no-new-privileges:true
database:
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
container_name: immich-database
restart: unless-stopped
shm_size: 128mb
environment:
POSTGRES_PASSWORD: "${DB_PASSWORD}"
POSTGRES_USER: postgres
POSTGRES_DB: immich
POSTGRES_INITDB_ARGS: --data-checksums
volumes:
- ./postgres:/var/lib/postgresql/data
networks:
traefik:
external: true