本地容器化安装 Firecrawl

【本文是 AI 生成,并由 AI 自动发布。本次是实验,后面会总结如何实现。】

Firecrawl 简介

Firecrawl 是一个强大的网络爬虫和数据提取工具,能够将任意网站转换为结构化数据。对于需要频繁抓取网页数据的开发者来说,本地部署 Firecrawl 可以更好地控制数据隐私和成本。本文将详细介绍如何使用 Docker 在本地快速部署 Firecrawl。

Firecrawl 提供了简单易用的 API,支持:

  • 自动爬取整个网站
  • 提取结构化数据(Markdown、HTML、截图等)
  • 处理 JavaScript 渲染的页面
  • 批量抓取和过滤

使用 Docker 部署可以避免环境依赖问题,一键启动,非常适合开发和测试环境。

前置条件

在开始之前,请确保你的系统已安装:

  • Docker(20.10+)
  • Docker Compose(V2 推荐)

检查安装:

docker --version
docker compose version

Docker Compose 部署

创建项目目录

mkdir firecrawl && cd firecrawl

创建 docker-compose.yml

services:
  firecrawl:
    image: mendableai/firecrawl:latest
    container_name: firecrawl
    ports:
      - "3000:3000"
    environment:
      - PORT=3000
      - API_KEY=your-secret-key-here  # 可选:设置API密钥
      - LOG_LEVEL=info
    volumes:
      - ./data:/app/data  # 持久化数据
    restart: unless-stopped

配置说明

  • ports: 将容器 3000 端口映射到宿主机
  • API_KEY: 可选,用于保护 API(不设置则无需认证)
  • volumes: 持久化存储抓取的数据

启动服务

docker compose up -d

查看运行状态:

docker compose ps
docker compose logs -f

验证安装

访问以下地址确认服务正常运行:

如果看到 JSON 响应 "status":"ok",说明部署成功。

基本使用

简单爬取

# 爬取单个URL,返回Markdown
curl -X POST http://localhost:3000/v1/crawl \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "formats": ["markdown"]
  }'

批量爬取

curl -X POST http://localhost:3000/v1/crawl \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "limit": 10,
    "formats": ["markdown", "html", "screenshot"]
  }'

提取结构化数据

curl -X POST http://localhost:3000/v1/crawl \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "prompt": "提取页面中的所有产品名称和价格",
    "schema": {
      "type": "object",
      "properties": {
        "products": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {"type": "string"},
              "price": {"type": "string"}
            }
          }
        }
      }
    }
  }'

Python 调用示例

import requests

response = requests.post(
    "http://localhost:3000/v1/crawl",
    json={
        "url": "https://example.com",
        "formats": ["markdown"]
    }
)

print(response.json())

常见问题

端口冲突

如果 3000 端口被占用,修改 docker-compose.yml 中的端口映射:

ports:
  - "8080:3000"  # 使用 8080

容器启动失败

检查日志:

docker compose logs firecrawl

常见原因:

  • Docker 内存不足(建议至少 2GB)
  • 网络问题导致镜像拉取失败

爬取速度慢

调整并发限制(在请求中添加 maxConcurrent 参数):

{
  "url": "https://example.com",
  "maxConcurrent": 5
}

数据持久化

确保 volumes 配置正确,数据会保存在 ./data 目录:

ls -la data/

进阶配置

自定义网络

networks:
  firecrawl-net:
    driver: bridge

services:
  firecrawl:
    networks:
      - firecrawl-net

设置资源限制

services:
  firecrawl:
    deploy:
      resources:
        limits:
          memory: 2G
          cpus: '2.0'

HTTPS 反向代理

使用 Nginx 或 Traefik 提供 HTTPS 访问:

location / {
    proxy_pass http://localhost:3000;
    proxy_set_header Host $host;
}

安全建议

  1. 启用 API_KEY:生产环境务必设置 API_KEY 环境变量
  2. 限制访问 IP:通过防火墙或反向代理限制访问来源
  3. 定期更新镜像
    docker compose pull
    docker compose up -d
  4. 监控日志:定期检查日志文件,发现异常请求

卸载与清理

停止并移除容器:

docker compose down

删除数据(谨慎操作):

rm -rf data/

总结

通过 Docker 部署 Firecrawl 只需几个步骤,即可快速搭建一个功能完整的网页爬虫服务。无论是个人项目还是企业应用,这种容器化方案都能提供良好的隔离性和可移植性。

关键要点:

  • ✅ 使用 docker-compose.yml 简化部署
  • ✅ 通过 volumes 持久化数据
  • ✅ REST API 支持多种输出格式
  • ✅ 可扩展性强,适合二次开发

现在就试试在你的本地环境启动 Firecrawl 吧!


参考资源

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注