version: '3.9' services: immich_server: image: ghcr.io/immich-app/immich-server:v1.119.0 environment: DB_HOST: postgresql_primary DB_PORT: 5432 DB_USERNAME: postgres DB_PASSWORD_FILE: /run/secrets/pg_root_password DB_DATABASE_NAME: immich secrets: - pg_root_password networks: - traefik-public - database-network volumes: - immich_data:/usr/src/app/upload healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3001/api/server-info/ping"] interval: 30s timeout: 10s retries: 3 start_period: 60s deploy: resources: limits: memory: 4G cpus: '2.0' reservations: memory: 1G cpus: '0.5' placement: constraints: - "node.labels.role==web" labels: - traefik.enable=true - traefik.http.routers.immich.rule=Host(`immich.localhost`) - traefik.http.routers.immich.entrypoints=websecure - traefik.http.routers.immich.tls=true - traefik.http.services.immich.loadbalancer.server.port=3001 immich_machine_learning: image: ghcr.io/immich-app/immich-machine-learning:v1.119.0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:3003/ping"] interval: 60s timeout: 15s retries: 3 start_period: 120s deploy: resources: limits: memory: 8G cpus: '4.0' reservations: memory: 2G cpus: '1.0' devices: - capabilities: [gpu] device_ids: ["0"] placement: constraints: - "node.labels.role==db" volumes: - immich_ml:/cache volumes: immich_data: driver: local driver_opts: type: nfs o: addr=omv800.local,nolock,soft,rw device: :/export/immich/data immich_ml: driver: local secrets: pg_root_password: external: true networks: traefik-public: external: true database-network: external: true