Files
2026-08-29 22:37:28 +08:00

287 lines
6.3 KiB
YAML

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