# Web Module - Docker Compose Configuration # # Port Allocation (Dev API Gateway: 51100): # 51100 - Web API (fact-checking service) # # Naming Convention: didiAI-{module}-{service} # # Profiles: # api - Web API server networks: didi-network: external: true # single shared network for all DIDI + AI platform stacks services: # ========================================================================== # Web API Server # ========================================================================== web-api: container_name: didiAI-web-api image: didiai-web-api build: context: .. dockerfile: deploy/Dockerfile ports: - "51100:51100" shm_size: '2gb' networks: - didi-network env_file: - .env environment: # Container-internal overrides (always set regardless of .env) - WEB_HOST=0.0.0.0 - WEB_PORT=51100 # Tier-3 search fallback (cloak stealth-browser scraping service). # Default OFF; flip to true once cloak service is verified healthy. - WEB_CLOAK_ENABLED=${WEB_CLOAK_ENABLED:-false} - WEB_CLOAK_URL=${WEB_CLOAK_URL:-http://didiAI-cloak:8770} - WEB_CLOAK_FALLBACK_THRESHOLD=${WEB_CLOAK_FALLBACK_THRESHOLD:-5} - WEB_CLOAK_TIMEOUT_SEC=${WEB_CLOAK_TIMEOUT_SEC:-20} # OTel — traces to Jaeger via OTel Collector - OTEL_EXPORTER_OTLP_ENDPOINT=${OTEL_EXPORTER_OTLP_ENDPOINT:-http://didi-otel-collector:4317} - OTEL_SERVICE_NAME=didiAI-web-api healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:51100/health')"] interval: 30s timeout: 10s retries: 3 start_period: 30s restart: unless-stopped profiles: - api