app-store/apps/immich/docker-compose.yml

99 lines
3.7 KiB
YAML

version: "3.7"
services:
immich:
container_name: immich
image: ghcr.io/immich-app/immich-server:v1.106.4
volumes:
- ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload
environment:
- NODE_ENV=production
- DB_HOSTNAME=immich-db
- DB_USERNAME=tipi
- DB_PASSWORD=${DB_PASSWORD}
- ENABLE_MAPBOX=false
- DB_DATABASE_NAME=immich
- REDIS_HOSTNAME=immich-redis
- JWT_SECRET=${JWT_SECRET}
depends_on:
- immich-redis
- immich-db
ports:
- ${APP_PORT}:3001
restart: unless-stopped
networks:
- tipi_main_network
labels:
# Main
traefik.enable: true
traefik.http.middlewares.immich-web-redirect.redirectscheme.scheme: https
traefik.http.services.immich.loadbalancer.server.port: 3001
# Web
traefik.http.routers.immich-insecure.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.immich-insecure.entrypoints: web
traefik.http.routers.immich-insecure.service: immich
traefik.http.routers.immich-insecure.middlewares: immich-web-redirect
# Websecure
traefik.http.routers.immich.rule: Host(`${APP_DOMAIN}`)
traefik.http.routers.immich.entrypoints: websecure
traefik.http.routers.immich.service: immich
traefik.http.routers.immich.tls.certresolver: myresolver
# Local domain
traefik.http.routers.immich-local-insecure.rule: Host(`immich.${LOCAL_DOMAIN}`)
traefik.http.routers.immich-local-insecure.entrypoints: web
traefik.http.routers.immich-local-insecure.service: immich
traefik.http.routers.immich-local-insecure.middlewares: immich-web-redirect
# Local domain secure
traefik.http.routers.immich-local.rule: Host(`immich.${LOCAL_DOMAIN}`)
traefik.http.routers.immich-local.entrypoints: websecure
traefik.http.routers.immich-local.service: immich
traefik.http.routers.immich-local.tls: true
immich-machine-learning:
container_name: immich-machine-learning
image: ghcr.io/immich-app/immich-machine-learning:v1.106.4
volumes:
- ${ROOT_FOLDER_HOST}/media/data/images/immich:/usr/src/app/upload
- ${APP_DATA_DIR}/data/immich-ml-cache:/cache
environment:
- NODE_ENV=production
- DB_HOSTNAME=immich-db
- DB_USERNAME=tipi
- DB_PASSWORD=${DB_PASSWORD}
- DB_NAME=immich
- DB_DATABASE_NAME=immich
depends_on:
- immich-db
restart: unless-stopped
networks:
- tipi_main_network
immich-redis:
container_name: immich-redis
image: redis:6.2
restart: unless-stopped
networks:
- tipi_main_network
healthcheck:
test: redis-cli ping || exit 1
immich-db:
container_name: immich-db
image: tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:90724186f0a3517cf6914295b5ab410db9ce23190a2d9d0b9dd6463e3fa298f0
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: tipi
POSTGRES_DB: immich
PG_DATA: /var/lib/postgresql/data
volumes:
- ${APP_DATA_DIR}/data/db:/var/lib/postgresql/data
restart: unless-stopped
networks:
- tipi_main_network
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"]