Aisle Files & photos

Immich

The Google Photos alternative.

Add to my serverdocker-compose generator (French)Step-by-step guide (French)Compare alternatives (French)Official documentation

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

  1. Right after installing, open the site and create the administrator account: until it exists, the first visitor can create it.
  2. 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