--- version: "3.8" services: app: image: ghcr.io/immich-app/immich-server:v3.1.0 volumes: - uploads:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro environment: - TZ - IMMICH_VERSION - DB_PASSWORD_FILE=/run/secrets/db_password - DB_USERNAME - DB_DATABASE_NAME secrets: - db_password networks: - proxy - backend healthcheck: test: ["CMD-SHELL", "immich-healthcheck"] start_period: 120s depends_on: - redis - database deploy: update_config: failure_action: continue labels: - "traefik.enable=true" - "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=2283" - "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})" - "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure" - "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}" - "coop-cloud.${STACK_NAME}.version=1.10.0+v3.1.0" - "backupbot.backup=${ENABLE_BACKUPS:-true}" - "backupbot.volumes.model-cache=false" - "backupbot.volumes.uploads=false" - "backupbot.volumes.external_storage=false" immich-machine-learning: # TODO: this has to be that name, as the frontend tries to reach it at: http://immich-machine-learning:3003 image: ghcr.io/immich-app/immich-machine-learning:v3.1.0 volumes: - model-cache:/cache networks: - backend healthcheck: disable: false redis: image: docker.io/valkey/valkey:9@sha256:3acc0687f2a2e1091fae6450d7842dd658c941338cf0a873ddd9e14b9e4ea4dd healthcheck: test: redis-cli ping || exit 1 networks: - backend database: image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23 environment: POSTGRES_PASSWORD_FILE: /run/secrets/db_password POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' DB_STORAGE_TYPE: ${DB_STORAGE_TYPE:-SSD} secrets: - db_password volumes: - postgres:/var/lib/postgresql/data networks: - backend deploy: labels: backupbot.backup: "${ENABLE_BACKUPS:-true}" backupbot.backup.pre-hook: "/pg_backup.sh backup" backupbot.backup.volumes.postgres.path: "backup.sql" backupbot.restore.post-hook: "/pg_backup.sh restore" configs: - source: pg_backup target: /pg_backup.sh mode: 0555 configs: pg_backup: name: ${STACK_NAME}_pg_backup_${PG_BACKUP_VERSION} file: pg_backup.sh secrets: db_password: external: true name: ${STACK_NAME}_db_password_${SECRET_DB_PASSWORD_VERSION} networks: proxy: external: true backend: volumes: uploads: postgres: model-cache: