name: firecrawl

x-common-service: &common-service
  build: apps/api
  networks:
    - backend
  environment:
    - 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}
    - USE_DB_AUTHENTICATION=${USE_DB_AUTHENTICATION}
    - PORT=${PORT:-3002}
    - NUM_WORKERS_PER_QUEUE=${NUM_WORKERS_PER_QUEUE}
    - OPENAI_API_KEY=${OPENAI_API_KEY}
    - OPENAI_BASE_URL=${OPENAI_BASE_URL}
    - MODEL_NAME=${MODEL_NAME:-gpt-4o}
    - SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}
    - SERPER_API_KEY=${SERPER_API_KEY}
    - LLAMAPARSE_API_KEY=${LLAMAPARSE_API_KEY}
    - LOGTAIL_KEY=${LOGTAIL_KEY}
    - BULL_AUTH_KEY=${BULL_AUTH_KEY}
    - TEST_API_KEY=${TEST_API_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}
    - SCRAPING_BEE_API_KEY=${SCRAPING_BEE_API_KEY}
    - HOST=${HOST:-0.0.0.0}
    - SELF_HOSTED_WEBHOOK_URL=${SELF_HOSTED_WEBHOOK_URL}
    - LOGGING_LEVEL=${LOGGING_LEVEL}
  extra_hosts:
    - "host.docker.internal:host-gateway"

services:
  playwright-service:
    build: apps/playwright-service
    environment:
      - PORT=3000
      - PROXY_SERVER=${PROXY_SERVER}
      - PROXY_USERNAME=${PROXY_USERNAME}
      - PROXY_PASSWORD=${PROXY_PASSWORD}
      - BLOCK_MEDIA=${BLOCK_MEDIA}
    networks:
      - backend

  api:
    <<: *common-service
    depends_on:
      - redis
      - playwright-service
    ports:
      - "3002:3002"
    command: [ "pnpm", "run", "start:production" ]

  worker:
    <<: *common-service
    depends_on:
      - redis
      - playwright-service
      - api
    command: [ "pnpm", "run", "workers" ]

  redis:
    image: redis:alpine
    networks:
      - backend
    command: redis-server --bind 0.0.0.0

networks:
  backend:
    driver: bridge
