它是什么
一套跑在境外 VPS 上的私有 SearXNG 聚合搜索实例。DSH 的 web_search 原先只挂了 Bing 单源,抓 cn.bing.com;现在一次查询会 fan-out 到 google cse、bing、wikipedia 等引擎,再合并排序,中英文结果都更全、更及时,而且仍然免密钥、不消耗搜索额度。
为什么放在 VPS
SearXNG 的上游引擎在国内被墙,只能放在香港 VPS 上跑;内网那台 .223 只通过隧道取结果。整套方案没有新增任何公网端口:VPS 上容器只监听 127.0.0.1:8888,公网完全访问不到,安全组一行都不用改。
链路
DSH(.223) → 本地 127.0.0.1:8888 → systemd 常驻的 ssh -L 隧道 → VPS 回环端口 → docker 容器。隧道断了 5 秒重连,VPS 重启后容器靠 restart: unless-stopped 自动拉起。
现在
运行中。healthz 返回 200,单次搜索 1.2–2.5 秒,每次拿 20 条原始结果、工具层取前 8 条。另外还挂了一个带 Basic Auth 的公网网页版,手机浏览器可以直接收藏使用。
功能
- 把单源 Bing 换成多引擎聚合,一次查询 fan-out 后合并排序
- 容器只绑回环地址,靠 SSH 隧道对内网暴露,公网零新增端口
- systemd 常驻隧道自动重连,容器 restart 策略兜住 VPS 重启
- 自写 DSH 搜索插件,provider id 固定为 searxng,一条命令可回退 Bing
- 复用通配符证书挂出 Basic Auth 网页版,手机浏览器可用
技术栈
使用 / 部署教程
1. 在 VPS 起容器
写 /opt/searxng/docker-compose.yml,镜像 searxng/searxng:latest,端口映射 127.0.0.1:8888:8080。cap_add 保留 CHOWN、SETGID、SETUID,不要写 cap_drop: ALL,否则 entrypoint 写 settings.yml 时会 Permission denied,容器无限重启。
2. 改 settings.yml
search.formats 加上 json(不开 json 接口直接 403);server.limiter 设 false;server.secret_key 换成 32 字节随机值。locale 别写 zh-CN,那不是合法值,会每次请求 500,合法写法是 zh-Hans / zh-Hant,本项目干脆不设。
3. 打通隧道
.223 上建 searxng-tunnel.service,命令形如 ssh -NT -L 127.0.0.1:8888:127.0.0.1:8888 vps,Restart=always。验证:
curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8888/healthz,期望 200。
4. 接进 DSH
插件放 /root/dsh-plugins/dsh-searxng/,provider id 用 searxng;patch 里插入 web-search-searxng 行,并把 web.searchProvider 改成 searxng。用 link: 方式安装时,记得在插件目录里软链 @deepseek-ai/schemastery 和 @deepseek-ai/dsh-web,否则插件 import 失败。同时别让 bing 那个 bundle 还开着,两个都写 web 行会互相覆盖。
5. 可选:公网网页版
frpc 的 customDomains 白名单加一行域名 → NPM 建 443 server 块,加 Basic Auth,反代到 192.168.50.223:8888 → 隧道再加一条 -L 192.168.50.223:8888:127.0.0.1:8888。DNS 走灰云直连。注意只从 https 访问,80 端口会被 frpc 改写 Host,落到主页而不是跳转。
6. 验证与回退
curl -s 'http://127.0.0.1:8888/search?q=测试&format=json' 能出结果即通。回退 Bing:plugin_manager set_bundle @local/dsh-searxng enabled=false,再把 bing bundle 打开;网页版删掉 NPM 的 conf 后 reload 即可,DSH 搜索不受影响。
注意
- 网页版密码、
server.secret_key这类凭据不要明文写进仓库或公开文档,泄露过的口令建议轮换。 - 隧道是单点,搜索报 is the tunnel up 时先查
searxng-tunnel.service,别急着怀疑搜索引擎。 - brave、duckduckgo 在机房 IP 上长期 unresponsive 属正常现象,可在
settings.yml里按需关掉拖慢响应的引擎。