前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于SearXNG搭建一个私有且隐私的搜索引擎

基于SearXNG搭建一个私有且隐私的搜索引擎

原创
作者头像
猫猫摸大鱼
修改2022-07-14 17:49:05
8K1
修改2022-07-14 17:49:05
举报
文章被收录于专栏:摸鱼摸鱼

大佬们 为了这篇文章我前前后后弄了将近一周,点个关注吧,就当可怜可怜孩子了

现如今的互联网大环境下,我们的信息隐私越来越难以保障,比如使用百度的时候,总是会出现的”广告”;再比如我在百度搜索服务器,没几天某音就开始给我推“XXX云服务器优惠来袭”的广告。那么我们应该如何防止搜索引擎收集我们的个人喜好信息呢,方案之一就是 SearXNG “搜索引擎”。它是SearX搜索引擎的一个分支项目,它的信息来源于其他搜索引擎的信息汇总,(并不会返回广告内容);SearXNG 会为你的每次搜索生成随机浏览器配置文件,而且其他搜索引擎获取到的IP是你的实例IP,这就保证了其他搜索引擎无法获取到你的真实信息。


以下内容摘取自 SearXNG 官方文档 https://docs.searxng.org/

SearXNG 是一个免费的互联网元搜索引擎,它汇总了来自 70 多个搜索服务的结果。用户既不被跟踪也不被分析。

SearXNG 如何保护隐私:

无论实例的类型(私有、公共)如何,SearXNG 都以多种方式保护其用户的隐私。从搜索请求中删除私人数据有三种形式:

  1. 从前往搜索服务的请求中删除私人数据
  2. 不通过搜索服务(例如广告)转发来自第三方服务的任何内容
  3. 从转到结果页面的请求中删除私有数据

删除私人数据意味着不向外部搜索引擎发送 cookie 并为每个请求生成随机浏览器配置文件。因此,公共或私有实例是否处理请求并不重要,因为它在两种情况下都是匿名的。IP 地址将是实例的 IP。

与大多数搜索服务不同,SearXNG 不提供广告或跟踪内容。因此,私人数据不会转发给可能将其货币化的第三方。除了保护用户免受搜索服务之外,引用页面和搜索查询都对访问的结果页面隐藏。


那么接下来我们开始搭建 SearXNG 搜索引擎

1. clone配置文件

我们先为配置文件安排一个路径,官方文档里用的是 /usr/local 路径;cd 到该路径下

代码语言:javascript
复制
cd /usr/local

然后 git clone

代码语言:javascript
复制
git clone https://github.com/searxng/searxng-docker.git

这时候我们发现 /usr/local 目录下多了一个文件夹叫做 searxng-docker

进入该文件夹

代码语言:javascript
复制
cd searxng-docker

2. 修改配置文件

接下来我们修改 SearXNG 所需要的配置文件

2.1 修改 env 配置文件

代码语言:javascript
复制
nano .env

将注释删除,修改<host>为你的域名,修改<email>为你的邮箱,caddy将根据这两个配置项自动为你申请SSL证书

修改完成后按 Ctrl + X 退出,按 Y 保存修改,回车确定

2.2 修改 settings 配置文件

先生成密钥,直接执行命令

代码语言:javascript
复制
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml

然后按需修改配置文件(其实上面生成密钥就够了,这里完全可以不修改)

代码语言:javascript
复制
nano searxng/settings.yml

修改完成后按 Ctrl + X 退出,按 Y 保存修改,回车确定

2.3 修改 docker-compose 配置文件(如果使用 Nginx 反代请跳过此步)

代码语言:javascript
复制
nano docker-compose.yaml

只需要修改下图方框处的宿主机端口(当然如果你不介意使用8080端口可以不做修改)

修改完成后按 Ctrl + X 退出,按 Y 保存修改,回车确定

如果你刚刚修改了端口的话那么你也需要修改一下 caddy 配置文件 Caddyfile

代码语言:javascript
复制
nano Caddyfile

将文件最后的这个 8080 换成你刚刚修改的端口

3.使用 Nginx 反代来代替 Caddy反代(与步骤2.3二选一)

由于上面使用的是 Caddy 反代,如果你的服务器同时使用 Nginx 运行别的网站的话就会导致你要么无法运行 SearXNG 要么就得放弃那些网站,所以我们可以选择使用 Nginx 来反代 SearXNG (经过我整整一下午的痛苦踩坑+翻阅官方文档,终于成功了 TvT )

下面的步骤我用到了宝塔面板,如不愿使用宝塔面板请自行使用命令行完成下述操作

首先将 docker-compose.yaml 中关于 Caddy 的部分删除

如果有需要的话修改映射端口,然后保存

然后用宝塔添加反代配置,目标URL为 http://127.0.0.1:8080 ,如果上面修改了端口则将 8080 替换为修改的端口,提交

接下来点击配置文件

将里面的内容全部删除

替换为以下配置,如果上面修改了端口则将 8080 替换为修改的端口,保存

代码语言:javascript
复制
location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header Connection       $http_connection;
    proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_set_header X-Scheme         $scheme;
    proxy_buffering                   off;
}

Nginx 反代配置完成

4. 启动 SearXNG

4.1 安装 docker(如已安装请忽略)

直接执行一键脚本,等待安装完成

代码语言:javascript
复制
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

安装完成后启动 Docker 并设置开机自启

代码语言:javascript
复制
systemctl enable docker && systemctl start docker

4.2 安装 docker-compose(如已安装请忽略)

直接执行以下命令,等待安装完成

代码语言:javascript
复制
curl -SL "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose && sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

4.3 启动 SearXNG

先运行以下命令

代码语言:javascript
复制
sudo docker-compose up

然后访问你的域名,效果如下

我们搜索一下 腾讯云 看看效果

可以看到搜索结果已经出来了,整合了多个搜索引擎的结果并且没有广告

如果没有问题的话就可以 Ctrl + C 然后运行以下命令守护 docker 进程了

代码语言:javascript
复制
sudo docker-compose up -d

接下来就可以愉快的使用 SearXNG 了

目前已知的注意事项

1. 请尽量不要使用国内的服务器进行搭建,否则可能因为服务器无法访问国外某些服务,导致搭建失败。这种情况部分日志如下

代码语言:javascript
复制
searxng  | Traceback (most recent call last):
searxng  |   File "/usr/local/searxng/searx/search/processors/abstract.py", line 75, in initialize
searxng  |     self.engine.init(get_engine_from_settings(self.engine_name))
searxng  |   File "/usr/local/searxng/searx/engines/zlibrary.py", line 39, in init
searxng  |     resp = http_get('https://z-lib.org', timeout=5.0)
searxng  |   File "/usr/local/searxng/searx/network/__init__.py", line 111, in get
searxng  |     return request('get', url, **kwargs)
searxng  |   File "/usr/local/searxng/searx/network/__init__.py", line 88, in request
searxng  |     response = future.result(timeout)
searxng  |   File "/usr/lib/python3.10/concurrent/futures/_base.py", line 446, in result
searxng  |     return self.__get_result()
searxng  |   File "/usr/lib/python3.10/concurrent/futures/_base.py", line 391, in __get_result
searxng  |     raise self._exception
searxng  |   File "/usr/local/searxng/searx/network/network.py", line 268, in request
searxng  |     return await self.call_client(False, method, url, **kwargs)
searxng  |   File "/usr/local/searxng/searx/network/network.py", line 264, in call_client
searxng  |     raise e
searxng  |   File "/usr/local/searxng/searx/network/network.py", line 249, in call_client
searxng  |     response = await client.request(method, url, **kwargs)
searxng  |   File "/usr/lib/python3.10/site-packages/httpx/_client.py", line 1513, in request
searxng  |     return await self.send(request, auth=auth, follow_redirects=follow_redirects)
searxng  |   File "/usr/lib/python3.10/site-packages/httpx/_client.py", line 1600, in send
searxng  |     response = await self._send_handling_auth(
searxng  |   File "/usr/lib/python3.10/site-packages/httpx/_client.py", line 1628, in _send_handling_auth
searxng  |     response = await self._send_handling_redirects(
searxng  |   File "/usr/lib/python3.10/site-packages/httpx/_client.py", line 1665, in _send_handling_redirects
searxng  |     response = await self._send_single_request(request)
searxng  |   File "/usr/lib/python3.10/site-packages/httpx/_client.py", line 1702, in _send_single_request
searxng  |     response = await transport.handle_async_request(request)
searxng  |   File "/usr/lib/python3.10/site-packages/httpx/_transports/default.py", line 307, in handle_async_request
searxng  |     with map_httpcore_exceptions():
searxng  |   File "/usr/lib/python3.10/contextlib.py", line 153, in __exit__
searxng  |     self.gen.throw(typ, value, traceback)
searxng  |   File "/usr/lib/python3.10/site-packages/httpx/_transports/default.py", line 77, in map_httpcore_exceptions
searxng  |     raise mapped_exc(message) from exc
searxng  | httpx.ConnectTimeout

2. 请尽量不要在同一台服务器上反复进行搭建-重装-搭建操作,也尽量不要在 .env 文件中反复使用同样的域名和邮箱,否则可能因为 Caddy 申请 SSL 不成功导致搭建失败,在日志中体现为 Caddy 反复申请 SSL 证书但不成功。

3.待更新


腾云先锋(TDP,Tencent?Cloud?Developer?Pioneer)是腾讯云 GTS 官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧 。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 以下内容摘取自 SearXNG 官方文档 https://docs.searxng.org/
  • 1. clone配置文件
  • 2. 修改配置文件
    • 2.1 修改 env 配置文件
      • 2.2 修改 settings 配置文件
        • 2.3 修改 docker-compose 配置文件(如果使用 Nginx 反代请跳过此步)
          • 4.1 安装 docker(如已安装请忽略)
          • 4.2 安装 docker-compose(如已安装请忽略)
          • 4.3 启动 SearXNG
      • 3.使用 Nginx 反代来代替 Caddy反代(与步骤2.3二选一)
      • 4. 启动 SearXNG
      • 目前已知的注意事项
      相关产品与服务
      轻量应用服务器
      轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档


      http://www.vxiaotou.com