Files
swarm/compose/swarm/docker-compose.firecrawl.yml
2025-11-22 23:53:09 +00:00

139 lines
4.4 KiB
YAML
Executable File

version: "3.8"
name: firecrawl
x-common-env: &common-env
REDIS_URL: ${REDIS_URL:-redis://redis:6379}
REDIS_RATE_LIMIT_URL: ${REDIS_URL:-redis://redis:6379}
PLAYWRIGHT_MICROSERVICE_URL: ${PLAYWRIGHT_MICROSERVICE_URL:-http://playwright-service:3000/scrape}
NUQ_DATABASE_URL: postgres://postgres:postgres@nuq-postgres:5432/postgres
USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION}
OPENAI_API_KEY: sk-uH-OGDpTXD17I16bgbf6sw
OPENAI_BASE_URL: http://llm.lab
MODEL_NAME: fireworks/deepseek-v3p1-terminus
MODEL_EMBEDDING_NAME: text-embedding-3-small
OLLAMA_BASE_URL: ${OLLAMA_BASE_URL}
SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL}
BULL_AUTH_KEY: ${BULL_AUTH_KEY}
TEST_API_KEY: dummy-key
POSTHOG_API_KEY: ${POSTHOG_API_KEY}
POSTHOG_HOST: ${POSTHOG_HOST}
SUPABASE_ANON_TOKEN: ${SUPABASE_ANON_TOKEN}
SUPABASE_URL: ${SUPABASE_URL}
SUPABASE_SERVICE_TOKEN: ${SUPABASE_SERVICE_TOKEN}
SELF_HOSTED_WEBHOOK_URL: https://discord.com/api/webhooks/1351656041833828482/Xx8JcCSIGSGj8TNYFGZFg8XTX8GditI1V7xY_44QfjtgLOWpnD9Cr-3uAOvz1Ac55Z-6
SERPER_API_KEY: ${SERPER_API_KEY}
SEARCHAPI_API_KEY: ${SEARCHAPI_API_KEY}
LOGGING_LEVEL: ${LOGGING_LEVEL}
PROXY_SERVER: pr.oxylabs.io:7777
PROXY_USERNAME: vasceannie_Rn3sD
PROXY_PASSWORD: Squirtle123
SEARXNG_ENDPOINT: http://search.lab
SEARXNG_ENGINES: ${SEARXNG_ENGINES}
SEARXNG_CATEGORIES: ${SEARXNG_CATEGORIES}
services:
playwright-service:
image: ghcr.io/firecrawl/playwright-service:latest
environment:
PORT: 3000
PROXY_SERVER: ${PROXY_SERVER}
PROXY_USERNAME: ${PROXY_USERNAME}
PROXY_PASSWORD: ${PROXY_PASSWORD}
BLOCK_MEDIA: ${BLOCK_MEDIA}
networks:
- backend
deploy:
replicas: 1
restart_policy:
condition: any
delay: 5s
max_attempts: 3
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "2"
memory: 2G
reservations:
cpus: "1"
memory: 1G
api:
image: ghcr.io/firecrawl/firecrawl
environment:
<<: *common-env
HOST: "0.0.0.0"
PORT: ${INTERNAL_PORT:-3002}
WORKER_PORT: ${WORKER_PORT:-3005}
ENV: local
depends_on:
- redis
- playwright-service
networks:
- backend
command: node dist/src/harness.js --start-docker
deploy:
replicas: 1
restart_policy:
condition: any
delay: 5s
max_attempts: 3
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: "4"
memory: 4G
reservations:
cpus: "2"
memory: 2G
labels:
- "traefik.enable=true"
- "traefik.swarm.network=public"
- "traefik.swarm.network=public"
- "traefik.http.routers.firecrawl-api.rule=Host(`firecrawl.sidepiece.rip`)"
- "traefik.http.routers.firecrawl-api.entrypoints=websecure"
- "traefik.http.routers.firecrawl-api.tls.certresolver=letsencrypt"
- "traefik.http.services.firecrawl-api.loadbalancer.server.port=3002"
redis:
image: redis:alpine
networks:
- backend
command: redis-server --bind 0.0.0.0
deploy:
replicas: 1
restart_policy:
condition: any
delay: 5s
max_attempts: 3
placement:
constraints:
- node.role == manager
nuq-postgres:
image: vasceannie/postgres-nuq:latest
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
networks:
- backend
deploy:
replicas: 1
restart_policy:
condition: any
delay: 5s
max_attempts: 3
placement:
constraints:
- node.role == manager
networks:
backend:
driver: overlay
attachable: true