--- slug: hello-searxng summary: 闲着没事搭个搜索引擎 tags: - hello - 折腾 title: Hello,SearXNG date: 2024-08-16 description: 本文讨论如何在内地服务器上使用 1Panel 和 OpenResty 搭建开源的 SearXNG 私有搜索引擎。SearXNG 是一个元搜索引擎,不收集用户数据,并支持本地偏好设置。只需一台服务器、代理和基本配置,便可顺利部署。一些设置包括修改访问密钥、环境变量和代理配置,最终可以将其设置为默认搜索引擎。总体来说,SearXNG 速度可接受,但搜索结果有时不够精准,建议与 DuckDuckGo 搭配使用。 categories: ["逍遥游"] featuredImage: https://img.viento.cc/cover/hello-searxng-cover.webp draft: false --- 各位老友们好,我是 Chlorine。今天继续水文。 其实本期正确的标题应该是: 《如何基于 1Panel 和 OpenResty 在内地服务器上搭建开源私有化的搜索引擎》 这样或许对 SEO 好点,但是小氯对于这件事一向是摆烂(~~你对什么事情不摆烂啊喂~~),所以直接加入 hello 宇宙就好了。 ## 前言 众所周知,全球的搜索引擎巨头们都对用户隐私有着非常高的尊重,从不收集你的历史记录、搜索记录、位置、时间、联系信息、联系人、使用数据、财务信息、健康状况、诊断信息、购买项目、设备标识符、敏感信息等你不希望它们收集的东西,也不会使用你的数据去分析你的偏好或者产出内容农场。同时它们对于广告也有着非常好的管控,每一次的搜索结果都不会含有任何广告,尤其是在中国大陆拥有最大影响力的百度,确保了你良好的搜索体验。而且它们也尊重竞争对手的权利,不会对竞争对手的搜索结果 SEO 做任何的打压。这种负责任的做法获得了全球计算机爱好者和广大用户的一致好评。好的,请还在笑的老友收一收,茶都洒到衣服上了。 在隐私保护方面,可能也就是 DuckDuckGo 能做得好点。不过 DuckDuckGo 在大陆地区因为某些原因访问并不顺畅,而且这毕竟还是把数据交给第三方,肯定会有老友感觉不大舒服的。 不过没关系,小氯曾经说:开源社区是万能的。如果所有搜索引擎的巨头都做不好这一点,那么我们自托管一个开源的就好了。那么,有请今天的主角——SearXNG。 ## SearXNG 我不大清楚 SearXNG 的名字是怎么来的,可能和 SearX 有关。 [SearXNG](https://docs.searxng.org) 是一个用 Python 写的**元搜索引擎**。That is,它自己并不提供搜索引擎的职能,而是通过分析和综合各大搜索引擎的结果来进行高效的查找(当然,用我们的小服务器去爬整个互联网也是不现实的)。SearXNG 不收集任何用户数据,一切的偏好全部以 Cookie 的形式存在于本地,同时采用各种方式来避免任何在搜索过程中暴露个人信息的行为。 如果各位老友没有条件自部署,也可以去 [https://searx.space](https://searx.space) 找几个已经部署好的实例尝尝鲜。 ## 前置说明 请注意,如果您的已有条件和需求不满足下面所述,那小氯推荐您还是先别看文章了,还是先去公共空间喝杯茶更能体现对您生命的尊重。 条件: - 一台自己的服务器 - 一个能够顺利访问世界互联网的 endpoint - 一台电脑 - 手,脑子 需求: - 希望部署一个私有化的搜索引擎 - 不希望使用 SearXNG 原生的 Caddy 作为反代(本文使用 1Panel 面板和 OpenResty,其他反代服务器应该可以类推,但是这需要您自己来做) 好的,我们开始。 ## 拉取 Git 仓库 > [!TIP] > 如果您有能够可视化上传的面板的话,在本地编辑也没问题。我就是这么干的。 首先随便选个目录,比如 `/usr/local`。按理说在哪应该都无所谓,但是我推荐就在这里,防止出现什么奇奇怪怪的问题。 官方的仓库有点问题,小氯给大家准备了一个修复版的,具体改动是: - 删除了 Caddy 相关配置 - 创建了 `uwsgi.ini` 以避免 `# cp: can't create '/etc/searxng/uwsgi.ini': Permission denied` 报错(官方居然把这个文件加到 `.gitignore` 了,难绷) - 直接增加了出站代理设置 - 默认关闭 limiter 限制(个人实例一般不用,如果希望打开,修改 `settings.yml` 的 `limiter` 键为 `true`) ```bash cd /usr/local # 或者你的目录 git clone https://github.com/chlorine3545/searxng-docker-fixed.git ``` 如果访问不畅,可以使用 SSH 或者是我准备的国内镜像: ```bash cd /usr/local git clone https://gitee.com/chlorine3545/searxng-docker-fixed.git ``` 完事之后,用你喜欢的编辑器打开仓库,进行一点小小的编辑。 ### 设置访问密钥 执行命令: ```bash sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml ``` 如果出现报错就试一试: ```bash sed -i"" -e "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml ``` Windows 用户可以使用(官方的,我没试过): ```ps $randomBytes = New-Object byte[] 32 (New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($randomBytes) $secretKey = -join ($randomBytes | ForEach-Object { "{0:x2}" -f $_ }) (Get-Content searxng/settings.yml) -replace 'ultrasecretkey', $secretKey | Set-Content searxng/settings.yml ``` 然后打开 `settings.yml`,如果发现原本的 `ultrasecretkey` 变成了一串乱七八糟的字符,那么就成功了。 ### 编辑环境变量 编辑 `.env` 文件,将 `# SEARXNG_HOSTNAME=