自架 SearXNG 元搜尋引擎:零追蹤搜尋,並為 Open WebUI 與 LobeHub 開啟聯網搜尋
用 Zenavo 範本在自己的伺服器上部署 SearXNG 隱私元搜尋引擎,開啟 JSON API,並透過專案私有網路串接 Open WebUI 與 LobeHub,免按次付費即可讓大型語言模型用上即時聯網搜尋。
本文亦提供 English、简体中文、日本語、Español 和 Bahasa Indonesia。
架好 Open WebUI 或 LobeHub 之後,大家很快就會遇到同一個需求:怎麼讓模型查今天的新聞、最新的文件或網頁資訊? 串接商業搜尋 API(如 Tavily、Serper、Brave Search)通常要綁卡按次計費,而直接用公開的 SearXNG 站台又經常因為限流而報錯。
SearXNG 是一個開源的元搜尋引擎:它自己不建全網索引,而是替你同時查詢 Google、Bing、DuckDuckGo、Wikipedia、GitHub 等數十個搜尋來源,彙整去重後回傳結果,不記錄你的搜尋輪廓。更實用的是,把它和 Open WebUI 或 LobeHub 放進同一個 Zenavo 專案裡,就能直接走私有網路免費為 AI 提供聯網搜尋。
1. 兩種部署方式:獨立使用,或放進 AI 專案內網
先在 Zenavo 中連接一台 Linux 伺服器,再依你的用途選擇:
- 方式 A:只給 Open WebUI 或 LobeHub 當聯網搜尋後端(推薦)
開啟你現有的 Open WebUI 或 LobeHub 專案,點右上角 新增服務(Add Service)→ 範本(Templates),選擇 SearXNG。這樣 SearXNG 直接運行在同一個專案內網裡(
http://searxng.zenavo.internal:8080),甚至不需要綁定公開網域,外人根本連不到你的搜尋介面。 - 方式 B:同時作為自己日常使用的隱私搜尋引擎
直接從 SearXNG 範本建立新專案部署,然後在
searxng服務的 網路(Networking) 頁為8080連接埠綁定一個網域(如search.example.com),等待 HTTPS 自動生效。詳見網域文件。
目前範本的設定非常輕量(記憶體佔用通常不到 200 MB):
| 設定 | 值或用途 |
|---|---|
| 映像檔 | searxng/searxng:latest |
| HTTP 連接埠 | 8080 |
| 設定磁碟區 | /etc/searxng(首次啟動自動產生 settings.yml 與 limiter.toml) |
| 快取磁碟區 | /var/cache/searxng |
SEARXNG_SECRET |
建立專案時自動產生的隨機密鑰 |
2. 開啟 JSON 輸出格式(串接 AI 必做)
SearXNG 預設只允許瀏覽器存取 HTML 頁面,直接請求 ?format=json 會回傳 403 Forbidden。而 Open WebUI、LobeHub 等 AI 工具都需要透過 JSON API 抓取搜尋結果。
服務第一次啟動並產生預設設定後,開啟 /etc/searxng/settings.yml(可透過容器終端機或設定檔功能編輯),找到 search: 底下的 formats:,把 json 加進去:
search:
formats:
- html
- json
如果你只透過 Zenavo 內網呼叫 SearXNG,還可以順手確認 server: 底下的 limiter: false(預設關閉限流器),避免無公網反向代理標頭時誤擋內網請求。儲存後在控制台點 重新啟動(Restart)。
3. 串接 Open WebUI
如果你依這篇指南部署了 Open WebUI:
- 用管理員帳號登入 Open WebUI,開啟 管理員面板 → 設定 → 聯網搜尋(Admin Panel → Settings → Web Search)。
- 開啟 啟用聯網搜尋(Enable Web Search) 開關。
- 聯網搜尋引擎(Web Search Engine) 選擇
searxng。 - Searxng Query URL 填寫:
- 同專案內網(推薦):
http://searxng.zenavo.internal:8080/search?q=<query> - 跨專案公開網域:
https://search.example.com/search?q=<query>
- 同專案內網(推薦):
- 點擊儲存。回到聊天視窗,打開輸入框下方的 聯網搜尋(Web Search) 開關,問一句即時問題即可看到模型先檢索網頁再回答。
4. 串接 LobeHub
如果你依 LobeHub 部署指南架設了多人對話平台,在 lobehub 服務的 變數(Variable) 頁新增以下環境變數,儲存並重新啟動 lobehub:
SEARCH_PROVIDERS=searxng
SEARXNG_URL=http://searxng.zenavo.internal:8080
(若不在同一個 Zenavo 專案,把 SEARXNG_URL 換成你的 https://search.example.com。)重新啟動後,LobeHub 對話框裡的智慧聯網搜尋就會透過你自己的 SearXNG 抓取網頁資訊。
5. 備份與升級
SearXNG 本身不存使用者業務資料,只有你修改過的 /etc/searxng/settings.yml 值得保留:
- 修改好
settings.yml後,可以在專案停止時段用 備份與還原 備份/etc/searxng磁碟區,或者直接把自訂的settings.yml內容複製留存。 - 範本預設使用
searxng/searxng:latest以取得最新的上游搜尋引擎解析規則(各家搜尋引擎常改頁面結構,SearXNG 更新相當頻繁)。如果某次更新遇到相容問題,可在服務 設定 → 來源 中固定到指定標籤。
常見問題
Open WebUI 或 LobeHub 搜尋時回報 403 Forbidden?
99% 的原因是還沒有依上文第 2 步在 /etc/searxng/settings.yml 的 search.formats 中加入 json,或者改完後沒重新啟動 searxng 服務。另外,如果你為公開網域套了機器人防護,建議同專案直接改用 http://searxng.zenavo.internal:8080 內網位址。
部分搜尋引擎(如 Google)偶爾回傳逾時或驗證碼?
雲端伺服器機房 IP 頻繁請求單一搜尋引擎時,可能觸發上游反爬蟲限制。可以在 SearXNG 頁面右上角的 偏好設定(Preferences)→ 引擎(Engines) 或 settings.yml 中同時勾選 Bing、DuckDuckGo、Brave、Wikipedia 等多個引擎分攤請求。
公開綁定了網域,怎麼防止別人拿我的 SearXNG 刷 API?
如果只是給自己的 Open WebUI / LobeHub 用,最徹底的安全做法是不綁公開網域,只走 .zenavo.internal 私有網路。如果還需要自己在瀏覽器裡用,可以在 settings.yml 中開啟 server.limiter: true,或只開啟 HTML、不對外開放 JSON。
可以搭配自架模型閘道一起用嗎? 完全可以。許多使用者的標準組合是在同一個 Zenavo 專案裡跑 Open WebUI / LobeHub + SearXNG + Magpie(或 New API、LiteLLM),前端聊天、聯網檢索與模型路由全部在一台伺服器內網完成。
開啟 SearXNG 範本,或在現有 AI 專案裡直接加入 SearXNG 服務,幾分鐘就能為你的大型語言模型加上零按次成本的聯網搜尋。
這是 coding agent 讀到的內容,網址是 https://zenavo.app/zh-TW/blog/self-host-searxng.md。
無法載入 Markdown,請直接開啟: https://zenavo.app/zh-TW/blog/self-host-searxng.md