跳到主内容

SearXNG

警告

本教程是社区贡献内容,不受 Open WebUI 团队支持。它仅作为演示如何针对特定用例自定义 Open WebUI 的示例。想贡献?查看贡献教程。

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

SearXNG (Docker)

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

1. SearXNG 配置

为了优化配置 SearXNG 以与 Open WebUI 一起使用,请按照以下步骤操作

步骤 1: git clone SearXNG Docker 并导航到文件夹

  1. 创建一个新目录 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 并进行相应设置
# By default listen on https://localhost
# To change this:
# * uncomment SEARXNG_HOSTNAME, and replace <host> by the SearXNG hostname
# * uncomment LETSENCRYPT_EMAIL, and replace <email> by your email (require to create a Let's Encrypt certificate)

SEARXNG_HOSTNAME=localhost:8080/
# LETSENCRYPT_EMAIL=<email>

# Optional:
# If you run a very small or a very large instance, you might want to change the amount of used uwsgi workers and threads per worker
# More workers (= processes) means that more search requests can be handled at the same time, but it also causes more resource usage

# SEARXNG_UWSGI_WORKERS=4
# SEARXNG_UWSGI_THREADS=4

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

  1. 通过修改 docker-compose.yaml 文件来移除 localhost 限制
sed -i "s/127.0.0.1:8080/0.0.0.0:8080/"

步骤 4: 授予必要权限

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

步骤 5: 创建一个非限制性 limiter.toml 文件

  1. 创建一个非限制性 searxng-docker/searxng/limiter.toml 配置文件
searxng-docker/searxng/limiter.toml
# This configuration file updates the default configuration file
# See https://github.com/searxng/searxng/blob/master/searx/botdetection/limiter.toml

[botdetection.ip_limit]
# activate link_token method in the ip_limit method
link_token = false

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

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

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

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

注意

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

  1. 短暂启动容器以生成新的 settings.yml 文件
docker compose up -d ; sleep 10 ; docker compose down

步骤 8: 添加格式并更新端口号

  1. searxng-docker/searxng/settings.yml 文件添加 HTML 和 JSON 格式
sed -i 's/formats: \[\"html\"\/]/formats: [\"html\", \"json\"]/' searxng-docker/searxng/settings.yml

为您的 SearXNG 实例生成一个秘密密钥

sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng-docker/searxng/settings.yml

Windows 用户可以使用以下 powershell 脚本生成秘密密钥

$randomBytes = New-Object byte[] 32
(New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($randomBytes)
$secretKey = -join ($randomBytes | ForEach-Object { "{0:x2}" -f $_ })
(Get-Content searxng-docker/searxng/settings.yml) -replace 'ultrasecretkey', $secretKey | Set-Content searxng-docker/searxng/settings.yml

更新 server 部分的端口号以匹配您之前设置的端口号(在此示例中为 8080

sed -i 's/port: 8080/port: 8080/' searxng-docker/searxng/settings.yml

根据需要更改 bind_address

sed -i 's/bind_address: "0.0.0.0"/bind_address: "127.0.0.1"/' searxng-docker/searxng/settings.yml

配置文件

searxng-docker/searxng/settings.yml (摘录)

默认的 settings.yml 文件包含许多引擎设置。以下是默认 settings.yml 文件可能看起来像什么的摘录

searxng-docker/searxng/settings.yml
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true

server:
# base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
secret_key: "ultrasecretkey" # change this!
limiter: true # can be disabled for a private instance
image_proxy: true
port: 8080
bind_address: "0.0.0.0"

ui:
static_use_hash: true

search:
safe_search: 0
autocomplete: ""
default_lang: ""
formats:
- html
- json # json is required
# remove format to deny access, use lower case.
# formats: [html, csv, json, rss]
redis:
# URL to connect redis database. Is overwritten by ${SEARXNG_REDIS_URL}.
# https://docs.searxng.org/admin/settings/settings_redis.html#settings-redis
url: redis://redis:6379/0

SearXNG 的 settings.yml 文件中的端口号应与 SearXNG 在您的 docker-compose.yml 文件中的端口号一致。

步骤 9: 更新 uwsgi.ini 文件

  1. 确保您的 searxng-docker/searxng/uwsgi.ini 文件与以下内容匹配
searxng-docker/searxng/uwsgi.ini
[uwsgi]
# Who will run the code
uid = searxng
gid = searxng

# Number of workers (usually CPU count)
# default value: %k (= number of CPU core, see Dockerfile)
workers = %k

# Number of threads per worker
# default value: 4 (see Dockerfile)
threads = 4

# The right granted on the created socket
chmod-socket = 666

# Plugin to use and interpreter config
single-interpreter = true
master = true
plugin = python3
lazy-apps = true
enable-threads = 4

# Module to import
module = searx.webapp

# Virtualenv and python path
pythonpath = /usr/local/searxng/
chdir = /usr/local/searxng/searx/

# automatically set processes name to something meaningful
auto-procname = true

# Disable request logging for privacy
disable-logging = true
log-5xx = true

# Set the max size of a request (request-body excluded)
buffer-size = 8192

# No keep alive
# See https://github.com/searx/searx-docker/issues/24
add-header = Connection: close

# uwsgi serves the static files
static-map = /static=/usr/local/searxng/searx/static
# expires set to one day
static-expires = /* 86400
static-gzip-all = True
offload-threads = 4

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
注意

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

或者,您可以使用 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. 导航到: 管理面板 -> 设置 -> 网页搜索
  2. 切换 启用网页搜索 开关
  3. 从下拉菜单中将 网页搜索引擎 设置为 searxng
  4. Searxng Query URL 设置为以下示例之一
  • 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. 相应调整 搜索结果数并发请求数
  2. 保存更改

SearXNG GUI Configuration

5. 在聊天中使用网页搜索

要访问网页搜索,请点击消息输入字段旁边的 + 号。

在这里您可以切换网页搜索的开启/关闭。

Web Search UI Toggle

按照这些步骤操作,您将成功设置 SearXNG 与 Open WebUI 一起使用,从而能够使用 SearXNG 引擎执行网页搜索。

注意

您必须在聊天中明确切换此功能的开启/关闭。

此功能按会话启用,例如,重新加载页面或切换到另一个聊天会将其关闭。