Searxng折腾记录
date
Nov 12, 2024
slug
searxng
status
Published
tags
Website
summary
AI联网搜索插件Searxng搭建记录
type
Post
网址
URL
尝试给AI bot接入联网搜索功能,基于Searxng进行集合搜索;
网上教程不多,在设置代理方面遇到很多坑,折腾一整天最后发现是linux系统下clash的allow_lan没开…
但是解决的过程中也是学到不少知识点,在此整理一下;
Searxng介绍
SearXNG 是一个免费开源的互联网元搜索引擎,它汇总了来自 Google、Bing、Yahoo等70 多个搜索服务的结果,用户既不被跟踪也不被分析。
因为是汇总了很多国外引擎的搜索结果,所以说要有科学的网络环境才能有优质的体验。
官方Demo:
GitHub地址:
Docker仓库地址:
官方文档地址:
部署
因为是作为AI BOT插件使用,部署的是bot官方推荐的阉割修改版,部署流程如下:
Linux 部署 SearXNG:
这里遇到第一个坑!
容器启动时会创建uwsgi.ini,但是会没有权限创建,导致启动过程一直restarting
可以通过查询容器的logs定位错误:
docker logs searxng解决方法:使用
chmod -R 777 searxng 修改项目文件夹的权限; 容器启动后即可以访问前端搜索页面,该项目默认是:
http://127.0.0.1:8080/此时只可以搜索国内能直连的搜索引擎,下一步开始设置代理。
代理
配置 Docker 容器使用代理的流程及注意事项
在 Docker 容器中使用主机上的代理,需要进行一系列配置,以确保容器能够正确地通过代理访问外部网络。以下是详细的配置步骤和过程中需要注意的事项,包括 Docker 网络模式对代理设置的影响。
步骤一:确保代理服务器正常运行
首先,确认您的代理服务器(例如 Clash)在主机上正常运行,并监听正确的端口。
- 检查代理服务器状态
- 启动代理服务器
如果代理未运行,请启动代理。例如,对于 Clash:
./clash -f 配置文件.yaml步骤二:修改代理配置,允许容器访问
默认情况下,代理服务器可能只监听
127.0.0.1,这意味着只能从本地主机访问。为了让 Docker 容器能够访问代理,需要修改代理配置,使其监听所有网络接口并允许 LAN 访问。- 修改 Clash 配置文件
在 Clash 的配置文件(如
config.yaml 或 glados.yaml)中,设置以下参数:- 重启代理服务器
步骤三:设置代理环境变量
方法1:在 Docker 容器中设置代理环境变量(不推荐)
在
docker-compose.yaml 文件中,为需要使用代理的服务添加环境变量,并确保容器能够访问主机的代理端口。- 获取主机的 Docker 网桥 IP
通常,Docker 网桥(
docker0)的 IP 是 172.17.0.1。可以通过以下命令确认:ip addr show docker0 | grep "inet\b"- 修改
docker-compose.yaml
注意:在 Linux 上,
host.docker.internal 默认不可用,需要使用主机的 IP 地址。方法2:配置应用程序的代理设置(推荐)
如果应用程序有自己的代理配置文件(例如 settings.yml),需要在其中指定代理。
- 修改 settings.yml
步骤五:重启 Docker 容器
在完成以上配置后,重启 Docker 容器使更改生效。
坑和注意事项
1. 容器无法访问主机的 127.0.0.1
在 Docker 的默认
bridge 网络模式下,容器的 127.0.0.1 指向容器自身,而非主机。因此,直接使用 127.0.0.1 无法访问主机的代理服务。2. host.docker.internal 在 Linux 上不可用
host.docker.internal 是 Docker 在 macOS 和 Windows 上提供的特殊主机名,用于让容器访问主机。但在 Linux 上默认不可用。解决办法:- 在
docker-compose.yaml中添加extra_hosts
- 或者直接使用主机的 IP 地址
在环境变量和配置文件中使用
172.17.0.1。3. 代理服务器只监听 127.0.0.1
需要将代理服务器的监听地址修改为
0.0.0.0,以允许来自容器的连接。4. Docker 网络模式对代理设置的影响
- Bridge 模式(默认)
- 特点:容器有独立的网络命名空间,
127.0.0.1指向容器自身。 - 影响:需要使用主机在容器网络中的 IP 地址(如
172.17.0.1)访问主机服务。
- Host 模式
- 特点:容器与主机共享网络命名空间,
127.0.0.1指向主机。 - 影响:容器可以直接访问主机的服务,但端口映射失效,可能导致端口冲突。
5. 防火墙限制
确保主机的防火墙未阻止容器访问代理端口
7890 和 7891。- 检查防火墙状态
sudo ufw status- 允许端口访问
sudo ufw allow 7890sudo ufw allow 7891

