services: faceai: image: node:20-alpine container_name: regalami-faceai restart: unless-stopped working_dir: /app command: - node - docker/run-with-log-file.mjs - /data/logs/backend.log - npm - run - start - --workspace - "@regalami/faceai-backend" environment: PORT: 3001 FACEAI_FRONTEND_URL: http://localhost:3001 FACEAI_PUBLIC_BASE_URL: http://localhost:3001 FACEAI_LEGACY_RETURN_URL: http://localhost:8080/faceai_return.php FACEAI_LEGACY_HOME_URL: http://localhost:8080/index.jsp FACEAI_PKL_ROOT: /data/pkl FACEAI_ENABLE_LOCAL_LEGACY_STATIC: 1 FACEAI_LOCAL_LEGACY_STATIC_ROOT: /legacy-www FACEAI_SHARED_SECRET: disagio-spaghetti-science-lol-boh FACEAI_SESSION_COOKIE: rus_faceai_session FACEAI_REDIS_URL: redis://redis:6379 FACEAI_RUNTIME_ROOT: /data/runtime FACEAI_UPLOAD_ROOT: /data/runtime/uploads FACEAI_LOG_ROOT: /data/logs FACEAI_PROCESSOR_HEARTBEAT_GRACE_MS: 20000 volumes: - .:/app - ./logs:/data/logs - ../www:/legacy-www:ro - ../test_pkl:/data/pkl:ro - faceai-runtime:/data/runtime ports: - "3001:3001" healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3001/health').then(async (response) => { const payload = await response.json().catch(() => ({})); if (!response.ok || payload.ok !== true) { console.error(JSON.stringify(payload)); process.exit(1); } }).catch((error) => { console.error(error.stack || error.message); process.exit(1); })"] interval: 10s timeout: 5s retries: 6 start_period: 20s depends_on: redis: condition: service_healthy processor: build: context: .. dockerfile: faceai/docker/processor.Dockerfile image: regalami-faceai-processor-local container_name: regalami-faceai-processor restart: unless-stopped working_dir: /app command: - node - docker/run-with-log-file.mjs - /data/logs/processor.log - npm - run - start - --workspace - "@regalami/faceai-processor" environment: FACEAI_REDIS_URL: redis://redis:6379 FACEAI_QUEUE_NAME: faceai-searches FACEAI_RUNTIME_ROOT: /data/runtime FACEAI_LOG_ROOT: /data/logs FACEAI_PKL_ROOT: /data/pkl FACEAI_WORKER_CONCURRENCY: 2 FACEAI_MATCHER_BINARY: /app/bin/face_matcher FACEAI_PROCESSOR_HEARTBEAT_INTERVAL_MS: 5000 FACEAI_PROCESSOR_HEARTBEAT_TTL_SECONDS: 20 volumes: - ./logs:/data/logs - ../test_pkl:/data/pkl:ro - faceai-runtime:/data/runtime depends_on: redis: condition: service_healthy redis: image: redis:7-alpine container_name: regalami-faceai-redis restart: unless-stopped command: redis-server --appendonly no healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 12 legacy-php: image: php:8.3-apache container_name: regalami-legacy-php restart: unless-stopped environment: FACEAI_FEATURE_ENABLED: 1 FACEAI_BACKEND_INTERNAL_URL: http://faceai:3001 FACEAI_FRONTEND_URL: http://localhost:3001 FACEAI_SHARED_SECRET: disagio-spaghetti-science-lol-boh FACEAI_ALLOW_DEV_HANDOFF: 1 FACEAI_IDENTITY_COOKIE: rus_faceai_identity volumes: - ../www:/var/www/html ports: - "8080:80" depends_on: faceai: condition: service_healthy volumes: faceai-runtime: