name: firecrawl x-firecrawl-env: &firecrawl-env # ========================================================= # Redis # ========================================================= REDIS_URL: redis://redis:6379 REDIS_RATE_LIMIT_URL: redis://redis:6379 # ========================================================= # Playwright # ========================================================= PLAYWRIGHT_MICROSERVICE_URL: http://playwright-service:3000/scrape # ========================================================= # PostgreSQL / NuQ # ========================================================= POSTGRES_USER: postgres POSTGRES_PASSWORD: firecrawl POSTGRES_DB: postgres POSTGRES_HOST: nuq-postgres POSTGRES_PORT: 5432 USE_DB_AUTHENTICATION: "false" # ========================================================= # RabbitMQ # ========================================================= NUQ_RABBITMQ_URL: amqp://rabbitmq:5672 # ========================================================= # Search # # Firecrawl -> SearXNG # 使用 Docker 内部 service name,不走 NAS 端口 # ========================================================= SEARXNG_ENDPOINT: http://searxng:8080 # ========================================================= # Performance # N6005 + 32GB RAM,个人 Agent 使用 # ========================================================= NUM_WORKERS_PER_QUEUE: 2 CRAWL_CONCURRENT_REQUESTS: 3 MAX_CONCURRENT_JOBS: 2 BROWSER_POOL_SIZE: 2 ENV: local LOGGING_LEVEL: info services: # ========================================================= # Firecrawl # ========================================================= api: image: ghcr.io/firecrawl/firecrawl:latest container_name: firecrawl restart: unless-stopped environment: <<: *firecrawl-env HOST: "0.0.0.0" PORT: 3002 EXTRACT_WORKER_PORT: 3004 WORKER_PORT: 3005 ports: # NAS :2800 -> Firecrawl :3002 - "2800:3002" depends_on: redis: condition: service_started rabbitmq: condition: service_healthy nuq-postgres: condition: service_started playwright-service: condition: service_started searxng: condition: service_started command: node dist/src/harness.js --start-docker networks: - firecrawl ulimits: nofile: soft: 65535 hard: 65535 logging: driver: json-file options: max-size: "10m" max-file: "3" # ========================================================= # Playwright # ========================================================= playwright-service: image: ghcr.io/firecrawl/playwright-service:latest container_name: firecrawl-playwright restart: unless-stopped environment: PORT: 3000 MAX_CONCURRENT_PAGES: 2 BLOCK_MEDIA: "true" networks: - firecrawl tmpfs: - /tmp/.cache:size=1g logging: driver: json-file options: max-size: "10m" max-file: "3" # ========================================================= # Redis # ========================================================= redis: image: redis:7-alpine container_name: firecrawl-redis restart: unless-stopped command: - redis-server - --appendonly - "yes" volumes: - /volume2/docker/docker_projects/firecrawl/redis:/data networks: - firecrawl logging: driver: json-file options: max-size: "10m" max-file: "3" # ========================================================= # RabbitMQ # ========================================================= rabbitmq: image: rabbitmq:3-alpine container_name: firecrawl-rabbitmq restart: unless-stopped volumes: - /volume2/docker/docker_projects/firecrawl/rabbitmq:/var/lib/rabbitmq healthcheck: test: - CMD - rabbitmq-diagnostics - -q - check_running interval: 10s timeout: 5s retries: 10 start_period: 20s networks: - firecrawl logging: driver: json-file options: max-size: "10m" max-file: "3" # ========================================================= # NuQ PostgreSQL # ========================================================= nuq-postgres: image: ghcr.io/firecrawl/nuq-postgres:latest container_name: firecrawl-postgres restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: firecrawl POSTGRES_DB: postgres volumes: - /volume2/docker/docker_projects/firecrawl/postgres:/var/lib/postgresql/data networks: - firecrawl logging: driver: json-file options: max-size: "10m" max-file: "3" # ========================================================= # SearXNG # # 不对 NAS / LAN 暴露端口 # 仅 Firecrawl 内部访问 # ========================================================= searxng: image: searxng/searxng:latest container_name: firecrawl-searxng restart: unless-stopped expose: - "8080" environment: SEARXNG_BASE_URL: http://searxng:8080/ SEARXNG_VALKEY_URL: valkey://searxng-valkey:6379/0 volumes: - /volume2/docker/docker_projects/firecrawl/searxng/config:/etc/searxng - /volume2/docker/docker_projects/firecrawl/searxng/cache:/var/cache/searxng depends_on: - searxng-valkey networks: - firecrawl logging: driver: json-file options: max-size: "10m" max-file: "3" # ========================================================= # SearXNG Valkey # ========================================================= searxng-valkey: image: valkey/valkey:9-alpine container_name: firecrawl-searxng-valkey restart: unless-stopped command: - valkey-server - --save - "30" - "1" - --loglevel - warning volumes: - /volume2/docker/docker_projects/firecrawl/searxng/valkey:/data networks: - firecrawl logging: driver: json-file options: max-size: "10m" max-file: "3" # =========================================================== # Network # =========================================================== networks: firecrawl: driver: bridge