自行架設SearXNG元搜尋引擎服務,一次搜尋多個搜尋引擎

SearXNG這篇文章介紹過如何使用SearX/SearXNG取代Google等各大搜尋引擎,並簡介了它的優缺點。其中最大的問題,果然還是公共站點的回應速度和細部設定讓人不滿意吧,那麼就來自架個SearXNG搜尋引擎服務吧。(Self-host SearXNG instance)

本文參考searxng-docker在Github上的說明,使用Docker在Linux電腦架設SearXNG服務,開機自動啟動後就不用管他了。

1. 初步設定Dockerfile

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

  1. 在Linux電腦安裝Docker和Docker-compose。

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

1
2
3
cd /usr/local
sudo git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker
  1. (架在本機跳過此步驟) 如果你有自己的網域,編輯.env檔案,填入主機名稱和Let’s Encrypt的電子郵件。
1
2
SEARXNG_HOSTNAME="主機名稱"
LETSENCRYPT_EMAIL="電子郵件"
  1. 建立secret key
1
sudo sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
  1. 編輯docker-compose.yaml,參考如下範本填寫Dockerfile。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
version: '3.7'

services:

  caddy:
  #加上restart參數會在開機後自動啟動。
    restart: 'unless-stopped'
    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:
    restart: 'unless-stopped'
    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
  # port冒號左邊的是使用的通訊埠
  searxng:
    restart: 'unless-stopped'
    container_name: searxng
    image: searxng/searxng:latest
    networks:
      - searxng
    ports:
     - "8081:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    # environment服務的網址,因為是架在本機不啟用HTTPS
    environment:
      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost:8081}/
    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. 啟動容器
1
sudo docker compose up -d
  1. 瀏覽器開啟網址http://localhost:8081,測試能否存取。

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

1
sudo docker compose logs -f

2. 更新SearXNG

日後若要更新SearXNG容器,執行以下指令:

1
2
3
4
cd /usr/local/searxng-docker
sudo docker compose pull
sudo docker compose down
sudo docker compose up

3. 調整SearXNG細部設定

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

圖片搜尋部份啟用不同來源,其中華為經營的PetalSearch所回傳的結果十分有趣。

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

除了在圖形界面設定要搜尋的搜尋引擎以外,SearXNG也可以修改settings.yml做細部調整,像是將Youtube的搜尋結果導向到Invidious的公共/自架站點,自訂不要出現在搜尋結果的網站黑名單等。

  1. 將容器停止
1
2
cd /usr/local/searxng-docker/searxng/
sudo docker-compose down
  1. 編輯/usr/local/searxng-docker/searxng/settings.yml,你會發現它使用的是SearXNG的預設設定檔,請參閱SearXNG的說明文件進行細部調整。

4. 將手機和電腦的搜尋引擎設定為SearXNG

之前寫過ZeroTier使用教學,可讓不同網路的裝置存取自己電腦上的SearXNG服務。

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

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

4.1. 電腦端

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

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

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

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

4.2. 手機端

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

如果本網站文章對您有幫助,歡迎贊助我。