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

用 Docker 搭一个自己的 AI 搜索:从 SearXNG 到大模型配置全流程命令实录

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

AI搜索 Docker部署教程|附完整命令

随着大模型应用逐渐普及,传统搜索引擎已经无法完全满足“总结式搜索”“追问式搜索”“带来源引用的答案生成”等需求。所谓 AI搜索,通常是指将搜索引擎、网页抓取、向量检索、大语言模型结合起来,让用户输入问题后,系统自动检索网络内容,再由 AI 进行归纳、总结和回答,并尽可能附带引用来源。

本文将以一套较常见的开源 AI 搜索方案为例,介绍如何使用 Docker 快速部署一个可自用、可局域网访问的 AI 搜索服务。整体方案会包含:

  • AI 搜索前端与后端服务;
  • 搜索引擎服务;
  • 大模型接口配置;
  • Docker Compose 一键部署;
  • 常见问题排查;
  • 完整命令示例。

本文适合希望在服务器、NAS、云主机或本地 Linux 环境中部署 AI 搜索工具的用户阅读。


一、AI 搜索是什么?

AI 搜索并不是简单地把 ChatGPT 或其他大模型接入搜索框,而是通常包含以下几个步骤:

  1. 用户输入问题;
  2. 系统调用搜索引擎进行关键词检索;
  3. 抓取网页标题、摘要或正文内容;
  4. 将检索结果整理后发送给大语言模型;
  5. 大模型根据搜索结果生成答案;
  6. 返回带有来源引用的总结结果;
  7. 用户可以继续追问。

与普通搜索引擎相比,AI 搜索的优势是:

  • 可以直接给出结构化答案;
  • 支持上下文追问;
  • 能够减少逐个打开网页的时间;
  • 适合资料整理、技术检索、产品调研、论文初筛等场景。

但它也有局限:

  • 结果依赖搜索质量;
  • 大模型可能产生幻觉;
  • 对 API Key 或本地模型资源有要求;
  • 不适合完全替代严肃事实核查。

因此,比较合理的使用方式是:把 AI 搜索当作“信息聚合助手”,而不是绝对权威来源。


二、部署方案说明

本文采用 Docker Compose 部署方式。为了便于理解,我们可以将整个系统拆成三部分:

模块 作用
AI 搜索应用 提供网页界面、问答逻辑、结果整理
搜索服务 提供网页搜索结果,例如 SearXNG
大模型服务 OpenAI、兼容 OpenAI API 的模型,或本地 Ollama

在实际部署中,常见组合有两种:

方案一:AI 搜索应用 + SearXNG + OpenAI兼容API

这种方案适合已经拥有大模型 API Key 的用户,例如:

  • OpenAI API;
  • Azure OpenAI;
  • DeepSeek API;
  • 通义千问兼容接口;
  • 智谱 AI;
  • Moonshot;
  • OpenRouter;
  • 其他支持 OpenAI API 格式的平台。

优点是部署简单,服务器压力小。

方案二:AI 搜索应用 + SearXNG + Ollama本地模型

这种方案适合希望完全本地化部署的用户。

优点是数据更可控,不强依赖外部模型 API。缺点是对服务器性能要求更高,尤其是内存、CPU 或 GPU。

本文会重点演示 Docker Compose 部署结构,并分别给出 API 模型与 Ollama 模型的配置方法。


三、服务器环境要求

建议环境如下:

项目 建议配置
操作系统 Ubuntu 20.04 / 22.04 / 24.04,Debian 11/12,CentOS Stream 等
CPU 2 核及以上
内存 2GB 起步,推荐 4GB 以上
磁盘 至少 10GB 可用空间
Docker 20.10 以上
Docker Compose v2 版本
网络 能访问模型 API 或可拉取 Docker 镜像

如果你准备用 Ollama 本地模型,建议配置更高:

模型规模 建议内存
1B-3B 4GB-8GB
7B 8GB-16GB
14B 16GB-32GB
32B 以上 建议 GPU 或高内存服务器

四、安装 Docker 和 Docker Compose

如果你的服务器还没有安装 Docker,可以按照下面步骤操作。

以下命令以 Ubuntu / Debian 为例。

1. 更新系统软件包

sudo apt update
sudo apt upgrade -y

2. 安装基础依赖

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

3. 添加 Docker 官方 GPG Key

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

如果你使用的是 Debian,可以将上面的 ubuntu 替换为 debian

4. 添加 Docker 软件源

Ubuntu 用户执行:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Debian 用户执行:

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

5. 安装 Docker

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

6. 检查 Docker 版本

docker version
docker compose version

如果能正常输出版本号,说明安装成功。

7. 设置 Docker 开机自启

sudo systemctl enable docker
sudo systemctl start docker

8. 可选:允许当前用户直接执行 Docker

默认情况下,普通用户执行 Docker 命令可能需要 sudo。如果你希望当前用户直接使用 Docker,可以执行:

sudo usermod -aG docker $USER

执行后需要重新登录 SSH,或者执行:

newgrp docker

然后测试:

docker ps

五、创建 AI 搜索项目目录

建议将服务统一放到 /opt 目录下,方便维护。

sudo mkdir -p /opt/ai-search
sudo chown -R $USER:$USER /opt/ai-search
cd /opt/ai-search

创建必要目录:

mkdir -p searxng redis data

目录结构大致如下:

/opt/ai-search
├── docker-compose.yml
├── .env
├── searxng
├── redis
└── data

六、准备环境变量文件

在项目目录下创建 .env 文件:

nano .env

写入以下内容:

# 站点访问地址
APP_PORT=3000

# 大模型配置
OPENAI_API_KEY=你的_API_KEY
OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini

# 搜索服务地址
SEARXNG_URL=http://searxng:8080

# Redis配置
REDIS_URL=redis://redis:6379

如果你使用的是兼容 OpenAI 格式的第三方模型接口,可以修改:

OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat
OPENAI_API_KEY=你的_DeepSeek_API_KEY

或者类似:

OPENAI_API_BASE=https://openrouter.ai/api/v1
MODEL_NAME=openai/gpt-4o-mini
OPENAI_API_KEY=你的_OpenRouter_API_KEY

需要注意的是,不同 AI 搜索项目使用的环境变量名称可能略有不同。如果你的项目要求变量名为 API_KEYOPENAI_BASE_URLLLM_MODEL,需要按照对应项目文档调整。本文给出的变量名称主要用于说明通用思路。


七、编写 Docker Compose 文件

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

nano docker-compose.yml

写入以下内容:

services:
  ai-search:
    image: itzcrazykns1337/perplexica:main
    container_name: ai-search
    restart: unless-stopped
    ports:
      - "${APP_PORT}:3000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - OPENAI_API_BASE=${OPENAI_API_BASE}
      - MODEL_NAME=${MODEL_NAME}
      - SEARXNG_URL=${SEARXNG_URL}
      - REDIS_URL=${REDIS_URL}
    depends_on:
      - searxng
      - redis
    networks:
      - ai-search-net

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

  redis:
    image: redis:7-alpine
    container_name: ai-search-redis
    restart: unless-stopped
    volumes:
      - ./redis:/data
    command: redis-server --appendonly yes
    networks:
      - ai-search-net

networks:
  ai-search-net:
    driver: bridge

说明:

  • ai-search 是 AI 搜索主服务;
  • searxng 是元搜索引擎服务;
  • redis 用于缓存或临时数据存储;
  • APP_PORT=3000 表示你可以通过 http://服务器IP:3000 访问;
  • searxng8080 端口也暴露了,便于单独测试搜索是否正常。

提醒:不同开源 AI 搜索项目的镜像名称、环境变量、挂载目录可能不同。如果你使用的是其他项目,例如 Open WebUI、AnythingLLM、Morphik、SearchXNG + 自写后端等,需要按照实际项目文档调整。


八、启动服务

/opt/ai-search 目录下执行:

docker compose pull
docker compose up -d

查看容器状态:

docker compose ps

正常情况下,你应该看到类似输出:

NAME                  IMAGE                              STATUS
ai-search             itzcrazykns1337/perplexica:main    Up
ai-search-searxng     searxng/searxng:latest             Up
ai-search-redis       redis:7-alpine                     Up

查看日志:

docker compose logs -f

单独查看 AI 搜索服务日志:

docker logs -f ai-search

查看 SearXNG 日志:

docker logs -f ai-search-searxng

九、访问 AI 搜索服务

在浏览器中访问:

http://服务器IP:3000

如果是在本机部署,可以访问:

http://localhost:3000

如果你部署在云服务器上,需要确认安全组已经放行端口:

  • TCP 3000:AI 搜索页面;
  • TCP 8080:SearXNG 测试页面,可选。

如果你只希望访问 AI 搜索,不希望暴露 SearXNG,可以在 docker-compose.yml 中去掉:

ports:
  - "8080:8080"

改为只在 Docker 内部网络访问。

修改后执行:

docker compose up -d

十、测试 SearXNG 是否可用

AI 搜索能否正常回答,很大程度取决于搜索服务能否返回结果。

你可以打开:

http://服务器IP:8080

搜索一个关键词,例如:

Docker Compose 教程

如果能正常返回搜索结果,说明 SearXNG 服务正常。

也可以使用命令行测试:

curl "http://localhost:8080/search?q=Docker&format=json"

如果返回 JSON 数据,则说明搜索接口可用。


十一、使用 OpenAI 兼容模型接口

如果你使用的是 OpenAI 官方接口,.env 可以这样写:

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini

如果你使用 DeepSeek:

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat

如果你使用 OpenRouter:

OPENAI_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxx
OPENAI_API_BASE=https://openrouter.ai/api/v1
MODEL_NAME=openai/gpt-4o-mini

修改 .env 后,需要重启容器:

docker compose down
docker compose up -d

或者:

docker compose restart ai-search

十二、使用 Ollama 部署本地模型

如果你不想使用外部 API,也可以在服务器上部署 Ollama。

1. 使用 Docker 部署 Ollama

docker-compose.yml 中增加一个 ollama 服务:

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

完整示例可以改成:

services:
  ai-search:
    image: itzcrazykns1337/perplexica:main
    container_name: ai-search
    restart: unless-stopped
    ports:
      - "${APP_PORT}:3000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - OPENAI_API_BASE=${OPENAI_API_BASE}
      - MODEL_NAME=${MODEL_NAME}
      - SEARXNG_URL=${SEARXNG_URL}
      - REDIS_URL=${REDIS_URL}
    depends_on:
      - searxng
      - redis
      - ollama
    networks:
      - ai-search-net

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

  redis:
    image: redis:7-alpine
    container_name: ai-search-redis
    restart: unless-stopped
    volumes:
      - ./redis:/data
    command: redis-server --appendonly yes
    networks:
      - ai-search-net

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

networks:
  ai-search-net:
    driver: bridge

启动:

docker compose up -d

2. 拉取模型

例如拉取 Qwen2.5 7B 模型:

docker exec -it ai-search-ollama ollama pull qwen2.5:7b

或者拉取 Llama 3.1 8B:

docker exec -it ai-search-ollama ollama pull llama3.1:8b

查看已安装模型:

docker exec -it ai-search-ollama ollama list

测试模型:

docker exec -it ai-search-ollama ollama run qwen2.5:7b

输入一个问题,例如:

请用一句话介绍 Docker Compose。

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

3. 配置 AI 搜索使用 Ollama

Ollama 提供兼容 OpenAI 风格的接口,通常地址为:

http://ollama:11434/v1

修改 .env

OPENAI_API_KEY=ollama
OPENAI_API_BASE=http://ollama:11434/v1
MODEL_NAME=qwen2.5:7b
SEARXNG_URL=http://searxng:8080
REDIS_URL=redis://redis:6379
APP_PORT=3000

然后重启:

docker compose restart ai-search

如果 AI 搜索应用不支持 Ollama 的 OpenAI 兼容接口,需要到应用设置页面中选择 Ollama Provider,并填写:

Ollama Base URL: http://ollama:11434
Model: qwen2.5:7b

十三、配置反向代理和域名访问

如果你希望通过域名访问,例如:

https://search.example.com

推荐使用 Nginx 反向代理。

1. 安装 Nginx

sudo apt install -y nginx

2. 创建站点配置

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

写入:

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

    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";
    }
}

启用配置:

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 search.example.com

按照提示输入邮箱并确认即可。

证书申请完成后,访问:

https://search.example.com

十四、增加访问密码保护

如果 AI 搜索服务部署在公网,强烈建议增加访问控制。你可以通过应用自身的登录功能、Nginx Basic Auth、Cloudflare Access 或防火墙限制来源 IP 来保护服务。

下面以 Nginx Basic Auth 为例。

1. 安装 htpasswd 工具

sudo apt install -y apache2-utils

2. 创建用户名和密码

sudo htpasswd -c /etc/nginx/.ai-search.htpasswd admin

系统会提示输入密码。

3. 修改 Nginx 配置

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

location / 中加入:

auth_basic "AI Search Login";
auth_basic_user_file /etc/nginx/.ai-search.htpasswd;

完整示例:

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

    location / {
        auth_basic "AI Search Login";
        auth_basic_user_file /etc/nginx/.ai-search.htpasswd;

        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";
    }
}

检查并重载:

sudo nginx -t
sudo systemctl reload nginx

十五、常用运维命令

查看所有容器

docker ps

查看项目容器

cd /opt/ai-search
docker compose ps

启动服务

docker compose up -d

停止服务

docker compose down

重启服务

docker compose restart

重启某个容器

docker compose restart ai-search

查看实时日志

docker compose logs -f

查看最近 100 行日志

docker compose logs --tail=100

更新镜像

cd /opt/ai-search
docker compose pull
docker compose up -d

清理无用镜像

docker image prune -f

清理无用容器、网络和镜像

docker system prune -f

谨慎执行以下命令,因为它可能删除未使用的数据卷:

docker system prune -a --volumes

十六、常见问题排查

1. 页面打不开

先检查容器是否启动:

docker compose ps

查看端口是否监听:

ss -lntp | grep 3000

查看日志:

docker logs -f ai-search

如果是云服务器,检查安全组是否放行 3000 端口。


2. AI 搜索页面能打开,但搜索无结果

检查 SearXNG:

curl "http://localhost:8080/search?q=test&format=json"

如果没有返回结果,查看日志:

docker logs -f ai-search-searxng

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

docker exec -it ai-search-searxng sh

3. 模型 API 报错 401

通常是 API Key 错误。

检查 .env

cat .env

确认:

OPENAI_API_KEY=你的真实Key
OPENAI_API_BASE=正确的接口地址
MODEL_NAME=正确的模型名称

修改后重启:

docker compose restart ai-search

4. 模型 API 报错 404

通常是模型名称错误,或者接口地址不兼容。

例如 DeepSeek 常用:

OPENAI_API_BASE=https://api.deepseek.com/v1
MODEL_NAME=deepseek-chat

OpenAI 常用:

OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini

Ollama 常用:

OPENAI_API_BASE=http://ollama:11434/v1
MODEL_NAME=qwen2.5:7b

5. Ollama 模型响应很慢

可能原因包括:

  • 模型太大;
  • 服务器内存不足;
  • 没有 GPU 加速;
  • 并发请求过多;
  • 首次加载模型需要时间。

可以尝试更小模型:

docker exec -it ai-search-ollama ollama pull qwen2.5:3b

然后修改 .env

MODEL_NAME=qwen2.5:3b

重启服务:

docker compose restart ai-search

6. Docker 镜像拉取很慢

可以考虑配置 Docker 镜像加速器。创建或修改:

sudo nano /etc/docker/daemon.json

示例:

{
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}

重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

然后重新拉取:

docker compose pull

十七、备份与迁移

AI 搜索服务通常需要备份以下内容:

  • .env
  • docker-compose.yml
  • searxng 配置目录;
  • redis 数据目录;
  • data 数据目录;
  • Ollama 模型目录,如果使用本地模型。

备份命令:

cd /opt
tar -czvf ai-search-backup-$(date +%F).tar.gz ai-search

恢复时:

cd /opt
tar -xzvf ai-search-backup-2025-01-01.tar.gz
cd ai-search
docker compose up -d

如果迁移到新服务器,需要先安装 Docker 和 Docker Compose。


十八、安全建议

如果你的 AI 搜索部署在公网,建议至少做到以下几点:

  1. 不要直接暴露 Redis 端口;
  2. 不要把 SearXNG 暴露给公网,除非确实需要;
  3. 使用 HTTPS;
  4. 增加登录认证;
  5. 定期更新镜像;
  6. 不要把 .env 文件上传到公开仓库;
  7. API Key 泄露后应立即作废并重新生成;
  8. 如果使用云服务器,建议安全组只开放必要端口;
  9. 对高频访问做好限流,避免 API 费用失控。

十九、完整一键部署命令示例

下面给出一个从创建目录到启动服务的完整命令示例。你可以根据自己的 API Key 修改后执行。

sudo mkdir -p /opt/ai-search
sudo chown -R $USER:$USER /opt/ai-search
cd /opt/ai-search

mkdir -p searxng redis data

cat > .env <<'EOF'
APP_PORT=3000
OPENAI_API_KEY=请替换为你的API_KEY
OPENAI_API_BASE=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
SEARXNG_URL=http://searxng:8080
REDIS_URL=redis://redis:6379
EOF

cat > docker-compose.yml <<'EOF'
services:
  ai-search:
    image: itzcrazykns1337/perplexica:main
    container_name: ai-search
    restart: unless-stopped
    ports:
      - "${APP_PORT}:3000"
    environment:
      - OPENAI_API_KEY=${OPENAI_API_KEY}
      - OPENAI_API_BASE=${OPENAI_API_BASE}
      - MODEL_NAME=${MODEL_NAME}
      - SEARXNG_URL=${SEARXNG_URL}
      - REDIS_URL=${REDIS_URL}
    depends_on:
      - searxng
      - redis
    networks:
      - ai-search-net

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

  redis:
    image: redis:7-alpine
    container_name: ai-search-redis
    restart: unless-stopped
    volumes:
      - ./redis:/data
    command: redis-server --appendonly yes
    networks:
      - ai-search-net

networks:
  ai-search-net:
    driver: bridge
EOF

docker compose pull
docker compose up -d
docker compose ps

部署完成后访问:

http://服务器IP:3000

二十、总结

通过 Docker 部署 AI 搜索服务并不复杂,核心步骤可以概括为:

  1. 安装 Docker 和 Docker Compose;
  2. 创建项目目录;
  3. 编写 .env 环境变量;
  4. 编写 docker-compose.yml
  5. 启动 AI 搜索、SearXNG、Redis 等服务;
  6. 配置大模型 API 或本地 Ollama;
  7. 根据需要配置域名、HTTPS 和访问认证。

如果你只是个人使用,推荐使用“AI 搜索应用 + SearXNG + OpenAI兼容API”的方案,部署简单、响应速度快。如果你更重视数据本地化,可以使用 Ollama 部署本地模型,但需要准备更高性能的服务器。

AI 搜索的价值不在于完全替代传统搜索,而在于帮助我们更快地理解信息、整理结果、形成初步判断。对于技术排查、资料检索、产品调研和日常知识查询来说,自建一个 AI 搜索服务会非常实用。

目录结构
全文