Doramagic 项目包 · 项目说明书
firecrawl 项目
用于大规模搜索、抓取和交互网页的 API。🔥
Project Overview & Repository Structure
Firecrawl 是一个面向 AI Agent 与开发者的一站式 Web 数据 API,提供从搜索、抓取、批量抓取、整站爬取到浏览器交互、结构化抽取等完整链路。仓库根目录的 README.md 将其核心端点划分为两大类:核心端点(Search、Scrape、Interact)与扩展端点(Agent、Crawl、Map、Batch Scrape)。其中 Scrape 可将任...
继续阅读本节完整说明和来源证据。
项目概览与仓库结构
项目定位与核心能力
Firecrawl 是一个面向 AI Agent 与开发者的一站式 Web 数据 API,提供从搜索、抓取、批量抓取、整站爬取到浏览器交互、结构化抽取等完整链路。仓库根目录的 README.md 将其核心端点划分为两大类:核心端点(Search、Scrape、Interact)与扩展端点(Agent、Crawl、Map、Batch Scrape)。其中 Scrape 可将任意 URL 转换为 Markdown、HTML、截图或结构化 JSON;Interact 端点允许在抓取后通过自然语言提示词或 Playwright 代码对页面进行点击、填表、翻页等操作 资料来源:README.md:5-17。
项目以 v2 系列为主线,截至当前最新发布版本 v2.10 引入了 /parse 端点(支持 PDF、DOCX、XLSX 等本地文件上传解析)以及 Lockdown Mode 等企业级能力;同时在 v2.9.0 加入了浏览器交互(/interact),v2.8.0 引入了 Parallel Agents 与 Firecrawl CLI,v2.6.0 完成了统一计费模型(Credits 与 Tokens 合并)。
仓库整体结构
Firecrawl 采用 monorepo 形式组织,主要目录划分如下:
| 目录 | 角色 | 关键产物 |
|---|---|---|
apps/api | 核心 API 服务(TypeScript/Node.js) | 抓取、队列、智能抽取、Playwright 浏览器控制 |
apps/api/sharedLibs/go-html-to-md | Go 编写的 HTML→Markdown 转换共享库 | 通过 go build -buildmode=c-shared 编译为 .so/.dylib/.dll 供 Node 调用 资料来源:apps/api/sharedLibs/go-html-to-md/README.md:1-9 |
apps/python-sdk、apps/js-sdk/firecrawl、apps/rust-sdk、apps/ruby-sdk | 多语言官方 SDK | 提供 Search/Scrape/Crawl/Map/Batch Scrape 一致接口 |
examples/ | 端到端示例工程 | gpt-4.1-web-crawler、o3-web-crawler、gemini-2.5-web-extractor、llama-4-maverick-web-crawler、deepseek-v3-company-researcher 等 |
firecrawl-skills/、firecrawl-workflows/ | 配套技能与工作流子模块 | Skills 用于把 Firecrawl 嵌入产品代码;Workflows 提供可复用的研究/竞品分析流水线 资料来源:firecrawl-skills/README.md:1-5、firecrawl-workflows/README.md:1-3 |
核心服务组件
API 服务(apps/api)是整个系统的中枢,包含三条关键子链路:
- 抓取与浏览器渲染:
scrapeURL/lib/中实现了智能抓取逻辑。smartScrape.ts通过内部/smart-scrape端点使用 Gemini 2.5 Pro 等模型驱动 LLM 抽取 资料来源:apps/api/src/scraper/scrapeURL/lib/smartScrape.ts:1-60。extractSmartScrape.ts定义了 Zod 风格的输出 Schema,包含shouldUseSmartscrape开关与smartscrape_reasoning/smartscrape_prompt字段,用以在数据缺失时决定是否触发"模拟用户交互"以获取更深层内容 资料来源:apps/api/src/scraper/scrapeURL/lib/extractSmartScrape.ts:1-25。 - 队列与缓存:社区长期关注 Redis 依赖及其稳定性——
nuq工作进程存在连接泄漏导致 Redismaxclients(默认 10000)耗尽的问题(#3662),并有用户提议引入 Valkey 作为替代后端(#2718)。 - HTML→Markdown 转换:通过 Go 共享库在 Node 进程中以 FFI 方式加速 HTML 解析与正文抽取。
SDK 与示例生态
各语言 SDK 在接口层面高度一致:
- Python (
apps/python-sdk):提供Firecrawl客户端,支持search、scrape、crawl、start_crawl、get_crawl_status、parse(上传本地文件)等方法,并可结合nest_asyncio通过crawl_url_and_watch进行 WebSocket 监听 资料来源:apps/python-sdk/README.md:1-30`。 - Node.js / TypeScript (
apps/js-sdk/firecrawl):提供app.crawl、app.startCrawl、app.getCrawlStatus、app.extract(支持 Zod Schema)等异步方法 资料来源:apps/js-sdk/firecrawl/README.md:1-20`。 - Rust (
apps/rust-sdk):Client::new(api_key)后调用scrape_url,对视频链接(YouTube、TikTok)可通过Format::Video获得签名 URL 视频流 资料来源:apps/rust-sdk/README.md:1-20`。 - Ruby (
apps/ruby-sdk):以Firecrawl::Models命名空间承载CrawlOptions、BatchScrapeOptions、MapOptions、SearchOptions等模型对象 资料来源:apps/ruby-sdk/README.md:1-30`。
examples/ 目录展示了典型组合:先用 Map 枚举站内 URL,再调用 LLM(GPT-4.1、o3、Gemini 2.5、Llama 4 Maverick、DeepSeek V3 等)做相关度排序与内容分析,最后用 Scrape/Extract 拿到结构化 JSON 资料来源:examples/gpt-4.1-web-crawler/README.md:1-20、examples/o3-web-crawler/README.md:1-20。
自托管与部署关注点
社区中的高互动议题集中在自托管场景:
- 代理(Proxy)支持:#1129 指出在单 IP 反复抓取时容易被目标站封禁,需要官方在自托管中提供代理选项。
- Docker 构建失败:
html-transformer模块在某些平台下出现*mut u8与*mut i8类型不匹配(#1103),与go-html-to-md共享库的 C 字符串边界处理相关。 - 反爬死循环:
nuq-worker在被反爬系统拦截后可能陷入永久重试(#2350),需要更稳健的超时与退避策略。 - Playwright 镜像:#1322 询问是否提供预构建 Playwright 镜像以简化部署。
- Kubernetes Helm Chart:#1255 请求官方发布 Helm Chart 以便在 K8s 中安装。
See Also
- See: API Endpoints Reference
- See: Self-Hosting Guide
- See: SDK Usage Guide
- See: SmartScrape & Extraction Pipeline
来源:https://github.com/firecrawl/firecrawl / 项目说明书
API Server, Scraping Engine & Worker Pipeline
Firecrawl 的核心后端由三层构成:对外提供 REST API 的 API Server(位于 apps/api)、执行实际抓取与解析的 Scraping Engine,以及基于 Redis 的异步任务队列 Worker Pipeline(nuq)。整个系统以 nuq 队列解耦请求接收与抓取执行,使 scrape、crawl、batch scrape、agent 等端...
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
API Server、Scraping Engine 与 Worker Pipeline
概述
Firecrawl 的核心后端由三层构成:对外提供 REST API 的 API Server(位于 apps/api)、执行实际抓取与解析的 Scraping Engine,以及基于 Redis 的异步任务队列 Worker Pipeline(nuq)。整个系统以 nuq 队列解耦请求接收与抓取执行,使 scrape、crawl、batch scrape、agent 等端点既能同步返回结果,也能通过 job id 异步轮询。资料来源:README.md。
社区对这套架构的关注主要集中在三类问题上:自托管场景下的 Redis 连接泄漏(见 Issue #3662)、batch scrape 状态接口返回数据冗余(见 Issue #2599),以及反爬触发的死循环(见 Issue #2350)。这些议题均直接关联 Worker Pipeline 的稳定性与 Scraping Engine 的错误处理策略。
整体架构
下图展示了从 API 入口到抓取执行、到队列回写的主要数据流:
flowchart LR
Client[SDK / cURL / Playground] -->|HTTP v2| API[API Server<br/>apps/api/src]
API -->|sync scrape| Engine[Scraping Engine<br/>scrapeURL/]
API -->|async crawl/batch| Queue[(Redis + nuq)]
Queue --> Worker[nuq Worker]
Worker --> Engine
Engine -->|结果回写| Queue
Queue -->|job status| API
API -->|轮询响应| ClientAPI Server 同时承担 POST /v2/scrape、POST /v2/crawl、POST /v2/batch/scrape、POST /v2/agent、POST /v2/map、POST /v2/search 等端点的鉴权、参数校验和入队逻辑。资料来源:README.md。
Scraping Engine
apps/api/src/scraper/scrapeURL/lib/smartScrape.ts 定义了 smartScrape 内部函数,它通过 POST ${SMART_SCRAPE_API_URL}/smart-scrape 把 URL 与 prompt 转发给推理服务,结构化结果以 Zod schema 校验。函数签名接受 url、prompt、sessionId、extractId、scrapeId 和 costTracking 字段,并在 child logger 中绑定 extractId、url、prompt、sessionId、scrapeId 以便链路追踪。资料来源:apps/api/src/scraper/scrapeURL/lib/smartScrape.ts。
const response = await robustFetch<typeof smartScrapeResultSchema>({
url: `${config.SMART_SCRAPE_API_URL}/smart-scrape`,
method: "POST",
body: {
url, prompt, userProvidedId: sessionId ?? undefined,
extractId, scrapeId,
models: { thinkingModel: { model: "gemini-2.5-pro", ... } },
},
});
在抽取场景下,apps/api/src/scraper/scrapeURL/lib/extractSmartScrape.ts 引入了 shouldUseSmartscrape 布尔字段与 smartscrape_reasoning、smartscrape_prompt 文本字段,允许 LLM 决定是否需要二次智能抓取(例如点击折叠面板、登录、分页等用户行为)。当 shouldUseSmartscrape 为 true 时,引擎会再次调用 smartScrape 完成交互。资料来源:apps/api/src/scraper/scrapeURL/lib/extractSmartScrape.ts。
各官方 SDK 在调用层对此做了统一封装:Python 的 firecrawl.scrape(url, formats=[...])、Node 的 app.scrape(url, { formats: [...] })、Rust 的 app.scrape_url(url, None)、Java 的 client.scrape(...) 均将 formats、changeTracking 等参数透传至 POST /v2/scrape,由 Engine 决定具体执行链路。资料来源:apps/python-sdk/README.md、apps/js-sdk/firecrawl/README.md、apps/rust-sdk/README.md、apps/java-sdk/README.md。
Worker Pipeline(nuq)
crawl 与 batch scrape 等长任务并不在请求线程中执行,而是被 enqueue 到 nuq(基于 Redis 的队列抽象)。Worker 进程订阅队列后调用 scrapeURL 完成单页抓取,并把中间态写回 Redis,使 SDK 的 crawl waiter 或 getCrawlStatus(id) 能通过 Redis 读取进度。资料来源:apps/python-sdk/README.md、apps/ruby-sdk/README.md。
crawl 方法默认阻塞直到完成(poll_interval=30),start_crawl 仅返回 job id;Ruby SDK 提供对应的 client.crawl / client.start_crawl / client.get_crawl_status / client.cancel_crawl 四元组。资料来源:apps/ruby-sdk/README.md。
已知失败模式
| 现象 | 触发条件 | 资料来源 |
|---|---|---|
Redis 连接持续增长直至 maxclients=10000 | nuq worker 未释放 Redis 连接,约 18 天耗尽连接数 | Issue #3662 |
GET /batch/scrape/:id 在未完成时仍返回完整 data | 缺少 omit_data 等过滤参数 | Issue #2599 |
被反爬封禁后进入 nuq-worker-4 永久重试 | 反爬分支缺少全局超时与最大重试上限 | Issue #2350 |
html-transformer Docker 构建失败(*mut u8 vs *mut i8) | Rust FFI 与 CString 版本不一致 | Issue #1103 |
对于希望替换 Redis 的自托管用户,社区已提出对 Valkey(Redis 的 Linux Foundation 开源分叉)的兼容性测试需求,见 Issue #2718。
自托管注意事项
社区反馈的部署痛点集中在 scraper 的可选依赖:html-transformer 的 Rust 构建链路(Issue #1103)、Playwright 镜像的可用性(Issue #1322)、代理支持(Issue #1129)以及 Kubernetes Helm chart(Issue #1255)。这些不直接影响 API Server 的语义,但决定 Worker Pipeline 在自托管环境能否成功拉起 scraper 容器。生产部署建议显式声明 playwright 服务镜像版本并启用针对 Redis 的连接复用监控,以规避 Issue #3662 中的连接泄漏。
See Also
来源:https://github.com/firecrawl/firecrawl / 项目说明书
SDK Ecosystem & Client Libraries
Firecrawl 的 SDK 生态是一组围绕同一组 v2 HTTP 端点(/scrape、/crawl、/map、/batch/scrape、/search、/agent、/extract、/interact 等)构建的多语言客户端库,目的是让 AI Agent、数据工程师与产品开发者在不同技术栈中以一致的方式调用 Firecrawl 的网页抓取与结构化提取能力。根目录的...
继续阅读本节完整说明和来源证据。
概览与定位
Firecrawl 的 SDK 生态是一组围绕同一组 v2 HTTP 端点(/scrape、/crawl、/map、/batch/scrape、/search、/agent、/extract、/interact 等)构建的多语言客户端库,目的是让 AI Agent、数据工程师与产品开发者在不同技术栈中以一致的方式调用 Firecrawl 的网页抓取与结构化提取能力。根目录的 README.md 明确把 Search、Scrape、Interact、Agent、Crawl、Map、Batch Scrape 列为“Core Endpoints”,SDK 的职责就是把这些端点包装成语义化的方法并屏蔽鉴权与轮询细节。
资料来源:README.md:1-40
除官方 SDK 外,仓库还托管了 firecrawl-skills 与 firecrawl-workflows 两个子目录,把 SDK 用法沉淀为可复用的“技能”与“工作流”资产,前者聚焦在产品代码中如何选择端点、装配 SDK、设置 API Key,后者面向竞品分析、站点克隆等可重复交付物。
资料来源:firecrawl-skills/README.md:1-5、firecrawl-workflows/README.md:1-5
官方 SDK 矩阵
仓库在 apps/ 目录中并行维护多种语言实现,发布节奏与 v2 API 同步。下表按语言对核心能力、入口类与代表性方法做汇总,方便按技术栈选型。
| 语言/包 | 入口 | 初始化 | 抓取/爬取入口方法 |
|---|---|---|---|
JavaScript / TypeScript(apps/js-sdk) | FirecrawlApp / Firecrawl | new FirecrawlApp({apiKey}) | scrape、crawl、startCrawl、getCrawlStatus |
Python(apps/python-sdk) | Firecrawl | Firecrawl(api_key=...) | scrape、crawl、start_crawl、get_crawl_status、crawl_url_and_watch |
Rust(apps/rust-sdk) | Client | Client::new("fc-...") | scrape_url |
Java(apps/java-sdk) | FirecrawlClient 及其 models 包 | 构造器注入 API Key | 通过 Format 模型(如 QuestionFormat)描述请求体 |
资料来源:apps/js-sdk/firecrawl/README.md:1-40、apps/python-sdk/README.md:1-40、apps/rust-sdk/README.md:1-25、apps/java-sdk/src/main/java/com/firecrawl/models/QuestionFormat.java:1-30
需要注意的是,不同语言 SDK 在 v2 命名风格上保持了统一:Node 使用驼峰(如 startCrawl),Python 使用蛇形(如 start_crawl),但二者的语义一一对应,避免跨语言迁移时的心智负担。
通用调用模式
各 SDK 都遵循相似的三步调用模式:构造客户端 → 调用阻塞或异步方法 → 解析结果。下面以 Python 与 Node 为例展示这一共同模式。
from firecrawl import Firecrawl
from firecrawl.types import ScrapeOptions
firecrawl = Firecrawl(api_key="fc-YOUR_API_KEY")
result = firecrawl.scrape(
"https://firecrawl.dev",
formats=["markdown", "html"],
)
print(result)
资料来源:apps/python-sdk/README.md:1-30
import { Firecrawl } from "firecrawl";
const app = new Firecrawl({ apiKey: "fc-YOUR_API_KEY" });
const crawlResponse = await app.crawl("https://firecrawl.dev", {
limit: 100,
scrapeOptions: { formats: ["markdown", "html"] },
pollInterval: 2,
});
资料来源:apps/js-sdk/firecrawl/README.md:1-25
对于耗时较长的爬取任务,SDK 都提供阻塞(waiter)与非阻塞两套接口:阻塞方法在内部按 pollInterval 轮询直到完成;非阻塞方法如 startCrawl / start_crawl 仅返回作业 ID,调用方用 getCrawlStatus / get_crawl_status 自行驱动状态机。这种“可选异步”设计在 Crawl、Batch Scrape、Agent 等长任务端点上保持一致。
差异化能力
虽然核心 API 表面一致,但各 SDK 在语言习惯层面提供了差异化能力。
- Python — WebSocket 监听器:
crawl_url_and_watch方法返回一个支持document、error、done事件的 watcher,可流式接收爬取进度,适合在 Notebook 或长任务管道中实时消费。资料来源:apps/python-sdk/README.md:1-50 - Node — Extract + Zod 集成:
extract方法可直接接收 Zod schema,把 LLM 抽取结果强类型化为 JS 对象,简化前端/Agnet 链路。资料来源:apps/js-sdk/firecrawl/README.md:1-50 - Rust — 显式异步与
Format::Video:使用tokio运行时与Format枚举,YouTube/TikTok 等视频 URL 可通过Format::Video返回签名下载链接。资料来源:apps/rust-sdk/README.md:1-25 - Java — 强类型请求模型:
QuestionFormat等模型类通过 Builder 模式构造请求体,@JsonInclude(NON_NULL)注解保证空字段不参与序列化,便于在企业后端服务中安全调用。资料来源:apps/java-sdk/src/main/java/com/firecrawl/models/QuestionFormat.java:1-30
flowchart LR
A[User Code] --> B[Firecrawl SDK Client]
B -->|HTTP/JSON| C[Firecrawl v2 API]
C --> D[(Queue / Workers)]
D --> E[SmartScrape / Extract]
E -->|polling or webhook| B
B --> A服务端侧的智能抓取能力(如 smartScrape)会调用内部 /smart-scrape 端点完成 LLM 驱动的结构化提取,SDK 客户端只需通过 extract / scrape(prompt=...) 等高层方法触发即可。
资料来源:apps/api/src/scraper/scrapeURL/lib/smartScrape.ts:1-40
示例与生态扩展
仓库的 examples/ 目录收纳了大量 SDK 与第三方模型组合的实战样例,可作为集成参考:
examples/gemini-2.5-crawler/:使用 Gemini 2.5 Pro 进行站点映射与排序,演示了map+scrape的两阶段流水线。资料来源:examples/gemini-2.5-crawler/README.md:1-30examples/gpt-4.1-web-crawler/、examples/o3-web-crawler/、examples/llama-4-maverick-web-crawler/、examples/deepseek-v3-company-researcher/:分别演示将 Firecrawl 与 OpenAI GPT-4.1、o3、Llama 4 Maverick、DeepSeek-V3 结合的“目标驱动”爬取模式。资料来源:examples/gpt-4.1-web-crawler/README.md:1-30、examples/o3-web-crawler/README.md:1-25、examples/llama-4-maverick-web-crawler/README.md:1-30、examples/deepseek-v3-company-researcher/README.md:1-30examples/gemini-2.5-screenshot-editor/:通过 CLI 与 Gemini 2.5 Flash 对 Firecrawl 截图进行编辑与组合。资料来源:examples/gemini-2.5-screenshot-editor/README.md:1-40
社区近期关注的功能(如 v2.10 引入的 /parse 本地文件解析、Lockdown Mode 等)均同步在 SDK 中以新方法/新参数形式暴露,自托管用户在升级到较新版 docker-compose 后需同步将 SDK 升级到与 API 兼容的版本。
常见失败模式
- API Key 缺失或环境变量拼写错误:Node SDK 默认读取
FIRECRAWL_API_KEY,但也允许在构造时显式传入apiKey;若两者都未设置,将收到认证错误。资料来源:apps/js-sdk/firecrawl/README.md:1-25、apps/python-sdk/README.md:1-25 - 长任务被截断:未使用 waiter 模式而直接
await app.crawl(...)时,底层 HTTP 超时可能导致任务中断,建议在批处理或 Agent 场景下优先使用startCrawl+ 状态轮询。 - v1/v2 命名差异:v2 SDK 中参数名以
formats、scrapeOptions等小驼峰为主,迁移自 v1 旧版时需注意pageOptions等字段已重命名。 - 自托管时连接后端失败:自托管用户在容器网络内调用 SDK 时,需把
FIRECRAWL_API_URL指向内部服务地址,否则 SDK 会默认访问api.firecrawl.dev,这也是社区 #1103、#1322 等 Docker 构建/网络相关 Issue 的常见根因之一。
See Also
- Firecrawl API Endpoints & Core Features — 端点与功能总览
- Self-Hosting & Docker Compose — 自托管部署
- SmartScrape & LLM Extraction — 服务端智能抓取
- Examples & Integrations — 多模型组合示例
资料来源:README.md:1-40
Self-Hosting, Deployment & Common Failure Modes
Firecrawl 提供 Search、Scrape、Interact、Agent、Crawl、Map、Batch Scrape 等核心端点,既可以走 firecrawl.dev 托管服务,也可以通过 Docker 自托管 README.md。本页聚焦自托管场景下的部署拓扑、配置入口,以及社区高频反馈的故障模式,帮助运维与开发人员快速定位问题。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
继续阅读本节完整说明和来源证据。
概述
Firecrawl 提供 Search、Scrape、Interact、Agent、Crawl、Map、Batch Scrape 等核心端点,既可以走 firecrawl.dev 托管服务,也可以通过 Docker 自托管 README.md。本页聚焦自托管场景下的部署拓扑、配置入口,以及社区高频反馈的故障模式,帮助运维与开发人员快速定位问题。
部署架构
自托管实例通常由以下组件协同工作:API 服务(处理 scrape / crawl / agent 等同步与异步请求)、Playwright 浏览器集群(渲染需要 JS 的页面)、Redis/Valkey(缓存与轻量队列)、nuq-worker(实际抓取与提取的执行端)、以及可选的 Postgres 后端(持久化 nuq 任务)。代码中 smartScrape 通过 config.SMART_SCRAPE_API_URL 调用内部端点,说明 API 与抓取/提取子系统是独立部署但通过 HTTP 协作的 smartScrape.ts。
graph LR Client[客户端 / SDK] --> API[API 服务] API --> Queue[nuq 队列] Queue --> Worker[nuq-worker] Worker --> Browser[Playwright 浏览器集群] Worker --> Redis[(Redis / Valkey)] Worker --> PG[(Postgres)] Worker --> LLM[LLM 提取服务] LLM --> Worker API -. 状态轮询 .-> Client
关键配置入口
smartScrape 与 extractSmartScrape 通过统一 config 对象读取运行时参数,包括内部 SMART_SCRAPE_API_URL、所选 LLM(如 gemini-2.5-pro)和成本追踪开关 extractSmartScrape.ts。自托管时必须保证这些环境变量在 API 与 worker 两端都正确注入,且内部服务之间网络可达。
apps/api/sharedLibs/go-html-to-md 是将 Go 实现的 HTML→Markdown 编译为 C 共享库的脚本,产物按目标系统分为 .dll / .so / .dylib go-html-to-md/README.md。Docker 构建时需针对目标平台执行对应 go build -buildmode=c-shared 命令,否则会出现原生库缺失或符号类型不匹配问题(社区 #1103 即因此类 C 端类型差异 *mut u8 vs *mut i8 触发)。
常见故障模式
1. nuq-worker 持续累积 Redis 连接
社区 #3662 报告 nuq-worker 进程与 Redis 的连接数单调上升,约 18 天后撞到 Redis 默认 maxclients = 10000 上限,触发持续 EPIPE 风暴并伴随 CPU/内存攀升。临时缓解可提高 maxclients 或周期性重启 worker;根本方案需要修复连接泄漏,并补上连接上限保护。
2. 反爬触发后的无限 waterfall 循环
#2350 记录了 API 在目标站点启用反爬时反复回退到不同抓取策略,却没有任何墙钟超时保护,最终 nuq-worker 死锁、日志循环。运维侧应在 worker 层设置最大重试次数与单次抓取超时,并在外层加 watchdog 回收。
3. 自托管缺少代理出口
#1129 指出默认镜像未暴露代理配置,服务器出口 IP 在大量抓取后被目标站点封锁。短期可借助 sidecar 透明代理或网络层 egress proxy;官方尚未提供内置 PROXY 环境变量。
4. Playwright 镜像与 Helm Chart 缺失
#1322 询问官方 Playwright 镜像(compose 中 image 字段留空),#1255 提议提供 Kubernetes Helm Chart 以便在 K8s 上部署。两者目前都依赖用户自行构建或社区方案。
5. 缓存后端从 Redis 迁移到 Valkey
#2718 提议增加 Valkey 兼容测试。Valkey 是 Redis 的 Linux 基金会开源分叉,因 Redis 许可证变更被许多企业采纳。自托管时切到 Valkey 通常无需改代码,但需确认 ioredis 客户端版本与 Valkey 协议完全兼容。
SDK 与上层能力
JavaScript、Python、Ruby、Rust SDK 均对 crawl、batch scrape、map、search、extract 等端点提供阻塞与异步两种调用方式 js-sdk/README.md、python-sdk/README.md、ruby-sdk/README.md、rust-sdk/README.md。Firecrawl Skills 与 Firecrawl Workflows 仓库面向产品集成与可重复交付物模板 firecrawl-skills/README.md、firecrawl-workflows/README.md,可与自托管部署协同使用。
See Also
- Core API Endpoints (Search / Scrape / Crawl / Map / Batch Scrape)
- nuq Queue Internals
- LLM Extraction Pipeline (
extractSmartScrape) - SDK Quick Start (JS / Python / Ruby / Rust)
来源:https://github.com/firecrawl/firecrawl / 项目说明书
失败模式与踩坑日记
保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。
可能影响授权、密钥配置或安全边界。
可能增加新用户试用和生产接入成本。
假设不成立时,用户拿不到承诺的能力。
新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
Pitfall Log / 踩坑日志
项目:firecrawl/firecrawl
摘要:发现 10 个潜在踩坑项,其中 1 个为 high/blocking;最高优先级:安全/权限坑 - 来源证据:[Self-Host] nuq workers leak Redis connections until maxclients (10k) → continuous EPIPE storm, climbing CPU/memory。
1. 安全/权限坑 · 来源证据:[Self-Host] nuq workers leak Redis connections until maxclients (10k) → continuous EPIPE storm, climbing CPU/memory
- 严重度:high
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:[Self-Host] nuq workers leak Redis connections until maxclients (10k) → continuous EPIPE storm, climbing CPU/memory
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/firecrawl/firecrawl/issues/3662 | 来源讨论提到 node 相关条件,需在安装/试用前复核。
2. 安装坑 · 来源证据:Your project is tracked on HVTracker — any data we should correct?
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:Your project is tracked on HVTracker — any data we should correct?
- 对用户的影响:可能增加新用户试用和生产接入成本。
- 证据:community_evidence:github | https://github.com/firecrawl/firecrawl/issues/3668 | 来源讨论提到 npm 相关条件,需在安装/试用前复核。
3. 能力坑 · 能力判断依赖假设
- 严重度:medium
- 证据强度:source_linked
- 发现:README/documentation is current enough for a first validation pass.
- 对用户的影响:假设不成立时,用户拿不到承诺的能力。
- 证据:capability.assumptions | github_repo:787076358 | https://github.com/firecrawl/firecrawl | README/documentation is current enough for a first validation pass.
4. 维护坑 · 维护活跃度未知
- 严重度:medium
- 证据强度:source_linked
- 发现:未记录 last_activity_observed。
- 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
- 证据:evidence.maintainer_signals | github_repo:787076358 | https://github.com/firecrawl/firecrawl | last_activity_observed missing
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 证据:downstream_validation.risk_items | github_repo:787076358 | https://github.com/firecrawl/firecrawl | no_demo; severity=medium
6. 安全/权限坑 · 存在评分风险
- 严重度:medium
- 证据强度:source_linked
- 发现:no_demo
- 对用户的影响:风险会影响是否适合普通用户安装。
- 证据:risks.scoring_risks | github_repo:787076358 | https://github.com/firecrawl/firecrawl | no_demo; severity=medium
7. 安全/权限坑 · 来源证据:Feature: AgentCredit integration — credit fallback for x402 scraping when wallet is short
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:Feature: AgentCredit integration — credit fallback for x402 scraping when wallet is short
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/firecrawl/firecrawl/issues/3415 | 来源讨论提到 api key 相关条件,需在安装/试用前复核。
8. 安全/权限坑 · 来源证据:[Feat] Add Additional Testing to Ensure Support for Valkey
- 严重度:medium
- 证据强度:source_linked
- 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:[Feat] Add Additional Testing to Ensure Support for Valkey
- 对用户的影响:可能影响授权、密钥配置或安全边界。
- 证据:community_evidence:github | https://github.com/firecrawl/firecrawl/issues/2718 | 来源讨论提到 docker 相关条件,需在安装/试用前复核。
9. 维护坑 · issue/PR 响应质量未知
- 严重度:low
- 证据强度:source_linked
- 发现:issue_or_pr_quality=unknown。
- 对用户的影响:用户无法判断遇到问题后是否有人维护。
- 证据:evidence.maintainer_signals | github_repo:787076358 | https://github.com/firecrawl/firecrawl | issue_or_pr_quality=unknown
10. 维护坑 · 发布节奏不明确
- 严重度:low
- 证据强度:source_linked
- 发现:release_recency=unknown。
- 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
- 证据:evidence.maintainer_signals | github_repo:787076358 | https://github.com/firecrawl/firecrawl | release_recency=unknown
来源:Doramagic 发现、验证与编译记录