纯手动自建 whoogle-search 搜索引擎

引言

whoogle-search 基于 Google 的搜索结果,但移除了广告、JavaScript 要求、AMP 链接和各种追踪,能够很方便地自定义搜索结果,实现 URL 重定向(比如自动跳转 X、YouTube、Wikipedia、Reddit、StackOverflow 到 nitter、CloudTube、Wikiless、Libreddit、AnonymousOverflow)、屏蔽特定域名(各种内容农场)和自定义 CSS 等功能。

此处省略废话三百字。其实第一次搭建搜索引擎要用 whoogle-search 我是拒绝的,因为,你不能让我搭,我就马上去搭。第一我要试一下,因为我不愿意搭完了以后再去试 SearXNG,搜索「咣」一下,很快、很准,这样我一定会骂 whoogle,别人的 💩⛰ 代码跑起来都比你个只需要索引 Google 的准镜像站快,就证明你这好评是假的。

后来我也经过证实他们确实是有料的,我用了一晚上,感觉还不错。再看看隔壁的 SearXNG,文档写得和初中生作文一样,不着重点,东一句西一句,Installation Script 看着很有用,实际上什么妖魔鬼怪都给你加上,四步走就搞定的事情非得搞出 20 步。当时(我)就在日记里写,whoogle 比 SearX/SearXNG 不知道高到哪里去了,我和它谈笑风生。后来我在写这篇文章的时候也要求自己不要夸张,因为我要让读者看到,我用完之后是这个样子,你们用完之后也会是这个样子!

搭建

官方提供了 很多种安装方式,但是像一些 serverless 或者托管平台, 一眼望过去都要求 PAID account,Replit 只要免费账号但不活跃网站就会挂, 我常用的 Vercel 还不支持,进度可以看 相关 issue, 理论上这 Flask 应用应该可以部署到 Vercel, 简单写了个测试 vercel.json 部署失败,有空再研究。

先按照手动流程来,系统为 Debian testing/unstable (注意这里我用的是 virtualenv 而不是 Python 自带的 venv):

# 安装
sudo apt install -y libcurl4-openssl-dev libssl-dev python3-virtualenv
git clone https://github.com/benbusby/whoogle-search.git
cd whoogle-search
# 创建 Python 虚拟环境并安装依赖
virtualenv venv
source ./venv/bin/activate
pip install -r requirements.txt
# 运行
./run
# 使用自定义配置运行
cp whoogle.template.env whoogle.env
vim whoogle.env
export WHOOGLE_DOTENV=1
WHOOGLE_DOTENV=1 ./run

然后(本机)访问 127.0.0.1:5000 就能看到大大的 whoogle 图标, 如果是 VPS 就再开个 terminal 然后 curl localhost:5000 查看返回结果。 如果无法访问,检查一下防火墙,我用的 ufw 只需要几行命令:

# 初始化,默认屏蔽端口
sudo ufw enable
sudo ufw default deny
# 查看当前状态
sudo ufw status

# 检查 IPv6 支持情况
$ cat /etc/default/ufw | grep -i ipv6
IPV6=yes

# 开放防火墙常用端口
sudo ufw allow https
sudo ufw allow dns
APP=(dns mosh socks ssh vnc) && for i in ${APP[@]};do sudo ufw allow $i;done
# 开放本地测试端口,测试完成后建议关闭
sudo ufw allow 5000
# 查看当前状态
sudo ufw status

然后在 Nginx 配置中加入官方给的 template,设置一下接口,重启服务即可。

http {
	# 官方 template
	server {
		listen 80;
		listen [::]:80;
		server_name your_domain_name.com;
		access_log /dev/null;
		error_log /dev/null;
	
		location / {
		    proxy_set_header X-Real-IP $remote_addr;
		    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		    proxy_set_header X-Forwarded-Proto $scheme;
		    proxy_set_header Host $host;
		    proxy_set_header X-NginX-Proxy true;
		    proxy_pass http://localhost:5000;
		}
	}
	# 其他 Nginx 配置
}

环境变量

参考 文档 自行设置即可,注意 WHOOGLE_DOTENV=1 要在系统环境变量中设置(或者运行时使用 WHOOGLE_DOTENV=1 ./run),这样才会读取 whoogle.env 中设置的其他环境变量。

默认模板文件 whoogle.template.env 中的 farside.link 是作者的另一个项目 farside,自动重定向部分网站到尊重隐私的 alternative frontend,如果需要替换成固定的 URL 记得修改。

HTTPS

因为是纯手动,就没有 Docker/Podman 或者 CI 那种自动化更新了。 老是 Let’s Encrypt 也没什么新意,而且规则变来变去需要长期关注, 这次尝试一下 Cloudflare 的 SSL 证书,有效期最长可达 15 年。 在 CF 添加 DNS 记录并点亮云朵,随后到 SSL/TLS -> Origin Server 创建证书, 然后复制内容到服务器,在 Nginx 配置中加入 SSL 相关内容,待 CF 解析完成即可。

http {
        server {
                listen 80;
                listen [::]:80;
                server_name your_domain_name.com;
                access_log /dev/null;
                error_log /dev/null;

				# SSL 相关部分
                listen 443 ssl;
                # RSA certificate
                ssl_certificate /path/to/fullchain.pem;
                ssl_certificate_key /path/to/privkey.pem;
                # Redirect non-https traffic to https
                if ($scheme != "https") {
                       return 301 https://$host$request_uri;
                }

                location / {
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-Forwarded-Proto $scheme;
                    proxy_set_header Host $host;
                    proxy_set_header X-NginX-Proxy true;
                    proxy_pass http://localhost:5000;
                }
                
        }
        # 其他 Nginx 配置
}

持久化

SystemD service、PM2、tmux 或者老古董 screen 都可以,实现方式百花齐放。 懒人如我选择 tmux:

# 创建 session 并运行
tmux new -s whoogle
export WHOOGLE_DOTENV=1
cd /path/to/whoogle-search
virtualenv venv
source ./venv/bin/activate
WHOOGLE_DOTENV=1 ./run

# detach
tmux detach

# attach
tmux ls
tmux attach -t whoogle

结语

其实比起没内涵的自建流程,更想花一下午写个两千字小作文痛斥 SearX/SearXNG, 浪费了我几年中数十小时的光阴,不要靠近 SearX,会变得不幸。 我曾经以为 Arch Linux 是最不稳定的软件 (Linux Distros I Tried 中曾提到,连续 4 次都是安装后无脑 sudo pacman -Syu 就炸了), 现在看来真是错怪它了,起码 Arch/Artix 第一次运行是正常的,不更新就不会炸, SearX 这么多年尝试下来就成功跑起来过一次(次日自爆), 与此二宝相比,年均冲突两次的 nextcloud 简直就是神仙软件,稳定性媲美 Debian。

除了 ranting, 剩下就是修改浏览器默认搜索引擎,参考 官方文档 设置即可, 最后还得说一句,不要靠近 SearX,会变得不幸。

Vinfall's Geekademy

Sine īrā et studiō