services: searxng: image: searxng/searxng:latest container_name: orio-search-searxng ports: - "${SEARXNG_PORT:-8080}:8080" volumes: - ./searxng/settings.yml:/etc/searxng/settings.yml:ro restart: unless-stopped healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/healthz"] interval: 30s timeout: 5s retries: 3 redis: image: redis:7-alpine container_name: orio-search-redis ports: - "6379:6379" restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 5 deploy: resources: limits: memory: 256M browserless: image: browserless/chrome:latest container_name: orio-search-browserless profiles: ["js"] ports: - "${BROWSERLESS_PORT:-3000}:3000" environment: - MAX_CONCURRENT_SESSIONS=5 - CONNECTION_TIMEOUT=15000 - DEFAULT_LAUNCH_ARGS=["--no-sandbox","--disable-gpu"] restart: unless-stopped healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/"] interval: 30s timeout: 5s retries: 3 deploy: resources: limits: memory: 1G api: build: . container_name: orio-search-api ports: - "${API_PORT:-8000}:8000" volumes: - ./config.yaml:/app/config.yaml:ro depends_on: searxng: condition: service_healthy redis: condition: service_healthy environment: - ORIO_SEARCH_CONFIG=/app/config.yaml restart: unless-stopped deploy: resources: limits: memory: 1G mcp: build: context: . dockerfile: Dockerfile.mcp container_name: orio-search-mcp ports: - "${MCP_PORT:-8002}:8002" environment: - ORIO_SEARCH_URL=http://api:8000 - ORIO_SEARCH_API_KEY=${ORIO_SEARCH_API_KEY:-} - MCP_SERVER_PORT=8002 depends_on: api: condition: service_started restart: unless-stopped deploy: resources: limits: memory: 256M