跳到主要内容

SearXNG

注意

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

提示

有关与 Web Search 相关的所有环境变量的完整列表(包括并发设置、结果数量等),请参考 Environment Configuration 文档

本指南介绍了如何使用 Docker 中的 SearXNG 在 Open WebUI 中设置网络搜索功能。

SearXNG (Docker)

"SearXNG 是一个免费的互联网元搜索引擎,它整合了来自各种搜索服务和数据库的结果。我们既不追踪用户,也不对用户进行画像。"

1. SearXNG 配置

为了最优化配置 SearXNG 以配合 Open WebUI 使用,请按照以下步骤操作:

步骤 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

在首次运行之后,出于安全考虑,请将 cap_drop: - ALL 添加到 docker-compose.yaml 文件中。

如果 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. 将 HTML 和 JSON 格式支持添加到 searxng-docker/searxng/settings.yml 文件中:
  • 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_WEB_SEARCH: True
      WEB_SEARCH_ENGINE: "searxng"
      WEB_SEARCH_RESULT_COUNT: 3
      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
备注

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

配置 SearXNG 以集成 Open WebUI

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

  1. 在启动大约 30 秒后停止容器,以允许生成初始配置文件:
docker compose down
  1. 导航到 ./searxng 文件夹并编辑 settings.yml 文件:
cd searxng
  1. 在您首选的文本编辑器中打开 settings.yml 文件并找到 search 部分。在 formats 列表中添加 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
注意

如果不添加 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. 图形界面配置

  1. 导航至:Admin Panel -> Settings -> Web Search
  2. 开启 Enable Web Search 选项
  3. 在下拉菜单中将 Web Search Engine 设置为 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 GUI Configuration

Troubleshooting

Web Search 遇到问题?请参考 Web Search 问题排查指南以获取各种常见问题的解决方案,包括代理配置、连接超时和内容为空等问题。

5. 在聊天中使用 Web 搜索

要访问 Web Search,点击提示词框中 + 图标旁边的 Integrations(集成)按钮。

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

Web Search UI Toggle

通过遵循上述步骤,您已成功地将 SearXNG 与 Open WebUI 进行了设置,从而能够使用 SearXNG 引擎执行 Web 搜索。

注意

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

这是按会话启用的,例如:重新加载页面或切换到另一个聊天会话时,该功能将自动关闭。

This content is for informational purposes only and does not constitute a warranty, guarantee, or contractual commitment. Open WebUI is provided "as is." See your license for applicable terms.