快轉到主要內容

自架開源SearXNG元搜尋引擎,一次搜尋Google、Duckduckgo、Bing多個結果

· 民國115年丙午年
·
切換繁體/簡體
分類 Linux系統 Self-hosting自架
標籤 Search Engine SearXNG Google Search
目錄

使用Docker + Nginx架設SearXNG。

想要擁有一個客製化的搜尋引擎嗎?SearXNG這款軟體可以協助您達成目的。

SearXNG是為「元搜尋引擎」,透過代理伺服器的方式,整合各大搜尋引擎的結果,請求過程中你的裝置資料會被匿名處理,能確保使用者隱私不被搜尋引擎供應商侵犯。

Ivon在這篇文章介紹過如何使用SearXNG取代Google各大搜尋引擎,並簡介了它的優缺點。

但公共站台最大的問題,果然還是回應速度和細部設定讓人不滿意吧,且隱私權不見得有保障,雖然SearXNG搜尋是匿名的,誰知道他們伺服器會不會記錄你的搜尋結果呢?

那麼何不自架SearXNG站台呢?這樣您就可以客製化搜尋引擎外觀,設定自動重導向、從搜尋結果過濾特定網站啦。

甚至不需要購買VPS,只需要在裝有Docker的電腦就可以輕鬆架起一個私人SearXNG站台!搜尋紀錄全部由您自己保管!

這個過程叫做Self-hosting a SearXNG instance。本文Ivon將使用Docker在電腦架設SearXNG服務,開機自動啟動後就不用管他了。

1. 設定docker-compose
#

SearXNG支援AMD64/ARM64/ARMv7架構的機器。它是個輕量的搜尋引擎。硬體資源需求不高,只要512MB RAM就能跑。

  1. 在Linux電腦安裝Docker

  2. 取得SearXNG容器的範本檔案,內含SearXNG與valkey資料庫。

cd ~ 

mkdir -p ./searxng/core-config/

cd ./searxng/

curl -fsSL \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml \
    -O https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example

cp -i .env.example .env 
  1. 編輯.env檔案:
SEARXNG_VERSION=latest

# 網址,若沒有使用反向代理就改為0.0.0.0
SEARXNG_HOST=127.0.0.1

# 容器內部使用的通訊埠,要修改對外曝露的通訊埠,編輯docker-compose.yml
SEARXNG_PORT=8080
  1. 啟動容器
docker compose up -d
  1. 瀏覽器開啟網址http://localhost:8081,測試能否存取SearXNG首頁。

  2. SearXNG的log可由以下指令查看

docker compose logs -f
  1. 日後若要更新SearXNG容器,執行以下指令:
cd ~/searxng

docker compose down

docker compose pull

docker compose up -d

2. 建議的settings.yml細部設定
#

SearXNG不提供帳號註冊機制,雖然使用者可以在網頁界面修改搜尋設定,但那是透過客戶端cookie保存的。最好在settings.yml事先定義好SearXNG的行為。

SearXNG可以修改settings.yml調整細部設定,定義使用者造訪網頁的預設行為,這樣使用者就不用在網頁修改設定了。

Docker版本的設定檔是存在./core-config/settings.yml

修改設定請先將容器停止

cd ~/searxng

docker compose down

預設啟用的搜尋引擎
#

搜尋引擎並非越多越好,會增加SearXNG回應時間到10秒以上。通常我只會保留Google、Duckduckgo、Bing這幾個較多人用的。再來QWant要取消啟用,因為QWant只有在歐洲提供服務,台灣無法使用。

settings.yml裡面有一長串搜尋引擎列表,加上disabled: true的話就會預設在SearXNG搜尋頁面停用:

  - name: qwant
    qwant_categ: web
    engine: qwant
    shortcut: qw
    categories: [general, web]
    disabled: true

另外,如果搜尋時候常常中英混合,default_lang的數值設定為all能搜尋到比較多結果。否則預設自動偵測語言的話只會列出中文結果。

autocomplete可以設定在搜尋框打字的時候要使用哪家建議關鍵字。

搜尋結果自動重導向
#

將搜尋結果中的網址全部替換為其他網址,比如youtube.com搜尋結果會自動導向到Invidious站台。

  1. 找到這一段,取消註解啟用Hostname replace插件
enabled_plugins:
   - 'Hostname replace'
  1. 找到這一段hostname_replace,設定重新導向規則。這裡正則表達式都已經寫好了,只要把後面換上要導向的網址就可以了。
hostname_replace:
  '(.*\.)?youtube\.com$': 'yewtu.be' # 將Youtube導向Invidious站台
  '(.*\.)?youtu\.be$': 'yewtu.be' # 將Youtube導向Invidious站台
  '(.*\.)?reddit\.com$': 'libreddit.freedit.eu' # 將Reddit導向LibReddit站台
  '(.*\.)?redd\.it$': 'libreddit.freedit.eu' # 將Reddit導向LibReddit站台
  '(www\.)?twitter\.com$': 'nitter.net' # 將Twitter導向Nitter站台

搜尋結果過濾特定網站
#

過濾特定網站,使其不出現在搜尋結果中。比方說封鎖內容農場kknews.ccread01.com。請參見內容農場列表

hostname_replace:這段下方加入要封鎖的網域,同樣使用正則表達式匹配。後面設定false即讓該網站從搜尋結果消失。

#   # to remove matching host names from result list, set value to false
   '(.*\.)?kknews\.cc$': false
   '(.*\.)?read01\.com$': false

3. Nginx反向代理範例
#

  1. 我使用子網域的做法,建立https://searxng.exmaple.com的子網域來存取SearXNG。SearXNG沒有帳號密碼的機制,網頁界面都是公開的,有需要的話得手動設定Nginx的登入密碼。

  2. 新增Nginx服務

sudo vim /etc/nginx/sites-available/searxng                                                                                                   
  1. 設定以下規則,讓子網域指向Docker容器的通訊埠
server {
    server_name https://searxng.exmaple.com; # 子網域
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:8080; # Docker通訊埠
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

}
  1. 啟用服務
sudo ln -s /etc/nginx/sites-available/searxng /etc/nginx/sites-enabled/

sudo systemctl reload nginx

4. 透過網頁調整SearXNG設定
#

進入SearXNG首頁後,點選右上角設定做些微調。因為SearXNG沒有帳號密碼,這裡的設定檔是透過cookie保存在客戶端。

注意不是所有設定都能在網頁界面改,最好事先在settings.yml定義好。

搜尋引擎並非越多越好,會增加回應時間。通常我只會保留Google、Duckduckgo、Bing這幾個較多人用的。再來QWant要取消勾選,因為QWant只有在歐洲提供服務,台灣無法使用。

圖片搜尋部份一樣,不用太多來源。

影片的話可把Youtube改為搜尋Invidious結果,並啟用Sepia Search(PeerTube)看到更多影片。

如果要跨裝置存取使用者設定檔,可透過Cookies頁面的網址進行還原。

架在localhost可能導致按存檔之後找不到網址,但其實是有存檔到的。重新打一次https://localhost:8081回首頁就行了。

5. 外網如何存取內網SearXNG站台
#

如果沒有使用反向代理的話,使用虛擬區域網路軟體,可讓不同網路的裝置存取自己電腦上的SearXNG服務。

從外部連線存取SearXNG記得要開啟防火牆的8081/tcp通訊埠,並將localhost網址換成區域IP,例如http://172.328.11.7:8081這樣。

6. 將瀏覽器搜尋引擎設為SearXNG
#

接著我們要把瀏覽器網址列的預設搜尋引擎設定為SearXNG。

開啟Firefox的設定 → 搜尋引擎新增SearXNG,將其設定為預設搜尋引擎,網址為https://網域/search?q=%s

手機的話,開啟手機版Firefox,點選設定 → 新增搜尋引擎,網址為https://網域/search?q=%s

參考資料
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。