99 lines
3.7 KiB
YAML
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"]
|