Skip to content

Immich

The Immich stack is centered the immich photo management server and its depedants with a slideshow webapp as addition.

ServiceURLPurposeProject
immichphotos.fjellhei.menImage managementimmich.app
immich-kioskkiosk.fjellhei.menImage gallerydamongolding/immich-kiosk

"Immich is a self-hosted photo and video management solution."

"Immich-kiosk is a web slideshow for Immich."

docker-compose.yaml

yaml
---
name: immich

services:

  server:
    image: ghcr.io/immich-app/immich-server:v1.115.0
    container_name: immich-server
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /homeserver/immich/data/upload:/usr/src/app/upload
      - /xdrive/Data/Photos:/usr/src/app/external:ro
    networks:
      - proxy-network
      - immich-network
    env_file:
      - /homeserver/.env
      - /homeserver/immich/.env
    depends_on:
      - redis
      - database
    restart: unless-stopped

  redis:
    image: docker.io/redis:6.2-alpine@sha256:2d1463258f2764328496376f5d965f20c6a67f66ea2b06dc42af351f75248792
    container_name: immich-redis
    networks:
      - immich-network
    env_file:
      - /homeserver/.env
    healthcheck:
      test: redis-cli ping || exit 1
    restart: unless-stopped

  database:
    image: docker.io/tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
    container_name: immich-database
    command: ["postgres", "-c" ,"shared_preload_libraries=vectors.so", "-c", 'search_path="$$user", public, vectors', "-c", "logging_collector=on", "-c", "max_wal_size=2GB", "-c", "shared_buffers=512MB", "-c", "wal_compression=on"]
    volumes:
      - /homeserver/immich/data/postgres:/var/lib/postgresql/data
    networks:
      - immich-network
    env_file:
      - /homeserver/.env
      - /homeserver/immich/.env
    environment:
      POSTGRES_INITDB_ARGS: '--data-checksums'
    healthcheck:
      test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ "$$Chksum" = '0' ] || exit 1
      interval: 5m
      start_interval: 30s
      start_period: 5m
    restart: unless-stopped

  kiosk:
    image: damongolding/immich-kiosk:latest
    container_name: immich-kiosk
    networks:
      - immich-network
      - proxy-network
    env_file:
      - /homeserver/.env
      - /homeserver/immich/immich-kiosk.env
    environment:
      KIOSK_IMMICH_URL: immich-server:3001
    healthcheck:
      test: wget -nv -t1 --spider http://localhost:3000 || exit 1
      interval: 1m
      start_period: 20s
      timeout: 10s
      retries: 3
    restart: unless-stopped

networks:
  immich-network:
    name: immich-network
  proxy-network:
    external: true