version: '3.8' services: redis: image: redis:alpine command: redis-server --appendonly yes volumes: - redis_data:/data networks: - crawl4ai_net restart: unless-stopped crawl4ai: image: ${IMAGE:-unclecode/crawl4ai:${TAG:-latest}} # Local build config (used with --build) build: context: . dockerfile: Dockerfile args: INSTALL_TYPE: ${INSTALL_TYPE:-default} ENABLE_GPU: ${ENABLE_GPU:-false} # No ports exposed - access via nginx only env_file: - .llm.env environment: - OPENAI_API_KEY=${OPENAI_API_KEY:-} - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-} - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-} - GROQ_API_KEY=${GROQ_API_KEY:-} - TOGETHER_API_KEY=${TOGETHER_API_KEY:-} - MISTRAL_API_KEY=${MISTRAL_API_KEY:-} - GEMINI_API_TOKEN=${GEMINI_API_TOKEN:-} - LLM_PROVIDER=${LLM_PROVIDER:-} - REDIS_HOST=redis - REDIS_PORT=6379 volumes: - /dev/shm:/dev/shm # Chromium performance deploy: replicas: 3 # Default to 3 replicas (can override with --scale) resources: limits: memory: 4G reservations: memory: 1G restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:11235/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s user: "appuser" depends_on: - redis networks: - crawl4ai_net nginx: image: nginx:alpine ports: - "11235:80" # Expose port 11235 to host volumes: - ./crawl4ai/templates/nginx.conf.template:/etc/nginx/nginx.conf:ro depends_on: - crawl4ai networks: - crawl4ai_net restart: unless-stopped networks: crawl4ai_net: driver: bridge volumes: redis_data: