services: photoprism: image: photoprism/photoprism:latest container_name: photoprism logging: driver: json-file options: max-size: "200m" max-file: "2" depends_on: - photoprism-db ports: - '127.0.0.1:${PHOTOPRISM_PORT:-2342}:2342' volumes: - type: bind source: ${PHOTOPRISM_ORIGINALS_SOURCE:-/mnt/usb/photos} target: /photoprism/originals read_only: true bind: create_host_path: false - photoprism-storage:/photoprism/storage environment: PHOTOPRISM_ADMIN_USER: ${PHOTOPRISM_ADMIN_USER:-admin} PHOTOPRISM_ADMIN_PASSWORD: ${PHOTOPRISM_ADMIN_PASSWORD:-ChangeMe1234} PHOTOPRISM_SITE_URL: ${PHOTOPRISM_SITE_URL:-https://photo.sm-home.cloud/} PHOTOPRISM_ORIGINALS_PATH: /photoprism/originals PHOTOPRISM_STORAGE_PATH: /photoprism/storage PHOTOPRISM_READONLY: ${PHOTOPRISM_READONLY:-true} PHOTOPRISM_DATABASE_DRIVER: mysql PHOTOPRISM_DATABASE_SERVER: photoprism-db:3306 PHOTOPRISM_DATABASE_NAME: ${PHOTOPRISM_DATABASE_NAME:-photoprism} PHOTOPRISM_DATABASE_USER: ${PHOTOPRISM_DATABASE_USER:-photoprism} PHOTOPRISM_DATABASE_PASSWORD: ${PHOTOPRISM_DATABASE_PASSWORD:-photoprism} restart: unless-stopped networks: - default - work-backend photoprism-db: image: mariadb:11 container_name: photoprism-db logging: driver: json-file options: max-size: "200m" max-file: "2" command: --innodb-buffer-pool-size=512M --transaction-isolation=READ-COMMITTED --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci environment: MARIADB_AUTO_UPGRADE: "1" MARIADB_DATABASE: ${PHOTOPRISM_DATABASE_NAME:-photoprism} MARIADB_USER: ${PHOTOPRISM_DATABASE_USER:-photoprism} MARIADB_PASSWORD: ${PHOTOPRISM_DATABASE_PASSWORD:-photoprism} MARIADB_ROOT_PASSWORD: ${PHOTOPRISM_DATABASE_ROOT_PASSWORD:-photoprism-root} volumes: - photoprism-db:/var/lib/mysql restart: unless-stopped networks: - default - work-backend prod-app: image: node:${NODE_VERSION:-22.22.2}-bookworm container_name: ai-code-app-prod logging: driver: json-file options: max-size: "200m" max-file: "2" user: "0:0" cpus: 1.0 mem_limit: 1536m working_dir: /prod-app ports: - '127.0.0.1:5173:5173' volumes: - ${PROD_APP_SOURCE:-.}:/prod-app - ./.docker/prod-app/node_modules:/prod-app/node_modules - ./.docker/prod-app/home:/home/how2ice networks: - default - work-backend environment: HOME: /home/how2ice NPM_CONFIG_CACHE: /home/how2ice/.npm WORK_SERVER_URL: http://work-server:3100 VITE_DISABLE_APP_UPDATE: "true" command: > sh -c "npm ci --legacy-peer-deps && npm run build:test-app && npm run preview:test-app -- --host 0.0.0.0 --port 5173 --strictPort" app: image: node:${NODE_VERSION:-22.22.2}-bookworm logging: driver: json-file options: max-size: "200m" max-file: "2" user: "0:0" cpus: 1.0 mem_limit: 1536m working_dir: /app ports: - '127.0.0.1:5174:5173' volumes: - ./:/app - app-node-modules:/app/node_modules - app-home:/home/how2ice networks: - default - work-backend environment: HOME: /home/how2ice NPM_CONFIG_CACHE: /home/how2ice/.npm WORK_SERVER_URL: http://work-server:3100 command: > sh -c "npm ci --legacy-peer-deps && npm run build:test-app && npm run preview:test-app -- --host 0.0.0.0 --port 5173 --strictPort" release-app: image: node:${NODE_VERSION:-22.22.2}-bookworm container_name: ai-code-app-release logging: driver: json-file options: max-size: "200m" max-file: "2" user: "0:0" cpus: 1.0 mem_limit: 1536m working_dir: /release-app ports: - '127.0.0.1:5175:5173' volumes: - ${RELEASE_APP_SOURCE:-.}:/release-app - ./.docker/release-app/node_modules:/release-app/node_modules - ./.docker/release-app/home:/home/how2ice networks: - default - work-backend environment: HOME: /home/how2ice NPM_CONFIG_CACHE: /home/how2ice/.npm command: > sh -c "npm ci --legacy-peer-deps && npm run dev -- --host 0.0.0.0 --port 5173" networks: work-backend: name: work-backend volumes: app-node-modules: app-home: photoprism-storage: photoprism-db: