自架 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:

  1. 用管理員帳號登入 Open WebUI,開啟 管理員面板 → 設定 → 聯網搜尋(Admin Panel → Settings → Web Search)。
  2. 開啟 啟用聯網搜尋(Enable Web Search) 開關。
  3. 聯網搜尋引擎(Web Search Engine) 選擇 searxng。
  4. Searxng Query URL 填寫:
    • 同專案內網(推薦):http://searxng.zenavo.internal:8080/search?q=<query>
    • 跨專案公開網域:https://search.example.com/search?q=<query>
  5. 點擊儲存。回到聊天視窗,打開輸入框下方的 聯網搜尋(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 值得保留:

  1. 修改好 settings.yml 後,可以在專案停止時段用 備份與還原 備份 /etc/searxng 磁碟區,或者直接把自訂的 settings.yml 內容複製留存。
  2. 範本預設使用 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 服務,幾分鐘就能為你的大型語言模型加上零按次成本的聯網搜尋。