6.0 KiB
6.0 KiB
Firecrawl
此服务用于部署 Firecrawl,一个由 Playwright 和无头浏览器驱动的网页抓取和爬取 API。
服务
api: Firecrawl API 主服务器,集成了工作进程redis: 用于作业队列和缓存的 Redisplaywright-service: 用于浏览器自动化的 Playwright 服务nuq-postgres: 用于队列管理和数据存储的 PostgreSQL 数据库
环境变量
| 变量名 | 说明 | 默认值 |
|---|---|---|
| FIRECRAWL_VERSION | Firecrawl 镜像版本 | latest |
| REDIS_VERSION | Redis 镜像版本 | alpine |
| PLAYWRIGHT_VERSION | Playwright 服务版本 | latest |
| NUQ_POSTGRES_VERSION | NUQ PostgreSQL 镜像版本 | latest |
| POSTGRES_USER | PostgreSQL 用户名 | postgres |
| POSTGRES_PASSWORD | PostgreSQL 密码 | postgres |
| POSTGRES_DB | PostgreSQL 数据库名称 | postgres |
| POSTGRES_PORT_OVERRIDE | PostgreSQL 端口映射 | 5432 |
| INTERNAL_PORT | 内部 API 端口 | 3002 |
| FIRECRAWL_PORT_OVERRIDE | 外部 API 端口映射 | 3002 |
| EXTRACT_WORKER_PORT | 提取工作进程端口 | 3004 |
| WORKER_PORT | 工作进程端口 | 3005 |
| USE_DB_AUTHENTICATION | 启用数据库身份验证 | false |
| OPENAI_API_KEY | OpenAI API 密钥(可选) | "" |
| OPENAI_BASE_URL | OpenAI API 基础 URL(可选) | "" |
| MODEL_NAME | AI 模型名称(可选) | "" |
| MODEL_EMBEDDING_NAME | 嵌入模型名称(可选) | "" |
| OLLAMA_BASE_URL | Ollama 基础 URL(可选) | "" |
| BULL_AUTH_KEY | Bull 队列管理面板身份验证密钥 | @ |
| TEST_API_KEY | 测试 API 密钥(可选) | "" |
| SLACK_WEBHOOK_URL | Slack Webhook 通知(可选) | "" |
| POSTHOG_API_KEY | PostHog API 密钥(可选) | "" |
| POSTHOG_HOST | PostHog 主机(可选) | "" |
| SUPABASE_ANON_TOKEN | Supabase 匿名令牌(可选) | "" |
| SUPABASE_URL | Supabase URL(可选) | "" |
| SUPABASE_SERVICE_TOKEN | Supabase 服务令牌(可选) | "" |
| SELF_HOSTED_WEBHOOK_URL | 自托管 Webhook URL(可选) | "" |
| SERPER_API_KEY | Serper 搜索 API 密钥(可选) | "" |
| SEARCHAPI_API_KEY | SearchAPI 密钥(可选) | "" |
| LOGGING_LEVEL | 日志级别 | info |
| PROXY_SERVER | 代理服务器 URL(可选) | "" |
| PROXY_USERNAME | 代理用户名(可选) | "" |
| PROXY_PASSWORD | 代理密码(可选) | "" |
| BLOCK_MEDIA | 阻止媒体内容 | true |
| SEARXNG_ENDPOINT | SearXNG 端点(可选) | "" |
| SEARXNG_ENGINES | SearXNG 引擎(可选) | "" |
| SEARXNG_CATEGORIES | SearXNG 分类(可选) | "" |
请根据实际需求修改 .env 文件。
卷
redis_data: 用于作业队列和缓存的 Redis 数据存储postgres_data: 用于队列管理和元数据的 PostgreSQL 数据存储
使用方法
启动服务
docker compose up -d
访问 API
Firecrawl API 可在以下地址访问:
http://localhost:3002
管理面板
访问 Bull 队列管理面板:
http://localhost:3002/admin/@/queues
如果修改了 BULL_AUTH_KEY,请将 @ 替换为您的值。
API 调用示例
抓取单个页面:
curl -X POST http://localhost:3002/v1/scrape \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com"
}'
爬取网站:
curl -X POST http://localhost:3002/v1/crawl \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"limit": 100
}'
提取结构化数据:
curl -X POST http://localhost:3002/v1/extract \
-H "Content-Type: application/json" \
-d '{
"urls": ["https://example.com"],
"schema": {
"type": "object",
"properties": {
"title": {"type": "string"},
"description": {"type": "string"}
}
}
}'
功能
- 网页抓取: 从任何网页提取干净的内容
- 网站爬取: 递归爬取整个网站
- JavaScript 渲染: 完全支持动态 JavaScript 渲染的页面
- Markdown 输出: 将网页内容清晰地转换为 markdown
- 结构化数据提取: 使用 JSON Schema 提取数据
- 队列管理: 内置 Bull 作业队列
- 速率限制: 可配置的速率限制
- 代理支持: 所有请求的可选代理配置
- AI 驱动功能: 可选的 OpenAI 集成以进行高级提取
架构
此部署使用官方 Firecrawl 架构:
- API 服务器: 处理 HTTP 请求并管理作业队列
- 工作进程: 内置于主容器中,处理抓取作业
- PostgreSQL: 存储队列元数据和作业信息
- Redis: 处理作业队列和缓存
- Playwright 服务: 提供浏览器自动化功能
注意事项
- 该服务使用官方的
ghcr.io/firecrawl/firecrawl镜像 - PostgreSQL 使用官方的
ghcr.io/firecrawl/nuq-postgres镜像进行队列管理(NUQ - Not Quite Bull) - Redis 默认不使用密码(运行在私有网络上)
- 对于生产环境,启用
USE_DB_AUTHENTICATION并配置 Supabase - 在生产部署中应更改
BULL_AUTH_KEY - AI 功能需要
OPENAI_API_KEY或OLLAMA_BASE_URL - 所有工作进程都在单个 API 容器中使用 harness 模式运行
许可证
Firecrawl 使用 AGPL-3.0 许可证授权。