# photos stack — Immich self-hosted photo backup. # Upload storage on ZFS (/storage1/labdata/immich/upload). # Config/DB on SSD (/config/immich/). # Internal-only: photos.ginnoir.com requires LAN or tailnet. services: immich-server: container_name: immich-server image: ghcr.io/immich-app/immich-server:release restart: unless-stopped networks: [photos, edge] env_file: - stack.env volumes: - /storage1/labdata/immich/upload:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro ports: - "2283:2283" logging: driver: json-file options: max-size: "10m" max-file: "3" depends_on: - immich-redis - immich-postgres immich-machine-learning: container_name: immich-machine-learning image: ghcr.io/immich-app/immich-machine-learning:release restart: unless-stopped networks: [photos] env_file: - stack.env volumes: - /config/immich/model-cache:/cache immich-redis: container_name: immich-redis image: docker.io/redis:6.2-alpine restart: unless-stopped networks: [photos] labels: com.centurylabs.watchtower.enable: "false" immich-postgres: container_name: immich-postgres image: ghcr.io/immich-app/postgres:14-vectorchord0.3.0-pgvectors0.3.0 restart: unless-stopped networks: [photos] env_file: - stack.env environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} POSTGRES_INITDB_ARGS: '--data-checksums' volumes: - /config/immich/pgdata:/var/lib/postgresql/data labels: com.centurylabs.watchtower.enable: "false" networks: photos: name: photos driver: bridge edge: name: edge external: true