SearXNG
本教程是社区贡献内容,不受 Open WebUI 团队支持。它仅作为演示如何针对特定用例自定义 Open WebUI 的示例。想贡献?查看贡献教程。
本指南提供如何在 Open WebUI 中使用 Docker 中的 SearXNG 设置网页搜索功能的说明。
SearXNG (Docker)
"SearXNG 是一个免费的互联网元搜索引擎,它聚合来自各种搜索服务和数据库的结果。用户既不会被跟踪也不会被画像。"
1. SearXNG 配置
为了优化配置 SearXNG 以与 Open WebUI 一起使用,请按照以下步骤操作
步骤 1: git clone
SearXNG Docker 并导航到文件夹
- 创建一个新目录
searxng-docker
克隆 searxng-docker 仓库。此文件夹将包含您的 SearXNG 配置文件。有关配置说明,请参阅 SearXNG 文档。
git clone https://github.com/searxng/searxng-docker.git
导航到 searxng-docker
仓库
cd searxng-docker
步骤 2: 找到并修改 .env
文件
- 取消注释
.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
文件
- 通过修改
docker-compose.yaml
文件来移除localhost
限制
sed -i "s/127.0.0.1:8080/0.0.0.0:8080/"
步骤 4: 授予必要权限
- 在根目录中运行以下命令,允许容器创建新的配置文件
sudo chmod a+rwx searxng-docker/searxng
步骤 5: 创建一个非限制性 limiter.toml
文件
- 创建一个非限制性
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
文件
- 如果存在默认的
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
文件中。
- 短暂启动容器以生成新的 settings.yml 文件
docker compose up -d ; sleep 10 ; docker compose down
步骤 8: 添加格式并更新端口号
- 向
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
文件
- 确保您的
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 配置
- 导航到:
管理面板
->设置
->网页搜索
- 切换
启用网页搜索
开关 - 从下拉菜单中将
网页搜索引擎
设置为searxng
- 将
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>
部分是强制性的。
- 相应调整
搜索结果数
和并发请求数
值 - 保存更改
5. 在聊天中使用网页搜索
要访问网页搜索,请点击消息输入字段旁边的 + 号。
在这里您可以切换网页搜索的开启/关闭。
按照这些步骤操作,您将成功设置 SearXNG 与 Open WebUI 一起使用,从而能够使用 SearXNG 引擎执行网页搜索。
注意
您必须在聊天中明确切换此功能的开启/关闭。
此功能按会话启用,例如,重新加载页面或切换到另一个聊天会将其关闭。