Skip to main content
重要声明: Firecrawl 采用 AGPL 协议,默认不允许商业化使用。LangChat Pro 仅提供接入支持,用户需自行处理版权和许可证问题,LangChat 团队不承担任何相关责任。在使用前请仔细阅读相关许可证条款。
Firecrawl 简介: Firecrawl 是一个强大的网页爬虫服务,支持 JavaScript 渲染、内容提取和结构化数据抓取,为 LangChat Pro 提供网页内容获取功能。

快速部署

使用 Docker Compose 部署

LangChat Pro 项目根目录提供了完整的 Firecrawl 部署配置,位于 docs/docker/firecrawl/ 目录下。
1

进入部署目录

cd docs/docker/firecrawl/
2

配置环境变量

创建或修改 .env 文件:
# 基础配置
PORT=3002
INTERNAL_PORT=3002
REDIS_URL=redis://redis:6379

# AI模型配置
OPENAI_API_KEY=your_openai_api_key
OPENAI_BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-3.5-turbo
MODEL_EMBEDDING_NAME=text-embedding-ada-002

# 可选:Ollama本地模型
OLLAMA_BASE_URL=http://localhost:11434

# 搜索引擎配置
SEARXNG_ENDPOINT=http://localhost:8081
SEARXNG_ENGINES=google,bing,duckduckgo
SEARXNG_CATEGORIES=general

# 代理配置(可选)
PROXY_SERVER=
PROXY_USERNAME=
PROXY_PASSWORD=

# 日志级别
LOGGING_LEVEL=info
3

启动服务

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f api
4

验证部署

# 检查API服务是否正常运行
curl http://localhost:3002/health

# 检查Playwright服务
curl http://localhost:3000/scrape

服务架构

组件说明

Firecrawl 由以下核心组件组成:
主要功能: 提供 RESTful API 接口,处理爬虫请求和响应配置:
  • 端口:3002(外部)
  • 依赖:Redis、Playwright Service
  • 环境:生产模式
特点:
  • 支持并发请求处理
  • 提供健康检查接口
  • 集成 AI 模型处理
主要功能: 后台任务处理,执行异步爬虫任务配置:
  • 无外部端口暴露
  • 依赖:Redis、Playwright Service、API
  • 环境:本地模式
特点:
  • 处理长时间运行的爬虫任务
  • 支持任务队列管理
  • 提供任务状态监控
主要功能: 网页渲染和内容提取配置:
  • 端口:3000(内部)
  • 环境:TypeScript 版本
  • 支持:JavaScript 渲染
特点:
  • 基于 Playwright 引擎
  • 支持现代网页渲染
  • 可配置代理和媒体屏蔽
主要功能: 缓存和任务队列管理配置:
  • 端口:6379(内部)
  • 镜像:redis:alpine
  • 网络:backend
特点:
  • 存储爬虫结果缓存
  • 管理任务队列
  • 提供速率限制支持

配置详解

Docker Compose 配置

项目提供的 docker-compose.yml 文件包含了完整的 Firecrawl 部署配置:
name: firecrawl

x-common-service: &common-service
  build: apps/api
  ulimits:
    nofile:
      soft: 65535
      hard: 65535
  networks:
    - backend
  extra_hosts:
    - "host.docker.internal:host-gateway"

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

  api:
    <<: *common-service
    environment:
      HOST: "0.0.0.0"
      PORT: ${INTERNAL_PORT:-3002}
      FLY_PROCESS_GROUP: app
      ENV: local
    depends_on:
      - redis
      - playwright-service
    ports:
      - "${PORT:-3002}:${INTERNAL_PORT:-3002}"
    command: [ "pnpm", "run", "start:production" ]

  worker:
    <<: *common-service
    environment:
      FLY_PROCESS_GROUP: worker
      ENV: local
    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

环境变量配置

变量名说明默认值必需
PORT外部访问端口3002
INTERNAL_PORT内部服务端口3002
REDIS_URLRedis 连接地址redis://redis:6379
LOGGING_LEVEL日志级别info
变量名说明默认值必需
OPENAI_API_KEYOpenAI API 密钥-
OPENAI_BASE_URLOpenAI API 地址https://api.openai.com/v1
MODEL_NAME使用的模型名称gpt-3.5-turbo
MODEL_EMBEDDING_NAME嵌入模型名称text-embedding-ada-002
OLLAMA_BASE_URLOllama 服务地址-
变量名说明默认值必需
SEARXNG_ENDPOINTSearXNG 服务地址-
SEARXNG_ENGINES搜索引擎列表google,bing,duckduckgo
SEARXNG_CATEGORIES搜索分类general
变量名说明默认值必需
PROXY_SERVER代理服务器地址-
PROXY_USERNAME代理用户名-
PROXY_PASSWORD代理密码-
BLOCK_MEDIA是否屏蔽媒体-

LangChat Pro 集成

配置 Firecrawl 服务

在 LangChat Pro 的配置文件中添加 Firecrawl 服务配置:
langchat:
  firecrawl:
    enabled: true
    url: http://127.0.0.1:3002
    timeout: 30
    max_retries: 3
    api_key: your_firecrawl_api_key
参数说明默认值
enabled是否启用 Firecrawl 服务true
urlFirecrawl API 服务地址http://127.0.0.1:3002
timeout请求超时时间(秒)30
max_retries最大重试次数3
api_keyAPI 访问密钥-
Firecrawl 在 LangChat Pro 中的应用:
  • 网页内容抓取:获取网页的完整内容和结构化数据
  • 实时信息更新:抓取最新的网页内容进行信息更新
  • 内容分析:结合 AI 模型对网页内容进行分析和总结
  • 知识库构建:自动抓取网页内容构建知识库
  • 数据收集:收集特定网站的数据用于训练和分析

API 使用

基础爬虫接口

# 基础网页抓取
curl -X POST http://localhost:3002/scrape \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "pageOptions": {
      "waitFor": 2000,
      "screenshot": false
    }
  }'
响应示例:
{
  "success": true,
  "data": {
    "markdown": "# 页面标题\n\n页面内容...",
    "html": "<html>...</html>",
    "screenshot": null,
    "metadata": {
      "title": "页面标题",
      "description": "页面描述"
    }
  }
}
# 批量网页抓取
curl -X POST http://localhost:3002/scrape/bulk \
  -H "Content-Type: application/json" \
  -d '{
    "urls": [
      "https://example1.com",
      "https://example2.com"
    ],
    "pageOptions": {
      "waitFor": 2000
    }
  }'
# 提取结构化数据
curl -X POST http://localhost:3002/scrape \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "pageOptions": {
      "waitFor": 2000
    },
    "extractors": {
      "title": "h1",
      "content": ".main-content",
      "links": "a[href]"
    }
  }'

服务管理

常用命令

# 启动所有服务
docker-compose up -d

# 仅启动特定服务
docker-compose up -d api worker

# 启动并查看日志
docker-compose up api
# 停止所有服务
docker-compose down

# 停止并删除数据卷
docker-compose down -v

# 停止特定服务
docker-compose stop api
# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs api

# 实时查看日志
docker-compose logs -f worker

# 查看资源使用
docker stats firecrawl-api-1
# 重新构建镜像
docker-compose build

# 重新创建容器
docker-compose up -d --force-recreate

# 完整更新流程
docker-compose down
docker-compose build --no-cache
docker-compose up -d

故障排查

常见问题

# 检查端口占用
netstat -tlnp | grep 3002

# 检查 Docker 服务状态
docker ps -a | grep firecrawl

# 查看详细错误日志
docker-compose logs api
常见原因:
  • 端口 3002 被占用
  • 环境变量配置错误
  • 源码构建失败
  • 网络连接问题
# 检查 Playwright 服务
curl http://localhost:3000/scrape

# 检查 Redis 连接
docker exec firecrawl-redis-1 redis-cli ping

# 查看爬虫日志
docker-compose logs playwright-service
排查步骤:
  1. 确认所有服务正在运行
  2. 检查网络连接
  3. 验证环境变量配置
  4. 查看详细错误日志
# 检查资源使用
docker stats

# 检查 Redis 内存使用
docker exec firecrawl-redis-1 redis-cli info memory

# 查看任务队列状态
docker-compose logs worker
优化建议:
  • 增加 Redis 内存限制
  • 调整并发连接数
  • 优化爬虫策略
  • 使用代理服务

性能优化

资源配置

services:
  api:
    deploy:
      resources:
        limits:
          memory: 2G
        reservations:
          memory: 1G

  worker:
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M

  playwright-service:
    deploy:
      resources:
        limits:
          memory: 1G
        reservations:
          memory: 512M
services:
  api:
    environment:
      - MAX_CONCURRENT_REQUESTS=10
      - REQUEST_TIMEOUT=30000

  worker:
    environment:
      - WORKER_CONCURRENCY=5
      - TASK_TIMEOUT=60000
services:
  redis:
    command: redis-server --bind 0.0.0.0 --maxmemory 1gb --maxmemory-policy allkeys-lru
    volumes:
      - redis-data:/data

安全配置

访问控制

# 在 .env 文件中设置
API_KEY=your_secure_api_key
AUTH_ENABLED=true
在 API 请求中使用:
curl -X POST http://localhost:3002/scrape \
  -H "Authorization: Bearer your_secure_api_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'
services:
  api:
    networks:
      - backend
    ports:
      - "127.0.0.1:3002:3002"  # 仅允许本地访问
# 在 .env 文件中配置代理
PROXY_SERVER=socks5://proxy.example.com:1080
PROXY_USERNAME=username
PROXY_PASSWORD=password

监控和维护

健康检查

services:
  api:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3002/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

  worker:
    healthcheck:
      test: ["CMD", "pgrep", "-f", "workers"]
      interval: 30s
      timeout: 10s
      retries: 3

日志管理

services:
  api:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  worker:
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

备份策略

#!/bin/bash
# backup-firecrawl.sh

BACKUP_DIR="/opt/backups/firecrawl"
DATE=$(date +%Y%m%d_%H%M%S)

# 备份 Redis 数据
docker exec firecrawl-redis-1 redis-cli BGSAVE
sleep 5
docker cp firecrawl-redis-1:/data/dump.rdb $BACKUP_DIR/redis_$DATE.rdb

# 备份配置文件
tar -czf $BACKUP_DIR/config_$DATE.tar.gz .env docker-compose.yml

# 清理旧备份(保留30天)
find $BACKUP_DIR -name "*.rdb" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

许可证说明

AGPL 许可证重要提醒:
  1. 开源要求:使用 AGPL 软件时,如果通过网络提供服务,必须开源整个应用程序
  2. 商业限制:AGPL 对商业使用有严格限制,需要仔细评估
  3. 合规责任:用户需自行确保许可证合规,LangChat 不承担相关责任
  4. 替代方案:考虑使用其他许可证的替代方案
建议:
  • 在商业环境中使用前,请咨询法律专家
  • 考虑使用 MIT 或 Apache 许可证的替代工具
  • 确保理解并遵守 AGPL 的所有条款