想要擁有一個客製化的搜尋引擎嗎?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當資料庫。
在Linux電腦安裝 Docker
取得SearXNG容器的檔案,內含SearXNG、Caddy、Redis。
cd ~
git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker
- (架在本機跳過此步驟) 如果你有自己的網域,編輯
.env
檔案,填入主機名稱和Let’s Encrypt的電子郵件。
SEARXNG_HOSTNAME="主機名稱"
LETSENCRYPT_EMAIL="電子郵件"
- 用OpenSSL工具建立一組secret key,並自動填入至
searxng/settings.yml
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml
- 編輯
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:
- 啟動容器
docker compose up -d
瀏覽器開啟網址
http://localhost:8081
,測試能否存取SearXNG首頁。SearXNG的log可由以下指令查看
docker compose logs -f
- 日後若要更新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站台。
- 找到
~/searxng-docker/searxng/settings.yml
,複製secret_key
數值。再將設定檔內容換成完整 SearXNG的預設設定檔
cd ~/searxng-docker/searxng/
sudo wget https://raw.githubusercontent.com/searxng/searxng/master/searx/settings.yml
編輯
settings.yml
,把secret_key
更新回去。找到這一段,取消註解啟用Hostname replace插件
enabled_plugins:
- 'Hostname replace'
- 找到這一段
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.cc
、read01.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。