纯手动自建 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 libffi-dev python3-virtualenv python3-pip
cd ~/projects
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,设置一下接口,创建 symlink 启用。 如果 sudo nginx -t 没有报错,重启 Nginx 服务即可。

# /etc/nginx/sites-available/whoogle
server {
	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;
	}
}

环境变量

参考 文档 自行设置即可,注意 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;
                listen 443 ssl;
                # SSL certificate
                ssl_certificate /path/to/fullchain.pem;
                ssl_certificate_key /path/to/privkey.pem;

                location / {
                    proxy_pass http://localhost:5000;
                    proxy_set_header Host $host;
                    proxy_set_header X-Forwarded-Proto $scheme;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header X-NginX-Proxy true;
                }
                
        }
        # 其他 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ō


写就 SearX 读作 Shitty X,唤乎 Whoogle 实为 Google。


发布 2023-08-09
更新 2024-11-01
全文 1764 字
签名 html asc

QR code
QR code linking to https://blog.vinfall.com/posts/2023/08/whoogle-search/
#dev #linux #nginx #python #search #selfhost #www