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 7890
      sudo ufw allow 7891

 

参考


© chen_yan 2024 - 2026