引言
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
- Reverse Proxying
- Origin CA certificates
- Using Free Let’s Encrypt SSL/TLS Certificates with NGINX
- nginx: [emerg] “server” directive is not allowed here
- 使用 Cloudflare 免费证书,但使用 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,会变得不幸。