services: faceai: image: ${FACEAI_CLIENT_DEV_IMAGE:-node:20-alpine} working_dir: /app command: - node - docker/run-with-log-file.mjs - ${FACEAI_BACKEND_LOG_FILE:-/data/logs/backend.log} - npm - run - start - --workspace - "@regalami/faceai-backend" environment: NODE_ENV: ${NODE_ENV:-development} PORT: ${FACEAI_PORT:-3001} FACEAI_FRONTEND_URL: ${FACEAI_FRONTEND_URL:-http://localhost:3001} FACEAI_PUBLIC_BASE_URL: ${FACEAI_PUBLIC_BASE_URL:-http://localhost:3001} FACEAI_LEGACY_RETURN_URL: ${FACEAI_LEGACY_RETURN_URL:-http://localhost:8080/faceai_return.php} FACEAI_LEGACY_RETURN_MODE: ${FACEAI_LEGACY_RETURN_MODE:-direct} FACEAI_LEGACY_HOME_URL: ${FACEAI_LEGACY_HOME_URL:-http://localhost:8080/index.jsp} FACEAI_SHARED_SECRET: ${FACEAI_SHARED_SECRET:-change-me} FACEAI_SESSION_COOKIE: ${FACEAI_SESSION_COOKIE:-rus_faceai_session} FACEAI_REDIS_URL: ${FACEAI_REDIS_URL:-redis://redis:6379} FACEAI_QUEUE_NAME: ${FACEAI_QUEUE_NAME:-faceai-searches} FACEAI_RUNTIME_ROOT: ${FACEAI_RUNTIME_ROOT:-/data/runtime} FACEAI_UPLOAD_ROOT: ${FACEAI_UPLOAD_ROOT:-/data/runtime/uploads} FACEAI_LOG_ROOT: ${FACEAI_LOG_ROOT:-/data/logs} FACEAI_PKL_ROOT: ${FACEAI_PKL_ROOT:-/data/pkl} FACEAI_ENABLE_LOCAL_LEGACY_STATIC: ${FACEAI_ENABLE_LOCAL_LEGACY_STATIC:-1} FACEAI_LOCAL_LEGACY_STATIC_ROOT: ${FACEAI_LOCAL_LEGACY_STATIC_ROOT:-/legacy-www} FACEAI_PROCESSOR_HEARTBEAT_GRACE_MS: ${FACEAI_PROCESSOR_HEARTBEAT_GRACE_MS:-20000} volumes: - .:/app - ./logs:${FACEAI_LOG_ROOT:-/data/logs} - ../www:${FACEAI_LOCAL_LEGACY_STATIC_ROOT:-/legacy-www}:ro - ../test_pkl:${FACEAI_PKL_ROOT:-/data/pkl}:ro - faceai-runtime:${FACEAI_RUNTIME_ROOT:-/data/runtime} processor: build: context: .. dockerfile: faceai/docker/processor.Dockerfile image: ${FACEAI_PROCESSOR_DEV_IMAGE:-regalami-faceai-processor-local} working_dir: /app command: - node - docker/run-with-log-file.mjs - ${FACEAI_PROCESSOR_LOG_FILE:-/data/logs/processor.log} - npm - run - start - --workspace - "@regalami/faceai-processor" environment: NODE_ENV: ${NODE_ENV:-development} FACEAI_REDIS_URL: ${FACEAI_REDIS_URL:-redis://redis:6379} FACEAI_QUEUE_NAME: ${FACEAI_QUEUE_NAME:-faceai-searches} FACEAI_RUNTIME_ROOT: ${FACEAI_RUNTIME_ROOT:-/data/runtime} FACEAI_LOG_ROOT: ${FACEAI_LOG_ROOT:-/data/logs} FACEAI_PKL_ROOT: ${FACEAI_PKL_ROOT:-/data/pkl} FACEAI_MATCHER_BINARY: ${FACEAI_MATCHER_BINARY:-/app/bin/face_matcher} FACEAI_WORKER_CONCURRENCY: ${FACEAI_WORKER_CONCURRENCY:-2} FACEAI_WORKER_TIMEOUT_MS: ${FACEAI_WORKER_TIMEOUT_MS:-300000} FACEAI_PROCESSOR_HEARTBEAT_INTERVAL_MS: ${FACEAI_PROCESSOR_HEARTBEAT_INTERVAL_MS:-5000} FACEAI_PROCESSOR_HEARTBEAT_TTL_SECONDS: ${FACEAI_PROCESSOR_HEARTBEAT_TTL_SECONDS:-20} volumes: - ./logs:${FACEAI_LOG_ROOT:-/data/logs} - ../test_pkl:${FACEAI_PKL_ROOT:-/data/pkl}:ro - faceai-runtime:${FACEAI_RUNTIME_ROOT:-/data/runtime} tomcat-www: build: context: ../local-jsp-docker dockerfile: tomcat/Dockerfile container_name: ${LOCAL_JSP_TOMCAT_CONTAINER_NAME:-regalami-local-jsp-tomcat} restart: unless-stopped environment: LOCAL_DB_HOST: mysql LOCAL_DB_PORT: 3306 LOCAL_DB_NAME: pg LOCAL_DB_USER: root LOCAL_DB_PASSWORD: root FACEAI_HANDOFF_URL: ${FACEAI_HANDOFF_URL:-http://localhost:3001/dev/legacy/launch} FACEAI_DEV_USER_ID: ${FACEAI_DEV_USER_ID:-1} FACEAI_DEV_DISPLAY_NAME: ${FACEAI_DEV_DISPLAY_NAME:-Local Model User} FACEAI_DEV_EMAIL: ${FACEAI_DEV_EMAIL:-local.model.user@example.invalid} FACEAI_DEV_MEMBERSHIP_STATUS: ${FACEAI_DEV_MEMBERSHIP_STATUS:-active} LOCAL_APP_INSTANCE: ${LOCAL_APP_INSTANCE:-main} LOCAL_DOCBASE: /data/docbase/ FACEAI_FEATURE_ENABLED: ${FACEAI_FEATURE_ENABLED:-1} volumes: - ../www:/workspace/www:ro - ../rus:/workspace/rus:ro - ../test_pkl:/workspace/test_pkl:ro - ../local-jsp-docker/runtime/docbase:/data/docbase - ../local-jsp-docker/runtime/tomcat-work:/usr/local/tomcat/work - ../local-jsp-docker/runtime/tomcat-logs:/usr/local/tomcat/logs ports: - "${LOCAL_JSP_TOMCAT_PORT:-8080}:8080" depends_on: mysql: condition: service_healthy maildump: condition: service_started mysql: image: ${LOCAL_JSP_MYSQL_IMAGE:-mysql:8.4} container_name: ${LOCAL_JSP_MYSQL_CONTAINER_NAME:-regalami-local-jsp-mysql} restart: unless-stopped command: - --max_allowed_packet=1G - --net_read_timeout=600 - --net_write_timeout=600 - --lower_case_table_names=1 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: pg MYSQL_ROOT_HOST: '%' LOCAL_DB_SEED_DUMP: ${LOCAL_DB_SEED_DUMP:-pg-local-purpose-seed-20260422.sql} LOCAL_DB_OVERLAY_DUMP: ${LOCAL_DB_OVERLAY_DUMP:-} LOCAL_DOCBASE: /data/docbase/ LOCAL_MAIL_SMTP_HOST: maildump LOCAL_MAIL_SMTP_PORT: 1025 LOCAL_SOURCE_DIR: /workspace/www/ LOCAL_TEST_USER_ID: ${LOCAL_TEST_USER_ID:-2} LOCAL_TEST_USER_LOGIN: ${LOCAL_TEST_USER_LOGIN:-test} LOCAL_TEST_USER_PASSWORD: ${LOCAL_TEST_USER_PASSWORD:-test1} LOCAL_TEST_USER_EMAIL: ${LOCAL_TEST_USER_EMAIL:-localtest@regalamiunsorriso.test} volumes: - mysql-data:/var/lib/mysql - ../db:/seed:ro - ../www:/workspace/www:ro - ../local-jsp-docker/mysql/init:/docker-entrypoint-initdb.d:ro healthcheck: test: - CMD - sh - -lc - mysql -uroot -p"$$MYSQL_ROOT_PASSWORD" -Nse "SELECT CASE WHEN EXISTS (SELECT 1 FROM pg.parm WHERE codice = 'REWRITE_URL_ENABLE' AND numero = 1) AND EXISTS (SELECT 1 FROM pg.gara LIMIT 1) THEN 1 ELSE 0 END" | grep -qx 1 interval: 10s timeout: 5s retries: 30 start_period: 60s maildump: build: context: ../local-jsp-docker dockerfile: maildump/Dockerfile container_name: ${LOCAL_JSP_MAILDUMP_CONTAINER_NAME:-regalami-local-jsp-maildump} restart: unless-stopped environment: MAILDUMP_OUTPUT_DIR: /out MAILDUMP_SMTP_PORT: 1025 volumes: - ../local-jsp-docker/runtime/maildump/out:/out ports: - "${LOCAL_JSP_MAILDUMP_PORT:-8025}:8025" volumes: faceai-runtime: mysql-data: