Docker 部署 - Crawl4AI 文檔 (v0.5.x)

Docker 部署 - Crawl4AI 文檔 (v0.5.x)

快速入門 🚀

拉取并運行基礎版本:

# 不帶安全性的基本運行
docker pull unclecode/crawl4ai:basic
docker run -p 11235:11235 unclecode/crawl4ai:basic# 帶有 API 安全性啟用的運行
docker run -p 11235:11235 -e CRAWL4AI_API_TOKEN=your_secret_token unclecode/crawl4ai:basic

使用 Docker Compose 運行 🐳

從本地 Dockerfile 或 Docker Hub 使用 Docker Compose

Crawl4AI 提供靈活的 Docker Compose 選項,用于管理你的容器化服務。你可以使用提供的 Dockerfile 本地構建鏡像,也可以使用 Docker Hub 上的預構建鏡像。

選項 1:使用 Docker Compose 本地構建

如果你希望本地構建鏡像,請使用提供的 docker-compose.local.yml 文件。

docker-compose -f docker-compose.local.yml up -d

這將:
1. 從提供的 Dockerfile 構建 Docker 鏡像。
2. 啟動容器并將其暴露在 http://localhost:11235


選項 2:使用 Docker Compose 從 Hub 獲取預構建鏡像

如果你更傾向于使用 Docker Hub 上的預構建鏡像,請使用 docker-compose.hub.yml 文件。

docker-compose -f docker-compose.hub.yml up -d

這將:
1. 拉取預構建鏡像 unclecode/crawl4ai:basic(或根據你的配置選擇 all)。
2. 啟動容器并將其暴露在 http://localhost:11235


停止正在運行的服務

要停止通過 Docker Compose 啟動的服務,可以使用:

docker-compose -f docker-compose.local.yml down
# 或者
docker-compose -f docker-compose.hub.yml down

如果容器無法停止且應用仍在運行,請檢查正在運行的容器:

找到正在運行的服務的 CONTAINER ID 并強制停止它:

docker stop <CONTAINER_ID>

使用 Docker Compose 調試

  • 查看日志:要查看容器日志:
docker-compose -f docker-compose.local.yml logs -f
  • 移除孤立容器:如果服務仍在意外運行:
docker-compose -f docker-compose.local.yml down --remove-orphans
  • 手動移除網絡:如果網絡仍在使用中:
docker network ls
docker network rm crawl4ai_default

為什么使用 Docker Compose?

Docker Compose 是部署 Crawl4AI 的推薦方式,因為:
1. 它簡化了多容器設置。
2. 允許你在單個文件中定義環境變量、資源和端口。
3. 使在本地開發和生產鏡像之間切換變得更容易。

例如,你的 docker-compose.yml 可以包含 API 密鑰、令牌設置和內存限制,使部署快速且一致。

API 安全性 🔒

了解 CRAWL4AI_API_TOKEN

CRAWL4AI_API_TOKEN 為你的 Crawl4AI 實例提供可選的安全性:

  • 如果設置了 CRAWL4AI_API_TOKEN:所有 API 端點(除了 /health)都需要認證。
  • 如果沒有設置 CRAWL4AI_API_TOKEN:API 將公開可用。
# 安全實例
docker run -p 11235:11235 -e CRAWL4AI_API_TOKEN=your_secret_token unclecode/crawl4ai:all# 未受保護實例
docker run -p 11235:11235 unclecode/crawl4ai:all

進行 API 調用

對于受保護的實例,在所有請求中包含令牌:

import requests# 設置標頭(如果使用了令牌)
api_token = "your_secret_token"  # 與 CRAWL4AI_API_TOKEN 中設置的令牌相同
headers = {"Authorization": f"Bearer {api_token}"} if api_token else {}# 發起認證請求
response = requests.post("http://localhost:11235/crawl",headers=headers,json={"urls": "https://example.com","priority": 10}
)# 檢查任務狀態
task_id = response.json()["task_id"]
status = requests.get(f"http://localhost:11235/task/{task_id}",headers=headers
)

與 Docker Compose 一起使用

在你的 docker-compose.yml 中:

services:crawl4ai:image: unclecode/crawl4ai:allenvironment:- CRAWL4AI_API_TOKEN=${CRAWL4AI_API_TOKEN:-}  # 可選# ... 其他配置

然后可以:
1. 在 .env 文件中設置:

CRAWL4AI_API_TOKEN=your_secret_token

或者在命令行中設置:

CRAWL4AI_API_TOKEN=your_secret_token docker-compose up

安全提示:如果你啟用了 API 令牌,請確保保持其安全性,不要將其提交到版本控制中。除了健康檢查端點(/health)外,所有 API 端點都需要該令牌。

配置選項 🔧

環境變量

你可以使用環境變量來配置服務:

# 基本配置
docker run -p 11235:11235 \-e MAX_CONCURRENT_TASKS=5 \unclecode/crawl4ai:all# 啟用安全性和 LLM 支持
docker run -p 11235:11235 \-e CRAWL4AI_API_TOKEN=your_secret_token \-e OPENAI_API_KEY=sk-... \-e ANTHROPIC_API_KEY=sk-ant-... \unclecode/crawl4ai:all

使用 Docker Compose(推薦) 🐳

創建一個 docker-compose.yml 文件:

version: '3.8'services:crawl4ai:image: unclecode/crawl4ai:allports:- "11235:11235"environment:- CRAWL4AI_API_TOKEN=${CRAWL4AI_API_TOKEN:-}  # 可選 API 安全性- MAX_CONCURRENT_TASKS=5# LLM 提供商密鑰- OPENAI_API_KEY=${OPENAI_API_KEY:-}- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}volumes:- /dev/shm:/dev/shmdeploy:resources:limits:memory: 4Greservations:memory: 1G

你可以通過兩種方式運行它:

  1. 直接使用環境變量:
CRAWL4AI_API_TOKEN=secret123 OPENAI_API_KEY=sk-... docker-compose up
  1. 使用 .env 文件(推薦):
    在同一目錄下創建一個 .env 文件:
# API 安全性(可選)
CRAWL4AI_API_TOKEN=your_secret_token# LLM 提供商密鑰
OPENAI_API_KEY=sk-...
ANTHROPIC_API_KEY=sk-ant-...# 其他配置
MAX_CONCURRENT_TASKS=5

然后只需運行:

測試部署 🧪

import requests# 對于未受保護的實例
def test_unsecured():# 健康檢查health = requests.get("http://localhost:11235/health")print("健康檢查:", health.json())# 基本爬取response = requests.post("http://localhost:11235/crawl",json={"urls": "https://www.nbcnews.com/business","priority": 10})task_id = response.json()["task_id"]print("任務 ID:", task_id)# 對于受保護的實例
def test_secured(api_token):headers = {"Authorization": f"Bearer {api_token}"}# 帶認證的基本爬取response = requests.post("http://localhost:11235/crawl",headers=headers,json={"urls": "https://www.nbcnews.com/business","priority": 10})task_id = response.json()["task_id"]print("任務 ID:", task_id)

當你配置了 LLM 提供商密鑰(通過環境變量或 .env 文件),你可以使用 LLM 提取:

request = {"urls": "https://example.com","extraction_config": {"type": "llm","params": {"provider": "openai/gpt-4","instruction": "從頁面中提取主要主題"}}
}# 發起請求(如果使用 API 安全性,請添加標頭)
response = requests.post("http://localhost:11235/crawl", json=request)

提示:記得將 .env 添加到 .gitignore 中,以確保你的 API 密鑰安全!

使用示例 📝

基本爬取

request = {"urls": "https://www.nbcnews.com/business","priority": 10
}response = requests.post("http://localhost:11235/crawl", json=request)
task_id = response.json()["task_id"]# 獲取結果
result = requests.get(f"http://localhost:11235/task/{task_id}")
schema = {"name": "加密貨幣價格","baseSelector": ".cds-tableRow-t45thuk","fields": [{"name": "加密貨幣","selector": "td:nth-child(1) h2","type": "text",},{"name": "價格","selector": "td:nth-child(2)","type": "text",}],
}request = {"urls": "https://www.coinbase.com/explore","extraction_config": {"type": "json_css","params": {"schema": schema}}
}

處理動態內容

request = {"urls": "https://www.nbcnews.com/business","js_code": ["const loadMoreButton = Array.from(document.querySelectorAll('button')).find(button => button.textContent.includes('Load More')); loadMoreButton && loadMoreButton.click();"],"wait_for": "article.tease-card:nth-child(10)"
}
request = {"urls": "https://www.nbcnews.com/business","extraction_config": {"type": "cosine","params": {"semantic_filter": "商業 財務 經濟","word_count_threshold": 10,"max_dist": 0.2,"top_k": 3}}
}

平臺特定指令 💻

macOS

docker pull unclecode/crawl4ai:basic
docker run -p 11235:11235 unclecode/crawl4ai:basic

Ubuntu

# 基礎版本
docker pull unclecode/crawl4ai:basic
docker run -p 11235:11235 unclecode/crawl4ai:basic# 帶 GPU 支持
docker pull unclecode/crawl4ai:gpu
docker run --gpus all -p 11235:11235 unclecode/crawl4ai:gpu

Windows(PowerShell)

docker pull unclecode/crawl4ai:basic
docker run -p 11235:11235 unclecode/crawl4ai:basic

測試 🧪

將以下內容保存為 test_docker.py

import requests
import json
import time
import sysclass Crawl4AiTester:def __init__(self, base_url: str = "http://localhost:11235"):self.base_url = base_urldef submit_and_wait(self, request_data: dict, timeout: int = 300) -> dict:# 提交爬取任務response = requests.post(f"{self.base_url}/crawl", json=request_data)task_id = response.json()["task_id"]print(f"任務 ID:{task_id}")# 輪詢結果start_time = time.time()while True:if time.time() - start_time > timeout:raise TimeoutError(f"任務 {task_id} 超時")result = requests.get(f"{self.base_url}/task/{task_id}")status = result.json()if status["status"] == "completed":return statustime.sleep(2)def test_deployment():tester = Crawl4AiTester()# 測試基本爬取request = {"urls": "https://www.nbcnews.com/business","priority": 10}result = tester.submit_and_wait(request)print("基本爬取成功!")print(f"內容長度:{len(result['result']['markdown'])}")if __name__ == "__main__":test_deployment()

高級配置 ??

爬蟲參數

crawler_params 字段允許你配置瀏覽器實例和爬取行為。以下是你可以使用的關鍵參數:

request = {"urls": "https://example.com","crawler_params": {# 瀏覽器配置"headless": True,                    # 以無頭模式運行"browser_type": "chromium",          # chromium/firefox/webkit"user_agent": "custom-agent",        # 自定義用戶代理"proxy": "http://proxy:8080",        # 代理配置# 性能與行為"page_timeout": 30000,               # 頁面加載超時(毫秒)"verbose": True,                     # 啟用詳細日志"semaphore_count": 5,               # 并發請求限制# 防檢測功能"simulate_user": True,               # 模擬人類行為"magic": True,                       # 高級防檢測"override_navigator": True,          # 覆蓋導航器屬性# 會話管理"user_data_dir": "./browser-data",   # 瀏覽器配置文件位置"use_managed_browser": True,         # 使用持久瀏覽器}
}

extra 字段允許直接將額外參數傳遞給爬蟲的 arun 函數:

request = {"urls": "https://example.com","extra": {"word_count_threshold": 10,          # 每個區塊的最小字數"only_text": True,                   # 僅提取文本"bypass_cache": True,                # 強制刷新爬取"process_iframes": True,             # 包含 iframe 內容}
}

完整示例

  1. 高級新聞爬取
request = {"urls": "https://www.nbcnews.com/business","crawler_params": {"headless": True,"page_timeout": 30000,"remove_overlay_elements": True      # 移除彈出窗口},"extra": {"word_count_threshold": 50,          # 更長的內容區塊"bypass_cache": True                 # 刷新內容},"css_selector": ".article-body"
}
  1. 防檢測配置
request = {"urls": "https://example.com","crawler_params": {"simulate_user": True,"magic": True,"override_navigator": True,"user_agent": "Mozilla/5.0 ...","headers": {"Accept-Language": "en-US,en;q=0.9"}}
}
  1. 帶有自定義參數的 LLM 提取
request = {"urls": "https://openai.com/pricing","extraction_config": {"type": "llm","params": {"provider": "openai/gpt-4","schema": pricing_schema}},"crawler_params": {"verbose": True,"page_timeout": 60000},"extra": {"word_count_threshold": 1,"only_text": True}
}
  1. 基于會話的動態內容
request = {"urls": "https://example.com","crawler_params": {"session_id": "dynamic_session","headless": False,"page_timeout": 60000},"js_code": ["window.scrollTo(0, document.body.scrollHeight);"],"wait_for": "js:() => document.querySelectorAll('.item').length > 10","extra": {"delay_before_return_html": 2.0}
}
  1. 帶自定義時間的截圖
request = {"urls": "https://example.com","screenshot": True,"crawler_params": {"headless": True,"screenshot_wait_for": ".main-content"},"extra": {"delay_before_return_html": 3.0}
}

參數參考表

分類參數類型描述
瀏覽器headless布爾值以無頭模式運行瀏覽器
瀏覽器browser_type字符串瀏覽器引擎選擇
瀏覽器user_agent字符串自定義用戶代理字符串
網絡proxy字符串代理服務器 URL
網絡headers字典自定義 HTTP 標頭
定時page_timeout整數頁面加載超時(毫秒)
定時delay_before_return_html浮點數捕獲前等待時間
防檢測simulate_user布爾值模擬人類行為
防檢測magic布爾值高級保護
會話session_id字符串瀏覽器會話 ID
會話user_data_dir字符串配置文件目錄
內容word_count_threshold整數每個區塊的最小字數
內容only_text布爾值僅提取文本
內容process_iframes布爾值包含 iframe 內容
調試verbose布爾值詳細日志
調試log_console布爾值瀏覽器控制臺日志

故障排除 🔍

常見問題

  1. 連接拒絕
錯誤:連接被 localhost:11235 拒絕

解決方案:確保容器正在運行且端口映射正確。

  1. 資源限制
錯誤:沒有可用插槽

解決方案:增加 MAX_CONCURRENT_TASKS 或容器資源。

  1. GPU 訪問

解決方案:確保安裝了正確的 NVIDIA 驅動程序并使用 --gpus all 標志。

調試模式

訪問容器進行調試:

docker run -it --entrypoint /bin/bash unclecode/crawl4ai:all

查看容器日志:

docker logs [container_id]

最佳實踐 🌟

  1. 資源管理
    - 設置適當的內存和 CPU 限制
    - 通過健康端點監控資源使用情況
    - 對于簡單爬取任務使用基礎版本

  2. 擴展
    - 對于高負載使用多個容器
    - 實施適當的負載均衡
    - 監控性能指標

  3. 安全性
    - 使用環境變量存儲敏感數據
    - 實施適當的網絡隔離
    - 定期進行安全更新

API 參考 📚

健康檢查

提交爬取任務

POST /crawl
Content-Type: application/json{"urls": "字符串或數組","extraction_config": {"type": "basic|llm|cosine|json_css","params": {}},"priority": 1-10,"ttl": 3600
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905192.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905192.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905192.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開發工具分享: Web前端編碼常用的在線編譯器

1.OneCompiler 工具網址&#xff1a;https://onecompiler.com/ OneCompiler支持60多種編程語言&#xff0c;在全球有超過1280萬用戶&#xff0c;讓開發者可以輕易實現代碼的編寫、運行和共享。 OneCompiler的線上調試功能完全免費&#xff0c;對編程語言的覆蓋也很全&#x…

Docker-配置私有倉庫(Harbor)

配置私有倉庫&#xff08;Harbor&#xff09; 一、環境準備安裝 Docker 三、安裝docker-compose四、準備Harbor五、配置證書六、部署配置Harbor七、配置啟動服務八、定制本地倉庫九、測試本地倉庫 Harbor(港灣)&#xff0c;是一個用于 存儲 和 分發 Docker 鏡像的企業級 Regi…

關于高并發GIS數據處理的一點經驗分享

1、背景介紹 筆者過去幾年在參與某個大型央企的項目開發過程中,遇到了十分棘手的難題。其與我們平常接觸的項目性質完全不同。在一般的項目中,客戶一般只要求我們能夠通過桌面軟件對原始數據進行加工處理,將各類地理信息數據加工處理成地圖/場景和工作空間,然后再將工作空…

使用 DMM 測試 TDR

TDR&#xff08;時域反射計&#xff09;可能是實驗室中上升時間最快的儀器&#xff0c;但您可以使用直流歐姆表測試其準確性。 TDR 測量什么 在所有高速通道中&#xff0c;反射都很糟糕。我們嘗試設計一個通道來減少反射&#xff0c;這些反射都會導致符號間干擾 &#xff08;…

可視化圖解算法37:序列化二叉樹-II

1. 題目 描述 請實現兩個函數&#xff0c;分別用來序列化和反序列化二叉樹&#xff0c;不對序列化之后的字符串進行約束&#xff0c;但要求能夠根據序列化之后的字符串重新構造出一棵與原二叉樹相同的樹。 二叉樹的序列化(Serialize)是指&#xff1a;把一棵二叉樹按照某種遍…

【Python】Python常用數據類型詳解

Python常用數據類型詳解:增刪改查全掌握 Python作為一門簡潔高效的編程語言,其豐富的數據類型是構建程序的基礎。本文將詳細介紹數字、字符串、列表、元組、字典、集合這六種核心數據類型的特點及增刪改查操作,并附代碼示例,助你全面掌握數據操作技巧。 一、數字(Number)…

模板引用、組件基礎

#### 組件基礎 1. 定義和使用簡單組件 - ![alt text](./img/image-2.png) vue <!-- 在App.vue里 --> <script setup>import HelloWorld from ./components/HelloWorld.vue </script> <template><HelloWorld></HelloWorld></temp…

深入探索 RKNN 模型轉換之旅

在人工智能蓬勃發展的當下&#xff0c;邊緣計算領域的應用愈發廣泛。瑞芯微的 RKNN 技術在這一領域大放異彩&#xff0c;它能讓深度學習模型在其芯片平臺上高效運行。而在整個應用流程中&#xff0c;模型轉換是極為關鍵的一環&#xff0c;今天就讓我們一同深入這個神奇的 RKNN …

iframe嵌套網站的安全機制實現

背景&#xff1a; 公司內部有一套系統A部署在內網&#xff0c;這套系統嵌套了B網站&#xff08;也是內網&#xff09;&#xff0c;只有內網才能訪問。現在需要將這個A系統暴露到公網。B系統的安全策略比較低&#xff0c;想快速上線并提高B系統的安全性。 通過 Nginx 代理層 設置…

青少年編程與數學 02-019 Rust 編程基礎 08課題、字面量、運算符和表達式

青少年編程與數學 02-019 Rust 編程基礎 08課題、字面量、運算符和表達式 一、字面量1. 字面量的分類1.1 整數字面量1.2 浮點數字面量1.3 字符字面量1.4 字符串字面量1.5 布爾字面量1.6 字節數組字面量 2. 字面量的類型推斷3. 字面量的用途4. 字面量的限制字面量總結 二、運算符…

危化品安全員職業發展方向的優劣對比

以下是危化品安全員不同職業發展方向的優劣對比&#xff1a; 縱向晉升 優勢 職業路徑清晰&#xff1a;從危化品安全員逐步晉升為安全主管、安全經理、安全總監等管理職位&#xff0c;層級明確&#xff0c;有較為清晰的上升通道。管理能力提升&#xff1a;隨著職位上升&#x…

談AI/OT 的融合

過去的十幾年間&#xff0c;工業界討論最多的話題之一就是IT/OT 融合&#xff0c;現在&#xff0c;我們不僅要實現IT/OT 的融合&#xff0c;更要面向AI/OT 的融合。看起來不太靠譜&#xff0c;卻留給我們無限的想象空間。OT 領域的專家們不要再當“九斤老太”&#xff0c;指責這…

計算機網絡核心技術解析:從基礎架構到應用實踐

計算機網絡作為現代信息社會的基石&#xff0c;承載著全球數據交換與資源共享的核心功能。本文將從網絡基礎架構、核心協議、分層模型到實際應用場景&#xff0c;全面解析計算機網絡的核心技術&#xff0c;并結合行業最新趨勢&#xff0c;為讀者構建系統的知識體系。 一、計算機…

大規模數據并行排序策略(Parallel Sample Sort)

大規模數據并行排序策略 對于上億條大型記錄的并行排序&#xff0c;基于MPI的多節點環境&#xff0c;可以采用以下策略來充分利用內存和網絡資源&#xff1a; 推薦算法&#xff1a;樣本排序(Sample Sort) 樣本排序是大規模并行排序的高效算法&#xff0c;特別適合MPI環境&am…

o.redisson.client.handler.CommandsQueue : Exception occured. Channel

1&#xff0c; 版本 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>2.15.2</version> </dependency>2&#xff0c;問題 2025-05-12 10:46:47.436 ERROR 27780 --- [sson-netty-5-…

Kotlin跨平臺Compose Multiplatform實戰指南

Kotlin Multiplatform&#xff08;KMP&#xff09;結合 Compose Multiplatform 正在成為跨平臺開發的熱門選擇&#xff0c;它允許開發者用一套代碼構建 Android、iOS、桌面&#xff08;Windows/macOS/Linux&#xff09;和 Web 應用。以下是一個實戰指南&#xff0c;涵蓋核心概念…

【Jenkins簡單自動化部署案例:基于Docker和Harbor的自動化部署流程記錄】

摘要 本文記錄了作者使用Jenkins時搭建的一個簡單自動化部署案例&#xff0c;涵蓋Jenkins的Docker化安裝、Harbor私有倉庫配置、Ansible遠程部署等核心步驟。通過一個SpringBoot項目 (RuoYi) 的完整流程演示&#xff0c;從代碼提交到鏡像構建、推送、滾動更新&#xff0c;逐步實…

【Git】GitHub上傳圖片遇到的問題

一開始我直接在網頁上拖拽上傳&#xff0c;會說“網頁無法正常運作”。 采用git push上去&#xff1a; git clone https://github.com/your-username/your-repo-name.git cd your-repo-name git add . git commit -m "Add large images" git push origin main報錯&…

【落羽的落羽 C++】stack和queue、deque、priority_queue、仿函數

文章目錄 一、stack和queue1. 概述2. 使用3. 模擬實現 二、deque三、priority_queue1. 概述和使用2. 模擬實現 四、仿函數 一、stack和queue 1. 概述 我們之前學習的vector和list&#xff0c;以及下面要認識的deque&#xff0c;都屬于STL的容器&#xff08;containers&#x…

用生活例子通俗理解 Python OOP 四大特性

讓我們用最生活化的方式&#xff0c;結合Python代碼&#xff0c;來理解面向對象編程的四大特性。 1. 封裝&#xff1a;像使用自動售貨機 生活比喻&#xff1a; 你只需要投幣、按按鈕&#xff0c;就能拿到飲料 不需要知道機器內部如何計算找零、如何運送飲料 如果直接打開機…