跳到主要内容

SearXNG

注意

本教程为社区贡献内容,不属于 OPL 数据空间团队的官方支持范围。它主要演示如何按你的具体场景定制 OPL 数据空间。若想参与贡献,请查看贡献指南。

提示

关于 Web Search 相关环境变量的完整列表,包括并发、返回结果数量等,请参阅 环境配置文档

本指南介绍如何在 Docker 环境中使用 SearXNG,为 OPL 数据空间提供网页搜索能力。

SearXNG(Docker)

“SearXNG 是一个自由的互联网元搜索引擎,可聚合多个搜索服务与数据库结果,同时默认不追踪用户。”

1. SearXNG 配置

步骤 1:克隆 searxng-docker

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

步骤 2:修改 .env

取消注释并设置 SEARXNG_HOSTNAME

SEARXNG_HOSTNAME=localhost

如果需要,也可以调整 SEARXNG_UWSGI_WORKERSSEARXNG_UWSGI_THREADS

步骤 3:修改 docker-compose.yaml

移除对 localhost 的限制,让 OPL 数据空间容器能访问 SearXNG。

  • 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:赋权

sudo chmod a+rwx searxng

步骤 5:创建非限制型 limiter.toml

searxng/limiter.toml 中加入:

[botdetection.ip_limit]
link_token = false

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

步骤 6:删除默认 settings.yml

rm searxng/settings.yml

步骤 7:先启动一次,生成新配置

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

第一次运行后,建议在 docker-compose.yaml 中为安全起见加入:

cap_drop:
  - ALL

步骤 8:启用 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:启动服务

docker compose up -d

启动后,SearXNG 通常可通过 http://localhost:8080 访问。

2. 替代部署方式

如果你不想改默认配置,也可以只创建一个最小化的 searxng-docker 目录,然后让 OPL 数据空间通过环境变量对接。

OPL 数据空间 Docker Compose 示例

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_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

启动:

docker compose up -d
备注

首次启动时,你可能需要临时移除 cap_drop: - ALL,以便 SearXNG 正确生成 /etc/searxng/uwsgi.ini。之后请再把它加回去,以维持更好的安全性。

确保支持 JSON 查询

OPL 数据空间需要 SearXNG 支持 json 格式。请在 settings.yml 中确认:

search:
  formats:
    - html
    - json

如果没有启用 JSON, OPL 数据空间可能会在日志中报 403 Client Error: Forbidden

3. 连通性验证

可以从 OPL 数据空间容器中测试:

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

4. GUI 配置

  1. 打开:管理员面板设置Web Search
  2. 开启 Enable Web Search
  3. Web Search Engine 设为 searxng
  4. Searxng Query URL 中填入以下任一形式:
    • http://localhost:8080/search?q=<query>
    • http://searxng:8080/search?q=<query>
    • http://host.docker.internal:8080/search?q=<query>
    • http://<searxng.local>/search?q=<query>
    • https://<search.domain.com>/search?q=<query>

注意: /search?q=<query> 这一段是必须的。

  1. 按需调整 Search Result CountConcurrent Requests
  2. 保存

SearXNG GUI Configuration

Troubleshooting

如果网页搜索异常,请先查阅 Web Search Troubleshooting Guide

点击聊天输入框旁的 Integrations 按钮,即可打开 Web Search 的开关。

Web Search UI Toggle