Skip to main content

SearXNG

warning

本教程由社区贡献,不属于 Open WebUI 团队官方支持。它仅作为如何针对特定用例自定义 Open WebUI 的演示。想要贡献?请查看贡献教程。

tip

有关 Web 搜索相关的所有环境变量(包括并发设置、结果数量等)的完整列表,请参阅 环境配置文档

本指南提供了有关如何使用 Docker 中的 SearXNG 在 Open WebUI 中设置 Web 搜索功能的说明。

SearXNG (Docker)

"SearXNG 是一个免费的互联网元搜索引擎,它汇总了来自各种搜索服务和数据库的结果。用户既不会被跟踪,也不会被分析。"

1. SearXNG 配置

要针对 Open WebUI 优化配置 SearXNG,请按照以下步骤操作:

步骤 1: git clone SearXNG Docker 并进入该文件夹:

  1. 克隆 searxng-docker 仓库。

克隆 searxng-docker 仓库。这将创建一个名为 searxng-docker 的新目录,其中包含您的 SearXNG 配置文件。有关配置说明,请参阅 SearXNG 文档

git clone https://github.com/searxng/searxng-docker.git

进入 searxng-docker 仓库,并从那里运行所有命令:

cd searxng-docker

步骤 2: 找到并修改 .env 文件:

  1. 取消 .env 文件中 SEARXNG_HOSTNAME 的注释,并进行相应设置:
# 默认监听 https://localhost

# 要更改此设置:
# * 取消 SEARXNG_HOSTNAME 的注释,并将 <host> 替换为 SearXNG 主机名
# * 取消 LETSENCRYPT_EMAIL 的注释,并将 <email> 替换为您的电子邮件(需要创建 Let's Encrypt 证书)

SEARXNG_HOSTNAME=localhost

# LETSENCRYPT_EMAIL=<email>

# 可选:
# 如果您运行的是非常小或非常大的实例,您可能需要更改使用的 uwsgi worker 数量和每个 worker 的线程数
# 更多的 worker(= 进程)意味着可以同时处理更多的搜索请求,但也会消耗更多资源
# SEARXNG_UWSGI_WORKERS=4
# SEARXNG_UWSGI_THREADS=4

步骤 3: 修改 docker-compose.yaml 文件

  1. 通过修改 docker-compose.yaml 文件移除 localhost 限制:

如果 8080 端口已被占用,请在运行命令前将 0.0.0.0:8080 更改为 0.0.0.0:[可用端口]

运行适用于您操作系统的命令:

  • Linux
sed -i 's/127.0.0.1:8080/0.0.0.0:8080/' docker-compose.yaml
  • macOS:
sed -i '' 's/127.0.0.1:8080/0.0.0.0:8080/' docker-compose.yaml

步骤 4: 授予必要权限

  1. 通过在根目录下运行以下命令,允许容器创建新的配置文件:
sudo chmod a+rwx searxng

步骤 5: 创建无限制的 limiter.toml 文件

  1. 创建一个无限制的 searxng-docker/searxng/limiter.toml 配置文件:

如果文件已存在,请将缺少的行附加到其中。

searxng-docker/searxng/limiter.toml
# 此配置文件更新默认配置文件
# 参见 https://github.com/searxng/searxng/blob/master/searx/botdetection/limiter.toml

[botdetection.ip_limit]

# 在 ip_limit 方法中激活 link_token 方法
link_token = false

[botdetection.ip_lists]
block_ip = []
pass_ip = []

步骤 6: 移除默认的 settings.yml 文件

  1. 删除默认的 searxng-docker/searxng/settings.yml 文件(如果存在),因为它将在 SearXNG 首次启动时重新生成:
rm searxng/settings.yml

步骤 7: 创建全新的 settings.yml 文件

  1. 暂时启动容器以生成全新的 settings.yml 文件:

如果您有多个重名的容器(如 caddy、redis 或 searxng)正在运行,您需要在 docker-compose.yaml 文件中重命名它们以避免冲突。

docker compose up -d ; sleep 10 ; docker compose down

初始运行后,出于安全原因,在 docker-compose.yaml 文件中添加 cap_drop: - ALL

如果 Open WebUI 与 Searxng 运行在同一个 Docker 网络中,您可以移除 0.0.0.0 并仅指定端口映射。在这种情况下,Open WebUI 可以直接使用容器名称访问 Searxng。

docker-compose.yaml
searxng:
container_name: searxng
image: docker.io/searxng/searxng:latest
restart: unless-stopped
networks:
- searxng
ports:
- "0.0.0.0:8080:8080" # 如果容器在同一个 Docker 网络中,使用 8080:8080
volumes:
- ./searxng:/etc/searxng:rw
- searxng-data:/var/cache/searxng:rw
environment:
- SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
cap_drop:
- ALL

步骤 8: 添加格式支持

  1. searxng-docker/searxng/settings.yml 文件中添加 HTML 和 JSON 格式:
  • Linux
sed -i 's/- html/- html\n    - json/' searxng/settings.yml
  • macOS
sed -i '' 's/- html/- html\n    - json/' searxng/settings.yml

步骤 9: 运行服务器

  1. 使用以下命令启动容器:
docker compose up -d

SearXNG 将在 http://localhost:8080 (或您之前设置的端口号)可用。

2. 备选设置方法

或者,如果您不想修改默认配置,可以简单地创建一个空的 searxng-docker 文件夹并按照其余设置说明进行操作。

Docker Compose 设置

将以下环境变量添加到您的 Open WebUI docker-compose.yaml 文件中:

services:
open-webui:
environment:
ENABLE_RAG_WEB_SEARCH: True
RAG_WEB_SEARCH_ENGINE: "searxng"
RAG_WEB_SEARCH_RESULT_COUNT: 3
RAG_WEB_SEARCH_CONCURRENT_REQUESTS: 10
SEARXNG_QUERY_URL: "http://searxng:8080/search?q=<query>"

为 SearXNG 创建一个 .env 文件:

# SearXNG
SEARXNG_HOSTNAME=localhost:8080/

接下来,在 SearXNG 的 docker-compose.yaml 文件中添加以下内容:

services:
searxng:
container_name: searxng
image: searxng/searxng:latest
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
env_file:
- .env
restart: unless-stopped
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"

您的技术栈已准备就绪,可以使用以下命令启动:

docker compose up -d
note

在第一次运行时,您必须从 docker-compose.yaml 文件中移除 searxng 服务的 cap_drop: - ALL,以便成功创建 /etc/searxng/uwsgi.ini。这是必要的,因为 cap_drop: - ALL 指令会移除所有能力,包括创建 uwsgi.ini 文件所需的能力。第一次运行后,出于安全原因,您应该重新添加 cap_drop: - ALLdocker-compose.yaml 文件中。

配置 SearXNG 以集成 Open WebUI

启动容器后,您需要配置 SearXNG 以支持来自 Open WebUI 的 JSON 格式查询:

  1. 在大约 30 秒后停止容器,以便生成初始配置文件:
docker compose down
  1. 导航到 ./searxng 文件夹并编辑 settings.yml 文件:
cd searxng
  1. 在您喜欢的文本编辑器中打开 settings.yml 文件并找到 search 部分。在格式列表中添加 json
search:
safe_search: 0
autocomplete: ""
default_lang: ""
formats:
- html
- json # 添加此行以启用对 Open WebUI 的 JSON 格式支持

或者,您可以使用以下命令自动添加 JSON 支持:

sed -i '/formats:/,/]/s/html/html\n    - json/' searxng/settings.yml
  1. 保存文件并重新启动容器:
docker compose up -d
warning

如果不添加 JSON 格式支持,SearXNG 将屏蔽来自 Open WebUI 的查询,并且您将在 Open WebUI 日志中遇到 403 Client Error: Forbidden 错误。

或者,您可以直接使用 docker run 运行 SearXNG:

docker run --name searxng --env-file .env -v ./searxng:/etc/searxng:rw -p 8080:8080 --restart unless-stopped --cap-drop ALL --cap-add CHOWN --cap-add SETGID --cap-add SETUID --cap-add DAC_OVERRIDE --log-driver json-file --log-opt max-size=1m --log-opt max-file=1 searxng/searxng:latest

3. 确认连接

在命令行界面中确认您的 Open WebUI 容器实例与 SearXNG 的连接:

docker exec -it open-webui curl http://host.docker.internal:8080/search?q=this+is+a+test+query&format=json

4. 图形界面 (GUI) 配置

  1. 导航至:控制面板 -> 设置 -> Web 搜索
  2. 开启 启用 Web 搜索
  3. 从下拉菜单中将 Web 搜索引擎 设置为 searxng
  4. Searxng Query URL 设置为以下示例之一:
  • http://localhost:8080/search?q=<query>(使用主机和主机端口,适用于基于 Docker 的设置)
  • http://searxng:8080/search?q=<query>(使用容器名称和暴露的端口,适用于基于 Docker 的设置)
  • http://host.docker.internal:8080/search?q=<query>(使用 host.docker.internal DNS 名称和主机端口,适用于基于 Docker 的设置)
  • http://<searxng.local>/search?q=<query>(使用本地域名,适用于本地网络访问)
  • https://<search.domain.com>/search?q=<query>(为自托管的 SearXNG 实例使用自定义域名,适用于公共或私有访问)

请注意,/search?q=<query> 部分是强制性的。

  1. 相应调整 搜索结果数量 (Search Result Count)并发请求 (Concurrent Requests) 的值
  2. 保存更改

SearXNG 图形界面配置

5. 在聊天中使用 Web 搜索

要访问 Web 搜索,请点击 + 图标旁边的集成按钮。

在这里您可以开启/关闭 Web 搜索。

Web 搜索 UI 切换

通过遵循这些步骤,您将成功完成 SearXNG 与 Open WebUI 的设置,从而能够使用 SearXNG 引擎执行 Web 搜索。

注意

您必须在聊天中显式开启/关闭此功能。

这是基于会话启用的,例如:刷新页面、切换到另一个聊天将导致功能关闭。