Setup Immich
Overview
Self-hosted photo and video management solution.
Important Docker Files
.env file
.env
NAME=immich
APPDATA=
MEDIA=
SUB=photos
DOMAIN=
TAG=release
PORT=2283
DB_PASSWORD=
DB_HOSTNAME=immich-db
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
REDIS_HOSTNAME=immich-redis
hwaccel.yml file
hwaccel.yml
services:
cuda:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities:
- gpu
nvenc:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities:
- gpu
- compute
- video
docker-compose.yml file
docker-compose.yml
name: immich
services:
immich:
container_name: ${NAME}
image: ghcr.io/immich-app/immich-server:${TAG}
restart: always
extends:
file: hwaccel.yml
service: cuda
volumes:
- ${MEDIA}:/usr/src/app/upload
- /etc/localtime:/etc/localtime:ro
depends_on:
- ${NAME}-redis
- ${NAME}-db
networks:
- proxy
- internal-db
env_file:
- .env
labels:
swag: enable
swag_address: ${NAME}
swag_port: ${PORT}
swag_proto: http
swag_url: ${SUB}.${DOMAIN}
com.centurylinklabs.watchtower.enable: true
immich-ml:
container_name: ${NAME}-ml
image: ghcr.io/immich-app/immich-machine-learning:${TAG}-cuda
restart: always
env_file:
- .env
networks:
- internal-db
- proxy
extends:
file: hwaccel.yml
service: cuda
volumes:
- ${APPDATA}/${NAME}/${NAME}-ml:/cache
labels:
traefik.enable: false
com.centurylinklabs.watchtower.enable: true
immich-redis:
container_name: ${NAME}-redis
image: redis:alpine
restart: always
networks:
- internal-db
volumes:
- ${APPDATA}/${NAME}/${NAME}-redis:/data
labels:
com.centurylinklabs.watchtower.enable: true
immich-db:
container_name: ${NAME}-db
image: tensorchord/pgvecto-rs:pg16-v0.2.0
restart: always
networks:
- internal-db
env_file:
- .env
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
healthcheck:
test: pg_isready --dbname='${DB_DATABASE_NAME}' || 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
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:
- ${APPDATA}/${NAME}/${NAME}-db:/var/lib/postgresql/data
labels:
com.centurylinklabs.watchtower.enable: true
networks:
proxy:
external: true
internal-db:
external: true
Start the Container
Start the Container
docker compose up -d