快轉到主要內容

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

Linux系統 Self-hosting自架 Search Engine SearXNG Google Search
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

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

SearXNG是為「元搜尋引擎」,透過代理伺服器的方式,整合各大搜尋引擎的結果,並能確保使用者隱私不被搜尋引擎供應商侵犯。

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

但公共站台最大的問題,果然還是回應速度和細部設定讓人不滿意吧,很多都架在歐美國家的,隱私權不見得有保障。

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

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

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

1. 初步設定docker-compose
#

SearXNG支援AMD64/ARM64/ARMv7架構的機器。

SearXNG官方提供的設定為Caddy當反向代理伺服器,Redis當資料庫。

  1. 在Linux電腦安裝 Docker

  2. 取得SearXNG容器的檔案,內含SearXNG、Caddy、Redis。

cd ~
git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker
  1. (架在本機跳過此步驟) 如果你有自己的網域,編輯.env檔案,填入主機名稱和Let’s Encrypt的電子郵件。
SEARXNG_HOSTNAME="主機名稱"
LETSENCRYPT_EMAIL="電子郵件"
  1. 用OpenSSL工具建立一組secret key,並自動填入至searxng/settings.yml
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
  1. 編輯docker-compose.yaml,參考如下範本修改docker-compose。
version: '3.7'

services:
  #加上restart參數會在開機後自動啟動。
  caddy:
    container_name: caddy
    image: caddy:2-alpine
    network_mode: host
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data::/data:rw
      - caddy-config::/config:rw
    environment:
      - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:80}
      - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
      - DAC_OVERRIDE # 修正權限問題

  redis:
    container_name: redis
    image: "redis:alpine"
    command: redis-server --save "" --appendonly "no"
    networks:
      - searxng
    tmpfs:
      - /var/lib/redis
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE # 修正權限問題

  searxng:
    container_name: searxng
    image: searxng/searxng:latest
    networks:
      - searxng
    ports: # 冒號左邊是對外開放的通訊埠,我改成8081
     - "8081:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment: # environment服務的網址,如果架在本機就不需要啟用HTTPS
      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
    privileged: true # 如果發生權限錯誤,試著加這條
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE # 修正權限問題
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
networks:
  searxng:
    ipam:
      driver: default

volumes:
  caddy-data:
  caddy-config:
  1. 啟動容器
docker compose up -d
  1. 瀏覽器開啟網址http://localhost:8081,測試能否存取SearXNG首頁。

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

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

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

進入SearXNG首頁後,點選右上角設定做些微調。

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

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

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

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

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

3. 調整settings.yml的細部設定
#

除了在圖形界面設定以外,SearXNG也可以修改settings.yml調整細部設定,像是改主題,或將Youtube的搜尋結果導向到注重隱私的 Invidious站台、Reddit導向LibReddit、Twitter導向Nitter等等。

這樣的話,使用者就不需要在網頁界面手動調整設定,而是直接套用此檔案所寫的設定值。

修改設定請先將容器停止

cd ~/searxng-docker
docker-compose down

3.1. 搜尋結果自動重導向
#

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

  1. 找到~/searxng-docker/searxng/settings.yml,複製secret_key數值。再將設定檔內容換成完整 SearXNG的預設設定檔
cd ~/searxng-docker/searxng/
sudo wget https://raw.githubusercontent.com/searxng/searxng/master/searx/settings.yml
  1. 編輯settings.yml,把secret_key更新回去。

  2. 找到這一段,取消註解啟用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站台

3.2. 在搜尋結果過濾特定網站
#

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

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

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

4. 外網如何存取私人SearXNG站台
#

之前寫過 虛擬區域網路軟體教學,可讓不同網路的裝置存取自己電腦上的SearXNG服務。

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

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

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

電腦端的Firefox不支援加入自訂網址的搜尋引擎,所以要先裝 Add custom search engine的附加元件。

開啟Add custom search engine,如圖填寫。電腦端因為是在本機,所以網址是localhost:8081

送出後對網址按下右鍵,新增至Firefox。

最後在Firefox的搜尋引擎設定找到SearXNG,將其設定為預設搜尋引擎。


手機的話,開啟手機版Firefox,點選設定 → 新增搜尋引擎,如圖填寫加入SearXNG。由於手機是使用ZeroTier連線,所以localhost要換成電腦的虛擬區域IP。

參考資料
#

相關文章

SearXNG教學:重隱私、一次搜尋多個引擎的元搜尋引擎,取代Google搜尋
Linux系統 Self-hosting自架 Search Engine SearXNG
如何自架Whoogle搜尋引擎,防範隱私被Google搜尋窺探
Linux系統 Self-hosting自架 Search Engine Google Search
取代Google搜尋引擎的一些選擇:去中心化的YaCy和Presearch
Linux系統 Self-hosting自架 Search Engine Google Search

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。