上一篇 下一篇 分享链接 返回 返回顶部

从零搭建私有 AI 搜索:Open WebUI + Ollama + SearXNG 完整部署指南

发布人:慈云数据-客服中心 发布时间:16小时前 阅读量:2

AI搜索 部署完整教程|附配置文件

随着大模型能力的提升,“AI 搜索”正在成为传统搜索引擎之外的重要信息入口。它不仅能像搜索引擎一样从互联网获取资料,还能将搜索结果进行总结、归纳、对比,并以自然语言给出更接近“答案”的内容。

本文将从零开始,介绍如何在自己的服务器上部署一套可用的 AI 搜索系统。方案采用:

  • Open WebUI:作为前端聊天与 AI 应用界面;
  • Ollama:本地运行大语言模型;
  • SearXNG:开源聚合搜索引擎,为 AI 提供联网搜索能力;
  • Docker Compose:统一编排服务,便于部署、升级和维护。

通过本文,你可以搭建一个类似“本地版 Perplexity / AI 搜索助手”的系统,支持本地模型问答、联网搜索、网页摘要、资料整理等能力。


一、整体架构说明

本教程部署的 AI 搜索系统主要由三部分组成:

用户浏览器
   ↓
Open WebUI 前端界面
   ↓
Ollama 本地大模型
   ↓
SearXNG 搜索服务
   ↓
互联网搜索结果

1. Open WebUI

Open WebUI 是一个非常流行的开源 AI 聊天界面,支持连接 Ollama、OpenAI API、兼容 OpenAI 的第三方模型服务等。它提供了类似 ChatGPT 的 Web 界面,同时支持用户管理、模型管理、知识库、联网搜索等功能。

2. Ollama

Ollama 用于在本地运行大语言模型,例如:

  • qwen2.5
  • llama3.1
  • mistral
  • gemma
  • deepseek-r1
  • phi

如果你的服务器没有 GPU,也可以运行较小参数量的模型,例如 qwen2.5:3bllama3.2:3b。如果有 GPU,则可以选择更大的模型。

3. SearXNG

SearXNG 是一个开源元搜索引擎,它不会自己建立索引,而是聚合多个搜索引擎的结果,例如 Google、Bing、DuckDuckGo、Wikipedia 等。AI 搜索系统可以通过 SearXNG 获取网页资料,再交给大模型总结。


二、服务器准备

1. 推荐配置

如果只是个人使用,推荐配置如下:

项目 推荐配置
CPU 2 核及以上
内存 4GB 以上,推荐 8GB
硬盘 30GB 以上
系统 Ubuntu 22.04 / Debian 12
GPU 非必须,有 NVIDIA GPU 更好

如果你计划运行 7B 以上模型,建议内存至少 16GB。如果使用 GPU 推理,还需要安装 NVIDIA 驱动和 NVIDIA Container Toolkit。


三、安装 Docker 和 Docker Compose

以下命令以 Ubuntu / Debian 为例。

1. 更新系统

sudo apt update
sudo apt upgrade -y

2. 安装基础依赖

sudo apt install -y ca-certificates curl gnupg lsb-release

3. 安装 Docker

curl -fsSL https://get.docker.com | sudo bash

4. 启动 Docker

sudo systemctl enable docker
sudo systemctl start docker

5. 验证安装

docker version
docker compose version

如果能看到 Docker 和 Compose 的版本信息,说明安装成功。


四、创建项目目录

建议将所有配置文件统一放在 /opt/ai-search 目录下。

sudo mkdir -p /opt/ai-search
cd /opt/ai-search

创建以下目录:

sudo mkdir -p open-webui
sudo mkdir -p ollama
sudo mkdir -p searxng
sudo mkdir -p searxng/settings

最终目录结构如下:

/opt/ai-search
├── docker-compose.yml
├── open-webui
├── ollama
└── searxng
    └── settings
        ├── settings.yml
        └── uwsgi.ini

五、编写 Docker Compose 配置文件

/opt/ai-search 目录下创建 docker-compose.yml

sudo nano docker-compose.yml

写入以下内容:

version: "3.9"

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ai-search-ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ./ollama:/root/.ollama
    networks:
      - ai-search-net

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ai-search-open-webui
    restart: unless-stopped
    depends_on:
      - ollama
      - searxng
    ports:
      - "3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_NAME=AI搜索助手
      - ENABLE_SIGNUP=true
      - ENABLE_WEB_SEARCH=true
      - WEB_SEARCH_ENGINE=searxng
      - SEARXNG_QUERY_URL=http://searxng:8080/search?q=&format=json
    volumes:
      - ./open-webui:/app/backend/data
    networks:
      - ai-search-net

  searxng:
    image: searxng/searxng:latest
    container_name: ai-search-searxng
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - BASE_URL=http://localhost:8080/
      - INSTANCE_NAME=AI Search SearXNG
    volumes:
      - ./searxng/settings:/etc/searxng
    networks:
      - ai-search-net

networks:
  ai-search-net:
    driver: bridge

这份配置包含三个服务:

  • ollama:本地模型服务;
  • open-webui:AI 搜索前端;
  • searxng:搜索聚合服务。

默认访问端口:

服务 地址
Open WebUI http://服务器IP:3000
Ollama API http://服务器IP:11434
SearXNG http://服务器IP:8080

如果服务器已经有其他服务占用了这些端口,可以自行修改左侧宿主机端口。例如:

ports:
  - "13000:8080"

表示通过宿主机的 13000 端口访问容器内部的 8080 服务。


六、配置 SearXNG

进入配置目录:

cd /opt/ai-search/searxng/settings

创建 settings.yml

sudo nano settings.yml

写入以下配置:

use_default_settings: true

general:
  debug: false
  instance_name: "AI Search SearXNG"
  contact_url: false
  enable_metrics: false

brand:
  new_issue_url: false
  docs_url: false
  public_instances: false
  wiki_url: false

search:
  safe_search: 0
  autocomplete: ""
  default_lang: "zh-CN"
  formats:
    - html
    - json

server:
  port: 8080
  bind_address: "0.0.0.0"
  secret_key: "请修改为一串足够复杂的随机字符串"
  base_url: false
  image_proxy: true
  limiter: false
  public_instance: false

ui:
  static_use_hash: true
  default_locale: "zh_CN"

outgoing:
  request_timeout: 5.0
  max_request_timeout: 10.0
  pool_connections: 100
  pool_maxsize: 20
  enable_http2: true

engines:
  - name: bing
    engine: bing
    shortcut: bi
    disabled: false

  - name: duckduckgo
    engine: duckduckgo
    shortcut: ddg
    disabled: false

  - name: wikipedia
    engine: wikipedia
    shortcut: wp
    disabled: false
    base_url: "https://zh.wikipedia.org/"

  - name: github
    engine: github
    shortcut: gh
    disabled: false

  - name: stackoverflow
    engine: stackoverflow
    shortcut: st
    disabled: false

注意:secret_key 一定要修改,不能直接使用示例内容。可以用下面命令生成随机字符串:

openssl rand -hex 32

然后将生成的字符串填入:

secret_key: "生成的随机字符串"

继续创建 uwsgi.ini

sudo nano uwsgi.ini

写入:

[uwsgi]
uid = searxng
gid = searxng

workers = 4
threads = 4

http = 0.0.0.0:8080

module = searx.webapp

master = true

disable-logging = true
single-interpreter = true

lazy-apps = true
enable-threads = true

chmod-socket = 666
vacuum = true

die-on-term = true

这个配置主要用于控制 SearXNG 的 Web 服务运行方式。个人使用时,workers = 4threads = 4 已经足够。如果服务器性能较弱,可以改成:

workers = 2
threads = 2

七、启动 AI 搜索服务

回到项目目录:

cd /opt/ai-search

启动服务:

sudo docker compose up -d

查看容器状态:

sudo docker compose ps

正常情况下可以看到三个容器均为 running 状态:

ai-search-ollama       running
ai-search-open-webui   running
ai-search-searxng      running

查看日志:

sudo docker compose logs -f

如果只想查看某个服务日志,例如 Open WebUI:

sudo docker compose logs -f open-webui

八、下载并运行本地模型

Ollama 容器启动后,还需要下载模型。

进入 Ollama 容器:

sudo docker exec -it ai-search-ollama bash

下载 Qwen 模型:

ollama pull qwen2.5:7b

如果服务器配置较低,可以选择更小的模型:

ollama pull qwen2.5:3b

如果你想使用 DeepSeek 推理模型,可以执行:

ollama pull deepseek-r1:7b

下载完成后测试运行:

ollama run qwen2.5:7b

输入一句话:

你好,请用中文介绍一下你自己。

如果模型可以正常回答,说明 Ollama 运行正常。

退出模型交互:

/bye

退出容器:

exit

九、访问 Open WebUI

浏览器打开:

http://服务器IP:3000

首次访问需要创建管理员账号。输入邮箱和密码注册后,第一个注册用户通常会成为管理员。

进入系统后,点击模型选择区域,正常情况下可以看到 Ollama 中已经下载的模型,例如:

qwen2.5:7b

如果看不到模型,可以检查 Open WebUI 是否正确连接 Ollama。

检查 Ollama 连接

进入 Open WebUI 管理后台,找到连接设置,确认 Ollama 地址为:

http://ollama:11434

由于 Open WebUI 和 Ollama 在同一个 Docker 网络中,因此这里应该使用容器服务名 ollama,而不是 localhost


十、开启联网搜索能力

Open WebUI 支持配置 Web Search。前面的 docker-compose.yml 已经设置了:

ENABLE_WEB_SEARCH=true
WEB_SEARCH_ENGINE=searxng
SEARXNG_QUERY_URL=http://searxng:8080/search?q=&format=json

这表示 Open WebUI 会通过 SearXNG 搜索网页结果。

你也可以在 Open WebUI 后台检查 Web Search 配置:

搜索引擎:searxng
查询地址:http://searxng:8080/search?q=&format=json

测试方式:

在聊天框中输入:

请联网搜索并总结今天人工智能领域的重要新闻,要求列出来源。

如果返回内容中包含搜索来源、网页标题或链接,说明 AI 搜索功能已经生效。


十一、配置反向代理和 HTTPS

如果只是局域网使用,可以直接通过 http://服务器IP:3000 访问。但如果要公开到互联网,建议使用 Nginx 反向代理并配置 HTTPS。

假设你的域名是:

ai.example.com

1. 安装 Nginx

sudo apt install -y nginx

2. 创建 Nginx 配置

sudo nano /etc/nginx/sites-available/ai-search.conf

写入:

server {
    listen 80;
    server_name ai.example.com;

    client_max_body_size 100M;

    location / {
        proxy_pass http://127.0.0.1:3000;

        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/ai-search.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

3. 申请 HTTPS 证书

安装 Certbot:

sudo apt install -y certbot python3-certbot-nginx

申请证书:

sudo certbot --nginx -d ai.example.com

完成后访问:

https://ai.example.com

十二、安全加固建议

如果你的 AI 搜索服务暴露在公网,务必注意安全。

1. 关闭公开注册

部署初期可以开启注册:

ENABLE_SIGNUP=true

管理员账号创建完成后,建议改成:

ENABLE_SIGNUP=false

然后重启服务:

sudo docker compose down
sudo docker compose up -d

这样可以防止陌生人注册账号使用你的资源。

2. 不要暴露 Ollama 端口

如果不需要外部访问 Ollama API,建议不要映射 11434 端口。可以将配置中的:

ports:
  - "11434:11434"

删除或注释掉。

修改后,Open WebUI 仍然可以通过 Docker 内部网络访问 Ollama:

http://ollama:11434

3. 不要公开 SearXNG 后台

同理,如果只是给 Open WebUI 使用,可以不映射 SearXNG 的 8080 端口。将:

ports:
  - "8080:8080"

删除或注释掉。

这样外部用户无法直接访问 SearXNG,只能由 Open WebUI 内部调用。

4. 配置防火墙

可以使用 UFW:

sudo apt install -y ufw
sudo ufw allow ssh
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status

如果你仍然需要直接访问 3000 端口,可以临时开放:

sudo ufw allow 3000

但正式环境更推荐只开放 80 和 443,通过 Nginx 访问。


十三、推荐的生产版 docker-compose.yml

如果你已经配置了 Nginx 反向代理,并且不希望 Ollama 和 SearXNG 暴露到公网,可以使用下面这份更安全的配置。

version: "3.9"

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ai-search-ollama
    restart: unless-stopped
    volumes:
      - ./ollama:/root/.ollama
    networks:
      - ai-search-net

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ai-search-open-webui
    restart: unless-stopped
    depends_on:
      - ollama
      - searxng
    ports:
      - "127.0.0.1:3000:8080"
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_NAME=AI搜索助手
      - ENABLE_SIGNUP=false
      - ENABLE_WEB_SEARCH=true
      - WEB_SEARCH_ENGINE=searxng
      - SEARXNG_QUERY_URL=http://searxng:8080/search?q=&format=json
    volumes:
      - ./open-webui:/app/backend/data
    networks:
      - ai-search-net

  searxng:
    image: searxng/searxng:latest
    container_name: ai-search-searxng
    restart: unless-stopped
    environment:
      - INSTANCE_NAME=AI Search SearXNG
    volumes:
      - ./searxng/settings:/etc/searxng
    networks:
      - ai-search-net

networks:
  ai-search-net:
    driver: bridge

这份配置的特点是:

  • 只允许本机访问 Open WebUI 的 3000 端口;
  • Ollama 不暴露到公网;
  • SearXNG 不暴露到公网;
  • 外部用户只能通过 Nginx HTTPS 访问。

十四、常见问题排查

1. Open WebUI 无法连接 Ollama

检查容器是否运行:

sudo docker compose ps

检查 Ollama 日志:

sudo docker compose logs -f ollama

确认 Open WebUI 环境变量:

OLLAMA_BASE_URL=http://ollama:11434

不要写成:

http://localhost:11434

因为在容器内部,localhost 指的是 Open WebUI 容器自己,而不是 Ollama 容器。


2. SearXNG 搜索没有结果

先直接测试 SearXNG:

curl "http://127.0.0.1:8080/search?q=人工智能&format=json"

如果没有返回 JSON,检查 SearXNG 日志:

sudo docker compose logs -f searxng

也可以进入容器测试网络:

sudo docker exec -it ai-search-searxng sh
ping bing.com

部分服务器所在网络可能对搜索引擎访问不稳定,可以适当调整 engines 配置,减少不可用搜索源。


3. 模型回答速度很慢

常见原因包括:

  • 服务器没有 GPU;
  • 模型参数量过大;
  • 内存不足导致频繁交换;
  • 同时请求过多;
  • 搜索结果太多,提示词上下文过长。

解决方案:

  • qwen2.5:7b 换成 qwen2.5:3b
  • 增加内存;
  • 使用 GPU;
  • 减少联网搜索结果数量;
  • 使用更快的量化模型。

4. 容器启动失败

查看详细日志:

sudo docker compose logs

如果是端口冲突,可以查看端口占用:

sudo ss -lntp

例如发现 3000 已被占用,可以将配置改成:

ports:
  - "3001:8080"

然后重启:

sudo docker compose down
sudo docker compose up -d

十五、升级与备份

1. 升级服务

进入项目目录:

cd /opt/ai-search

拉取最新镜像:

sudo docker compose pull

重启:

sudo docker compose up -d

清理旧镜像:

sudo docker image prune -f

2. 备份数据

需要备份的目录主要包括:

/opt/ai-search/open-webui
/opt/ai-search/ollama
/opt/ai-search/searxng/settings
/opt/ai-search/docker-compose.yml

可以打包:

sudo tar -czvf ai-search-backup.tar.gz /opt/ai-search

恢复时只需要解压目录并重新执行:

sudo docker compose up -d

十六、进阶优化建议

1. 使用更强的模型

如果你希望 AI 搜索总结能力更强,可以尝试:

ollama pull qwen2.5:14b
ollama pull llama3.1:8b
ollama pull deepseek-r1:14b

但模型越大,对硬件要求越高。

2. 接入第三方 API 模型

如果本地服务器性能不足,可以在 Open WebUI 中配置 OpenAI API 或兼容接口,例如:

  • OpenAI;
  • Azure OpenAI;
  • DeepSeek API;
  • Moonshot;
  • 通义千问;
  • 智谱 GLM;
  • 本地 vLLM 服务。

这样可以保留 Open WebUI 和 SearXNG 搜索能力,同时把大模型推理交给云端 API。

3. 增加知识库能力

Open WebUI 支持上传文档并建立知识库。你可以将公司文档、项目资料、技术手册上传,然后实现:

知识库问答 + 联网搜索 + 大模型总结

这种组合非常适合做个人知识助理、团队资料助手、技术支持机器人等。


十七、总结

本文介绍了一套完整的 AI 搜索部署方案,核心组件包括 Open WebUI、Ollama 和 SearXNG。通过 Docker Compose 可以快速完成部署,并且便于后续升级维护。

最终你将获得一个具备以下能力的 AI 搜索系统:

  • 支持本地大模型对话;
  • 支持联网搜索;
  • 支持搜索结果总结;
  • 支持中文问答;
  • 支持私有化部署;
  • 支持后续接入 API 模型和知识库。

如果只是个人使用,建议先使用 qwen2.5:3bqwen2.5:7b 测试整体流程;如果用于正式环境,则建议开启 HTTPS、关闭公开注册、隐藏 Ollama 和 SearXNG 端口,并定期备份数据。

至此,一套完整的 AI 搜索系统就部署完成了。

目录结构
全文