Immich Immich

Self-hosted photo and video backup and management platform

Immich is a high-performance self-hosted solution for backing up, organizing, and viewing photos and videos, with mobile clients, multi-user support, and local machine-learning search and recognition.

Links:

TODO: Configure and regularly test 3-2-1 backups for the library and PostgreSQL volume; review metrics and SSO requirements.

name: immich
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:v3
    container_name: immich-server
    restart: unless-stopped
    environment:
      TZ: ${TIMEZONE}
      DB_USERNAME: immich
      DB_PASSWORD: ${POSTGRES_PASSWORD}
      DB_DATABASE_NAME: immich
    volumes:
      - ${DOCKER_VOLUMES}/immich/library:/data
      - ${STORAGE_FAMILYMEDIA}:/external/family-media:ro
      # kics-scan ignore-line -- read-only timezone data, not a writable host directory.
      - /etc/localtime:/etc/localtime:ro
    depends_on:
      - redis
      - database
    networks:
      - proxy
      - immich
    labels:
      traefik.enable: true
      traefik.http.routers.immich.rule: Host(`immich.${MYDOMAIN}`)
      traefik.http.routers.immich.middlewares: localaccess@file
      traefik.http.services.immich.loadbalancer.server.port: 2283
      homepage.group: Media
      homepage.name: Immich
      homepage.icon: immich.png
      homepage.href: https://immich.${MYDOMAIN}/
      homepage.description: "Self-hosted photo and video backup and management platform"

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:v3
    container_name: immich-machine-learning
    restart: unless-stopped
    environment:
      TZ: ${TIMEZONE}
    volumes:
      - immich-model-cache:/cache
    networks:
      - immich

  redis:
    image: docker.io/valkey/valkey:9
    container_name: immich-redis
    restart: unless-stopped
    healthcheck:
      test: redis-cli ping || exit 1
    networks:
      - immich

  database:
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    container_name: immich-postgres
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_USER: immich
      POSTGRES_DB: immich
      POSTGRES_INITDB_ARGS: --data-checksums
    volumes:
      - immich-postgres:/var/lib/postgresql/data
    shm_size: 128mb
    healthcheck:
      disable: false
    networks:
      - immich

volumes:
  immich-model-cache:
  immich-postgres:

networks:
  proxy:
    external: true
  immich: