rm tmp/* 檔案太多會 Argument list too long,改 rm 整個目錄再 mkdir。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.6 KiB
3.6 KiB
CT124 Browserless(自架 headless Chromium)— 操作手冊
主機:CT124(192.168.42.124,Ubuntu 24.04 LXC) | 位置:
/opt/browserless用途:程式化截圖 / 轉 PDF / 抓內容 / 跑 Puppeteer・Playwright
一、基本資訊
- 版本:v2.53.0(image
ghcr.io/browserless/chromium,2026-06 更新) - 容器:
browserless_chromium(restart: unless-stopped) - 埠:
13000 → 3000,端點http://192.168.42.124:13000 - Token:見
.env的BROWSERLESS_TOKEN(每個請求都要帶?token=<TOKEN>) - 對外:未經 NPM,僅 LAN(
browserless/chromium.lotimmy.com皆不解析) - 官方文件:https://docs.browserless.io/
二、操作
cd /opt/browserless
docker compose up -d # 啟動 / 套用設定
docker compose pull && docker compose up -d # 更新到最新 image
docker compose logs -f
docker compose ps
(Makefile 也包了 make up/down/restart/logs/ps 等捷徑。)
三、設定(docker-compose.yml 環境變數)
| 變數 | 值 | 說明 |
|---|---|---|
CONCURRENT |
2 | 同時並發 session 數 |
TOKEN |
見 .env | 存取權杖 |
ENABLE_FUNCTIONS |
true | 開啟 /function 自訂腳本 |
DEFAULT_STEALTH |
true | 預設隱身模式(對付一般 bot 偵測) |
DEFAULT_BLOCK_ADS |
true | 預設擋廣告 |
TIMEOUT / FUNCTION_TIMEOUT |
60000 | 逾時 (ms) |
| 資源限制 | 2 CPU / 2G / shm 2g | deploy.resources |
四、可用端點(REST,已實測)
帶 ?token=<TOKEN>,POST + Content-Type: application/json:
T=<TOKEN>
# 截圖
curl -X POST "http://192.168.42.124:13000/chromium/screenshot?token=$T" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","options":{"type":"png"}}' --output shot.png
# HTML 內容
curl -X POST "http://192.168.42.124:13000/chromium/content?token=$T" \
-H "Content-Type: application/json" -d '{"url":"https://example.com"}'
# PDF
curl -X POST "http://192.168.42.124:13000/chromium/pdf?token=$T" \
-H "Content-Type: application/json" -d '{"url":"https://example.com"}' --output out.pdf
# 結構化抓取
curl -X POST "http://192.168.42.124:13000/chromium/scrape?token=$T" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com","elements":[{"selector":"h1"}]}'
其他:/chromium/function(自訂 JS)、/chromium/performance、/chromium/download、/chromium/playwright。
Puppeteer / Playwright 連線(WebSocket):
const b = await puppeteer.connect({ browserWSEndpoint: "ws://192.168.42.124:13000?token=<TOKEN>" });
API 文件 UI:http://192.168.42.124:13000/docs?token=<TOKEN>(OpenAPI:/docs/swagger.json)。
五、這個 image 沒有的功能(重要)
- BrowserQL(BQL):
/chromium/bql回 404。BQL 是獨立產品(另一顆 imageghcr.io/browserless/browserql,自架屬 Enterprise)。 - 驗證碼破解(solve / verify):屬 BQL 功能,本 image 沒有,也沒有
/unblock。- 自架要解 captcha 的務實做法:在
/function或 Playwright 流程中接第三方(2Captcha / CapSolver 等)。
- 自架要解 captcha 的務實做法:在
DEFAULT_STEALTH只降低被偵測機率,不等於破解驗證碼。
六、維運注意
browserless-tmp/會脹:bind-mount 進容器的/tmp,Chromium 暫存累積,2026-06-22 已達 1.2G(已清回 8K)。要清就停容器後砍整個目錄重建:(cd /opt/browserless && docker compose down rm -rf browserless-tmp && mkdir -m 777 browserless-tmp # 砍目錄,別用 rm tmp/*(檔案太多會 Argument list too long) docker compose up -dCHROME_REFRESH_TIME=3600000每小時回收 Chrome,但/tmp殘檔不一定跟著清。)