大多數人可能會把 Firecrawl 歸類為那種「pip install、寫個腳本、搞定」的爬蟲函式庫。但這種理解其實不太對,而且在你動手輸入任何指令之前,搞清楚這個差異非常重要。Firecrawl 的自託管版本並不是一個你可以直接匯入的函式庫;它是一個你需要自己操作的服務,啟動它就代表要運行六個互相協作的 Docker 容器。
我在 Mac (arm64, 透過 colima 運行 Docker) 上跑了這個自託管堆疊,沒有用雲端金鑰,然後把它的 /v1/scrape 端點指向幾個適合爬蟲的示範網站,看看結果如何。簡單來說:核心承諾確實兌現了——頁面輸入後,輸出了乾淨的 LLM 就緒 Markdown——但它的設定是我這次研究中測試過所有工具裡最麻煩的。這只是一個初步觀察,不是最終評級,我會清楚說明我測試了什麼、沒測試什麼。
Firecrawl 是一個服務,不是函式庫
首先,我們要修正這個觀念。大多數開發者用的爬蟲工具都是函式庫:你加個依賴項,呼叫一個函式,然後在自己的程式裡拿到 HTML 或解析後的數據。Firecrawl 的自託管版本完全不同。它是一個有自己 API 的運行平台,你需要透過 HTTP 跟它溝通。
官方把它定位為「大規模搜尋、爬取和與網路互動的 API」,它的產品形態也確實如此——輸入頁面,輸出乾淨的 Markdown 或結構化數據。當你自託管時,你不是在連結 Firecrawl。你是在啟動一個 docker compose 堆疊,然後呼叫一個端點,就像你呼叫任何內部微服務一樣。
我運行的堆疊包含了六個服務:
- api — 你實際呼叫的 HTTP 介面
- playwright-service — 用於 JavaScript 渲染的無頭瀏覽器
- redis — 佇列和快取
- rabbitmq — 訊息代理
- nuq-postgres — 用於任務狀態的 Postgres 版本
- foundationdb — 分散式鍵值儲存

這是一個真正的後端,而不是一個輔助腳本。Redis、RabbitMQ、Postgres 和 FoundationDB 本身都是工業級的基礎設施。這樣做的好處是 Firecrawl 透過一個 API 呼叫處理了爬蟲的繁瑣部分——佇列、渲染、重試。代價是,你現在需要操作這六個容器。請記住這個權衡;這是整個評論的重點。
作為參考,我測試了 firecrawl-py 4.32.0 和 firecrawl-js 4.30.0 SDK,並在 2026 年 7 月 9 日拉取了官方預建的 ghcr.io/firecrawl/firecrawl:latest 映像。截至該日期,這個儲存庫大約有 14.8 萬顆星(這只是元數據,不是品質評分),並採用 AGPL-3.0 授權——我稍後會再提到這個細節,因為它改變了商業使用的考量。
核心測試:頁面轉換為乾淨的 Markdown
Firecrawl 存在的全部原因就是把網頁轉換成 LLM 能夠實際閱讀的 Markdown。這也是我首先要檢查的。
我把 /v1/scrape 指向 books.toscrape.com,這是一個專門為爬蟲練習而建的靜態目錄。結果:9,222 個字元的乾淨、LLM 就緒的 Markdown,頁面標題 All products | Books to Scrape 被正確解析。這不是原始 HTML 傾倒到字串中——而是結構化的 Markdown,標題、連結和圖片引用都完好無損。這種輸出可以直接放進檢索管道或餵給模型,不需要第二次清理。

這是 Firecrawl 的主要優勢,自託管版本也毫無問題地實現了。如果你的工作是「把這個頁面的可讀內容以 Markdown 形式給我」,那麼靜態頁面返回的結果完全符合預期。這是一個真正有用的基本功能,也是這個工具如此受歡迎的原因。
值得精確說明範圍:我測試了單頁的 /v1/scrape 路徑。我沒有測試 /v1/crawl,這個多頁爬蟲會遍歷整個網站。這是一個獨立的功能,有它自己的故障模式,我不會在我沒有運行它的情況下說它有效。
JavaScript 頁面:捆綁瀏覽器證明其容器價值
靜態頁面是簡單的情況。對於任何爬蟲來說,更困難的問題是當內容只有在 JavaScript 運行後才出現時會發生什麼——在現代網路中,這幾乎是常態。
這就是 playwright-service 容器不再是額外負擔,而是關鍵所在。我把爬蟲指向 quotes.toscrape.com/js/,這是示範網站的一個版本,它在客戶端渲染其引文。如果 Firecrawl 只是抓取原始 HTML,引文就不會出現——它們直到瀏覽器執行頁面腳本後才存在。
爬取返回了 1,574 個字元的 Markdown,其中包含了愛因斯坦的引文。這段引文是 JavaScript 執行後的內容:它的存在證明了 playwright-service 確實是在提取文本之前,在真實的瀏覽器引擎中渲染了頁面,而不是抓取空的預渲染外殼。

所以,六個容器中的一個是無頭瀏覽器,它完成了你期望它做的工作。這正是更重架構的具體理由:你不僅僅是為容器付費,你還為渲染大量 JS 頁面的能力付費,而無需自行連接瀏覽器自動化。對於許多實際目標來說,這就是可用輸出和空 div 之間的區別。
當目標不良時:結構化錯誤,不崩潰
爬蟲在很大一部分時間裡都指向那些不起作用的東西——死主機、拼寫錯誤的 URL、掛起的伺服器。一個工具如何失敗,與它如何成功一樣具有啟發性。
我故意向 API 傳送了一個無效的主機。它返回了一個結構化的 HTTP 500 並繼續運行——沒有向客戶端吐出堆疊追蹤,沒有容器崩潰,也沒有程式掛起。錯誤以乾淨的回應返回,呼叫者可以根據它進行分支處理。
這是你希望從管道中的東西獲得的無聊但正確的行為。一個在遇到不良目標時會恐慌的爬蟲是你無法自動化的。這個爬蟲返回了一個你可以捕獲並繼續處理的錯誤。我只測試了一個錯誤案例,所以請將此理解為「正確處理了我拋出的唯一一個故障」,而不是詳盡的彈性審核——但這一個數據點是正確的結果。
設定實況:基礎中最繁重的任務
現在是發布推文時沒人會截圖的部分。Firecrawl 的自託管版本,毫不誇張地說,是我在這個研究基礎中測試過所有工具裡最複雜的設定——而且我已經設定過很多了。
六個容器是基本成本。但在設定過程中,我也遇到了兩個問題,我想明確指出是誰的錯——結果並不是 Firecrawl 的錯。

第一個問題:從源碼建置。 在我的 colima VM 中,從源碼建置映像時,由於 containerd 快照錯誤而失敗。這是建置與 colima 儲存層之間已知的不穩定互動——是我環境中的基礎設施問題,而不是 Firecrawl 的錯誤。compose 檔案記錄了另一種方法:使用官方預建的 ghcr.io/firecrawl/* 映像,而不是在本地建置。我切換到這些映像後,整個堆疊就乾淨地啟動了。如果你使用的是標準 Docker 守護程序而不是 colima,你可能根本不會遇到這個問題;我將其標記為環境注意事項,並且在乾淨的守護程序上驗證貢獻者建置是我的待辦事項之一。
第二個問題:SSRF 防護。 我第一次爬取時被 Firecrawl 的私有 IP / SSRF 防護阻止了。為什麼?colima 的網路將公共主機名映射到 198.18.x.x 地址,這些地址位於 Firecrawl 正確視為私有的保留範圍內——所以它的安全層發揮了作用,拒絕抓取看起來像內部目標的內容。為了 僅限於本地測試 繞過這個問題,我設定了 ALLOW_LOCAL_WEBHOOKS=true。
這個標誌會被複製貼上到生產環境中並導致事故,所以請明確它到底是什麼:SSRF 防護是一個功能,而不是障礙。它阻止爬蟲服務被欺騙去訪問你的內部網路。我禁用它是因為 colima 的 DNS 怪癖讓我的合法公共目標在 VM 內部 看起來 像是私有的。在實際部署中,請勿關閉 SSRF 防護。如果你從這篇評論中只記住一個操作注意事項,那就是這個。
這兩個問題,坦白說,都是在筆記型電腦上透過 colima 運行 Docker 的產物——而不是軟體本身的缺陷。另一方面,設定本身的繁重是真實的,而且是 Firecrawl 設計使然。這不是你想要快速本地腳本時會選擇的工具;它是當你想要一個具備渲染能力的爬蟲服務,並且願意為此運行基礎設施時才會選擇的工具。
我沒有測試什麼,以及它沒有做什麼
以下是我沒有涵蓋的內容,以及這個工具沒有提供什麼。
自託管版本沒有 Fire-engine。 Firecrawl 的雲端產品包含 Fire-engine,這是其專有的反阻擋層,用於繞過機器人防禦。根據專案自己的 SELF_HOST.md,自託管實例不包含它。因此,如果你想像自託管的 Firecrawl 可以開箱即用地突破激進的反機器人系統,請修正這個想法——該功能存在於雲端層級,並且不屬於我運行的部分。
雲端 API 在此未經測試。 我沒有雲端金鑰,所以以上所有內容都僅限於自託管堆疊。託管的雲端服務——包含 Fire-engine、託管擴展和 AI 功能——是不同的產品,我不會從外部描述其性能。請將任何雲端聲明視為超出本次評論範圍。
AI 功能需要金鑰。 json 結構化輸出格式和 /extract 端點依賴於 LLM,這意味著需要提供 OpenAI 金鑰或連接 Ollama。這將模型選擇納入物料清單:在承諾設定之前,請比較你可以使用的供應商的當前 API 定價。我沒有測試這些路徑,所以 /extract 和結構化 json 輸出也屬於未經測試的範疇。
代理是一個注意事項,而不是重點。 Firecrawl 支援代理配置,但我故意將其列為註腳——它是一個你可以 調整 的旋鈕,而不是選擇該工具的理由,而且自託管版本仍然缺乏雲端的反阻擋層。
AGPL-3.0 是一個真正的合規性決策。 這一個值得單獨說明。
授權:在發布前閱讀 AGPL-3.0

Firecrawl 採用 AGPL-3.0 授權。這不是 README 底部的一句隨意的話——它是一個具有網路使用條款的強大 copyleft 授權,它可能直接影響你是否可以在自託管實例之上建構商業產品。
簡而言之:標準的 GPL 義務在分發時觸發。AGPL 更進一步——網路使用條款意味著透過網路向用戶提供軟體功能可能被視為一種帶有源碼可用性義務的使用。如果你將自託管的 Firecrawl 嵌入到你的客戶透過網路訪問的服務中,該條款就完全適用,而「我們從未發布二進制文件」並不是人們想像中的逃生艙。
我不是你的律師,授權解釋取決於你部署的具體方式。但對於任何商業建議,AGPL-3.0 都是一個首要考量,而不是細則。在以此為基礎進行建構之前,請諮詢你公司負責授權的人員。標記這一點並不是對 Firecrawl 的批評——許多優秀的工具都是 AGPL——這只是一個你需要及早了解的事實。
Thunderbit 的開發者堆疊如何融入
如果你的實際目標是「頁面 → LLM 就緒的 Markdown」或「頁面 → 結構化數據」,並且你不想承擔六個容器的操作成本以及 AGPL 的問題,那麼這正是 Thunderbit 開發者堆疊所設計的解決方案。我們 10 萬多個擴充功能用戶背後的相同 AI 引擎,以三種方式暴露給技術工作——而基礎設施則由我們負責。
- 開放 API (REST)。
POST /distill將頁面轉換為乾淨、LLM 就緒的 Markdown;POST /extract根據你定義的 JSON Schema 返回結構化數據。JS 渲染、反機器人處理和動態內容都在伺服器端處理——你無需運行瀏覽器容器。renderMode標誌 (none/basic/full) 控制渲染的強度,批次端點處理多達 100 個 URL 進行蒸餾。 - MCP 伺服器。 官方的 Model Context Protocol 伺服器,因此 Claude 或 Cursor 中的 AI 代理可以在任務中進行爬取:
thunderbit_suggest_fields用於規劃提取(免費),thunderbit_distill用於 Markdown,thunderbit_extract用於結構化數據。代理決定 何時 拉取數據,而無需離開其環境。 - CLI。
npx -y @thunderbit/thunderbit-cli從終端、腳本、CI 或 cron 運行爬取——無需瀏覽器,無需照看堆疊。直接將其管道到其他工具:thunderbit distill "$URL" -f markdown | claude -p "summarise"。
與自託管 Firecrawl 的對比非常清晰。Firecrawl 自託管為你提供完全的控制權和完全的操作所有權:六個容器、設定的繁重、AGPL 條款,以及沒有 Fire-engine 用於反阻擋。Thunderbit 的 API/MCP/CLI 則以託管引擎換取了這種控制權,該引擎返回符合模式的結構化 JSON——不僅僅是原始 Markdown——同時將容器、反機器人層和 copyleft 義務從你的肩上卸下。不同的工具適用於對基礎設施有不同需求的用戶。
以下是權衡的概覽:
| 考量 | Firecrawl 自託管 | Thunderbit 開發者堆疊 (API · MCP · CLI) |
|---|---|---|
| 部署形式 | 你操作的服務 (6 個容器) | 你呼叫的託管 API |
| 啟動方式 | docker compose 啟動一個 6 服務堆疊 | API 金鑰,然後發送請求 |
| JS 渲染 | 捆綁的 playwright-service (你運行它) | 伺服器端,renderMode 標誌 |
| 結構化輸出 | 需要 LLM 金鑰 (/extract,json) | POST /extract 帶有 JSON Schema |
| 反機器人層 | 自託管無 (Fire-engine 僅限雲端) | 伺服器端處理 |
| 授權 | AGPL-3.0 (網路使用 copyleft) | 商業 API,你的程式碼無 copyleft 限制 |
| 最適用於 | 你想要完全控制並運行基礎設施 | 你想要 Markdown/結構化數據而無需操作 |
兩者都沒有普遍的「更好」。如果運行平台 就是 你的重點——完全的數據控制,沒有外部依賴,並且 AGPL 適合你的情況——那麼自託管的 Firecrawl 是一個功能強大、積極維護的選擇。如果你寧願呼叫 API 並跳過六個容器的生活,那麼這就是 Thunderbit 堆疊的優勢所在。
誰應該真正自託管 Firecrawl
拋開炒作,情況足夠清晰,可以根據需求進行分類。
如果你符合以下條件,請自託管 Firecrawl: 你希望完全控制你的爬蟲基礎設施,你習慣於在生產環境中操作 Redis / RabbitMQ / Postgres / FoundationDB,你的渲染需求證明了 playwright-service 容器的合理性,並且 AGPL-3.0 適用於你的部署方式。核心功能是真實的:我從靜態頁面和 JS 渲染頁面都獲得了乾淨、結構化、LLM 就緒的 Markdown,並且整個堆疊都在預建映像上運行。
如果你符合以下條件,請尋找其他方案: 你想要一個快速的本地腳本(這是基礎中最繁重的設定,沒有之一),你需要在不自行操作的情況下獲得雲端級別的反阻擋(自託管沒有 Fire-engine),或者 AGPL 網路使用條款與你的商業計畫衝突。對於「我只需要從 URL 獲取 Markdown 或結構化數據,而無需操作」的情況,像 Thunderbit 的 /distill 和 /extract 這樣的託管 API 可以在沒有容器的情況下實現相同的目標。
我的初步判斷:核心功能強大,操作承諾繁重,並且在商業建構之前必須解決授權問題。它為那些希望擁有整個管道的團隊贏得了地位——但它對其他人要求很高。我將在運行 /v1/crawl、使用 LLM 金鑰測試 /extract,並在非 colima 守護程序上驗證從源碼建置後,重新審視這個問題;這些是介於本次評論和最終結論之間的未決問題。
試用 Thunderbit 進行網頁數據提取 Get Started Free
常見問題
自託管的 Firecrawl 與雲端版本相同嗎?
不。自託管版本提供核心的爬取到 Markdown 引擎和透過捆綁的 playwright-service 進行的 JavaScript 渲染,但它不包含 Fire-engine,即雲端產品專有的反阻擋層。像 /extract 端點和 json 輸出這樣的 AI 功能也需要你自己的 LLM 金鑰 (OpenAI 或 Ollama)。在本次評論中,我僅測試了自託管堆疊;雲端 API 超出了範圍。
自託管的 Firecrawl 實際需要多少個容器? 六個:api、playwright-service、redis、rabbitmq、nuq-postgres 和 foundationdb。它是一個完整的服務堆疊,而不是單一的二進制文件——這也是它成為本次研究中最繁重設定的原因。請為運行訊息代理、快取和資料庫基礎設施的操作開銷做好準備,而不僅僅是一個腳本。
自託管的 Firecrawl 能處理大量 JavaScript 的頁面嗎? 是的,在我的測試中。捆綁的 playwright-service 在提取之前會在真實的瀏覽器引擎中渲染頁面。我在 quotes.toscrape.com/js/ 上證實了這一點,其中愛因斯坦的引文——只有在 JavaScript 運行後才存在的內容——出現在返回的 Markdown 中。這種渲染能力正是六個容器中一個是無頭瀏覽器的原因。
AGPL-3.0 授權會影響商業使用嗎? 可能會,你應該將其視為一個首要問題。AGPL-3.0 是一個具有網路使用條款的強大 copyleft 授權,這意味著透過網路向用戶提供軟體功能可能帶有源碼可用性義務——即使你從未分發二進制文件。如果你計畫在自託管實例上建構商業產品,請在承諾之前與你公司負責授權的人員溝通。本次評論標記了授權;它不是法律建議。
Firecrawl 和 Thunderbit 的開發者工具之間有什麼區別?
Firecrawl 自託管是一個你操作的服務——六個由你自行運行的容器,帶有 AGPL-3.0 條款且沒有內建的反阻擋層。Thunderbit 的開發者堆疊 (開放 API、MCP 伺服器、CLI) 是一個你呼叫的託管引擎:POST /distill 用於 Markdown,POST /extract 用於 JSON-Schema 結構化數據,JS 渲染和反機器人處理在伺服器端進行,並且你的程式碼沒有 copyleft 義務。Firecrawl 適合希望完全控制基礎設施的團隊;Thunderbit 適合那些希望獲得輸出而無需操作負擔的團隊。


