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

从零搭建自己的 AI 搜索服务:Docker 一键部署全流程

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

AI搜索 部署完整教程|一键部署

随着大语言模型(LLM)、向量数据库、RAG(检索增强生成)等技术的快速普及,越来越多的企业、团队和个人开发者开始搭建自己的 AI搜索系统。相比传统搜索,AI搜索不仅能返回关键词匹配结果,还能理解用户意图、总结网页内容、结合知识库进行回答,并给出更自然、更准确的搜索体验。

本文将以“一键部署 AI搜索服务”为目标,完整介绍从服务器准备、环境安装、项目配置、Docker 一键启动、模型接入、搜索引擎配置、常见问题排查到上线优化的全过程。无论你是个人开发者,还是希望在企业内部部署 AI搜索系统,都可以按照本文一步一步完成部署。


一、什么是 AI搜索?

AI搜索可以简单理解为:

在传统搜索引擎的基础上,结合大语言模型、向量检索、语义理解和内容总结能力,让搜索结果从“链接列表”升级为“智能答案”。

传统搜索通常依赖关键词匹配,例如用户搜索:

如何在 Linux 上部署 AI 搜索?

传统搜索引擎会返回一批网页链接,用户需要自己点击、阅读、筛选和总结。

而 AI搜索会进一步完成:

  1. 理解用户真正想问什么;
  2. 自动检索相关网页或知识库;
  3. 分析多个来源的内容;
  4. 总结出结构化答案;
  5. 必要时附带参考来源;
  6. 支持追问和上下文对话。

因此,AI搜索非常适合以下场景:

  • 个人知识库搜索;
  • 企业内部文档问答;
  • 技术文档智能检索;
  • 网站内容智能搜索;
  • 垂直行业问答系统;
  • 学术资料检索与总结;
  • 客服机器人与售前问答;
  • 私有化搜索平台。

二、部署方案概览

本文采用 Docker Compose 的方式进行一键部署。整体架构如下:

用户浏览器
   │
   ▼
AI搜索前端页面
   │
   ▼
后端 API 服务
   │
   ├── 大语言模型 API
   ├── 搜索引擎 API
   ├── 向量数据库
   ├── 缓存服务 Redis
   └── 数据库 PostgreSQL / MySQL

常见 AI搜索系统通常由以下模块组成:

模块 作用
前端页面 用户输入问题、展示 AI 回答
后端服务 处理搜索请求、调用模型、返回结果
大语言模型 负责理解问题、生成答案
搜索引擎 提供网页检索或站内检索能力
向量数据库 存储文本向量,用于语义检索
数据库 保存用户、会话、配置等数据
Redis 缓存搜索结果、提升响应速度
Nginx 反向代理、HTTPS、域名访问

本教程将使用如下部署方式:

  • 使用 Docker 安装运行环境;
  • 使用 Docker Compose 编排多个服务;
  • 通过 .env 文件集中管理配置;
  • 一条命令完成启动;
  • 可选配置域名和 HTTPS;
  • 可选接入 OpenAI、DeepSeek、通义千问、智谱、Ollama 等模型。

三、服务器配置要求

在正式部署之前,需要准备一台服务器。推荐配置如下:

1. 最低配置

适合个人测试、学习和小规模使用:

CPU:2 核
内存:4GB
硬盘:30GB
系统:Ubuntu 20.04 / 22.04
带宽:2Mbps 以上

2. 推荐配置

适合团队内部使用或中等访问量:

CPU:4 核及以上
内存:8GB 至 16GB
硬盘:80GB SSD 以上
系统:Ubuntu 22.04 LTS
带宽:5Mbps 以上

3. 本地大模型配置

如果你希望使用 Ollama、LM Studio、vLLM 等方式运行本地模型,建议配置:

CPU:8 核及以上
内存:32GB 以上
显卡:NVIDIA GPU,显存 12GB 以上
硬盘:200GB SSD 以上

如果只是调用第三方模型 API,例如 OpenAI、DeepSeek、通义千问、智谱清言等,则普通服务器即可。


四、准备服务器环境

以下命令以 Ubuntu 22.04 为例。

1. 更新系统软件包

sudo apt update && sudo apt upgrade -y

2. 安装常用工具

sudo apt install -y curl wget git vim unzip ca-certificates gnupg lsb-release

3. 安装 Docker

如果服务器尚未安装 Docker,可以使用官方安装脚本:

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

安装完成后,查看 Docker 版本:

docker -v

如果能看到类似输出,说明安装成功:

Docker version 26.x.x, build xxxxx

4. 设置 Docker 开机自启

sudo systemctl enable docker
sudo systemctl start docker

5. 安装 Docker Compose

新版 Docker 通常已经内置 Compose 插件,可以执行:

docker compose version

如果可以正常显示版本号,即可继续下一步。

如果没有安装,可以执行:

sudo apt install -y docker-compose-plugin

五、创建 AI搜索项目目录

建议将项目放在 /opt 目录下,便于统一管理:

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

接下来创建项目所需文件:

touch docker-compose.yml
touch .env
mkdir -p data logs nginx

目录结构如下:

/opt/ai-search
├── docker-compose.yml
├── .env
├── data
├── logs
└── nginx

六、配置环境变量

编辑 .env 文件:

vim .env

写入以下内容:

# 基础配置
APP_NAME=AI Search
APP_ENV=production
APP_PORT=3000

# 数据库配置
POSTGRES_USER=ai_search
POSTGRES_PASSWORD=ChangeThisStrongPassword
POSTGRES_DB=ai_search_db
DATABASE_URL=postgresql://ai_search:ChangeThisStrongPassword@postgres:5432/ai_search_db

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

# 向量数据库配置
QDRANT_URL=http://qdrant:6333
QDRANT_COLLECTION=ai_search_collection

# 大语言模型配置
LLM_PROVIDER=openai
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini

# 如果使用 DeepSeek,可参考:
# LLM_PROVIDER=deepseek
# OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
# OPENAI_BASE_URL=https://api.deepseek.com/v1
# OPENAI_MODEL=deepseek-chat

# 搜索引擎配置
SEARCH_PROVIDER=searxng
SEARXNG_URL=http://searxng:8080

# 安全配置
JWT_SECRET=PleaseChangeThisToARandomString
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=ChangeAdminPassword

# 日志配置
LOG_LEVEL=info

这里需要重点修改以下字段:

配置项 说明
POSTGRES_PASSWORD 数据库密码,必须修改
OPENAI_API_KEY 模型服务 API Key
OPENAI_BASE_URL 模型接口地址
OPENAI_MODEL 使用的模型名称
JWT_SECRET 登录鉴权密钥
ADMIN_EMAIL 管理员邮箱
ADMIN_PASSWORD 管理员密码

如果你使用的是兼容 OpenAI API 的模型平台,只需要修改 OPENAI_BASE_URLOPENAI_API_KEYOPENAI_MODEL 即可。


七、编写 Docker Compose 文件

编辑 docker-compose.yml

vim docker-compose.yml

写入以下内容:

version: "3.9"

services:
  ai-search:
    image: yourname/ai-search:latest
    container_name: ai-search
    restart: always
    env_file:
      - .env
    ports:
      - "${APP_PORT}:3000"
    depends_on:
      - postgres
      - redis
      - qdrant
      - searxng
    volumes:
      - ./data/app:/app/data
      - ./logs:/app/logs
    networks:
      - ai-search-net

  postgres:
    image: postgres:16
    container_name: ai-search-postgres
    restart: always
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: ${POSTGRES_DB}
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    networks:
      - ai-search-net

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

  qdrant:
    image: qdrant/qdrant:latest
    container_name: ai-search-qdrant
    restart: always
    volumes:
      - ./data/qdrant:/qdrant/storage
    networks:
      - ai-search-net

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

networks:
  ai-search-net:
    driver: bridge

注意:yourname/ai-search:latest 需要替换为你实际使用的 AI搜索项目镜像。如果你使用的是某个开源项目,请按照该项目官方文档填写对应镜像名称。

如果你的 AI搜索项目提供了官方镜像,例如:

ghcr.io/example/ai-search:latest

则替换为:

image: ghcr.io/example/ai-search:latest

八、一键启动 AI搜索

配置完成后,在项目目录执行:

docker compose up -d

该命令会自动拉取镜像并启动所有服务。

查看容器状态:

docker compose ps

如果所有服务状态都是 runningUp,说明启动成功。

查看日志:

docker compose logs -f ai-search

如果看到类似信息:

Server started on port 3000
Database connected successfully
Redis connected successfully
Qdrant connected successfully

说明 AI搜索后端已经正常运行。

此时可以在浏览器访问:

http://服务器IP:3000

如果页面可以正常打开,说明部署成功。


九、初始化管理员账号

有些 AI搜索项目会在首次启动时自动创建管理员账号,账号来自 .env 中配置的:

ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=ChangeAdminPassword

如果系统没有自动创建管理员,可以进入容器执行初始化命令:

docker exec -it ai-search sh

然后根据项目提供的命令执行,例如:

npm run init-admin

或:

pnpm db:seed

如果不确定命令,可以查看项目的 README 文档。

为了安全,首次登录后建议立即修改管理员密码。


十、配置大语言模型

AI搜索的核心能力来自大语言模型。常见接入方式有两种:

  1. 调用云端模型 API;
  2. 使用本地模型服务。

1. 接入 OpenAI

.env 示例:

LLM_PROVIDER=openai
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini

2. 接入 DeepSeek

LLM_PROVIDER=deepseek
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
OPENAI_BASE_URL=https://api.deepseek.com/v1
OPENAI_MODEL=deepseek-chat

3. 接入通义千问兼容接口

如果使用阿里云百炼兼容 OpenAI API 的方式,可配置为:

LLM_PROVIDER=openai-compatible
OPENAI_API_KEY=你的API_KEY
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
OPENAI_MODEL=qwen-plus

4. 接入本地 Ollama

先在服务器安装 Ollama:

curl -fsSL https://ollama.com/install.sh | sh

拉取模型:

ollama pull qwen2.5:7b

如果 AI搜索容器需要访问宿主机 Ollama,可以将模型地址配置为:

LLM_PROVIDER=ollama
OLLAMA_BASE_URL=http://host.docker.internal:11434
OLLAMA_MODEL=qwen2.5:7b

Linux 下如果 host.docker.internal 不可用,可以在 docker-compose.yml 中添加:

extra_hosts:
  - "host.docker.internal:host-gateway"

修改配置后重启服务:

docker compose restart ai-search

十一、配置搜索引擎 SearXNG

SearXNG 是一个开源元搜索引擎,可以聚合多个搜索源。本文已经在 Docker Compose 中部署了 SearXNG。

AI搜索服务通过以下配置访问它:

SEARCH_PROVIDER=searxng
SEARXNG_URL=http://searxng:8080

如果你希望单独访问 SearXNG,可以在 docker-compose.yml 中为 searxng 暴露端口:

ports:
  - "8080:8080"

然后访问:

http://服务器IP:8080

不过在生产环境中,不建议直接公开 SearXNG 管理或搜索接口,最好只让 AI搜索后端内部调用。


十二、配置向量数据库

本文使用 Qdrant 作为向量数据库。它主要用于保存文档向量,实现语义搜索。

例如,当你上传企业文档、Markdown 文件、PDF 或网页内容时,系统会将文本切分成多个片段,然后调用 Embedding 模型转换成向量,并存入 Qdrant。

后续用户提问时,系统会:

  1. 将问题转换为向量;
  2. 在 Qdrant 中查找语义相似的内容;
  3. 将相关内容作为上下文交给大语言模型;
  4. 生成最终答案。

.env 中相关配置如下:

QDRANT_URL=http://qdrant:6333
QDRANT_COLLECTION=ai_search_collection

如果你的系统需要配置 Embedding 模型,可以增加:

EMBEDDING_PROVIDER=openai
EMBEDDING_MODEL=text-embedding-3-small

如果使用国产模型,也可以配置为兼容接口,具体取决于项目支持情况。


十三、配置域名访问

如果你只是测试,可以直接使用:

http://服务器IP:3000

但正式上线建议使用域名,例如:

https://search.example.com

1. 解析域名

在域名服务商后台添加 DNS 解析:

类型:A
主机记录:search
记录值:服务器公网 IP

等待解析生效后,可以测试:

ping search.example.com

2. 安装 Nginx

sudo apt install -y nginx

3. 创建反向代理配置

sudo vim /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

此时访问:

http://search.example.com

即可打开 AI搜索系统。


十四、配置 HTTPS 证书

推荐使用 Certbot 自动申请 Let’s Encrypt 免费证书。

1. 安装 Certbot

sudo apt install -y certbot python3-certbot-nginx

2. 申请证书

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

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

申请成功后,Certbot 会自动修改 Nginx 配置,并开启 HTTPS。

访问:

https://search.example.com

如果能正常打开,说明 HTTPS 配置完成。

3. 测试自动续期

sudo certbot renew --dry-run

证书通常有效期为 90 天,Certbot 会自动续期。


十五、常用运维命令

1. 启动服务

docker compose up -d

2. 停止服务

docker compose down

3. 重启服务

docker compose restart

4. 查看日志

docker compose logs -f

查看指定服务日志:

docker compose logs -f ai-search

5. 更新镜像

docker compose pull
docker compose up -d

6. 查看资源占用

docker stats

7. 进入容器

docker exec -it ai-search sh

十六、数据备份与恢复

AI搜索系统中比较重要的数据包括:

  • PostgreSQL 数据库;
  • Qdrant 向量数据;
  • 上传的文件;
  • 用户配置;
  • 日志和会话记录。

1. 备份 PostgreSQL

docker exec ai-search-postgres pg_dump -U ai_search ai_search_db > backup.sql

2. 恢复 PostgreSQL

cat backup.sql | docker exec -i ai-search-postgres psql -U ai_search ai_search_db

3. 备份整个数据目录

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

4. 恢复数据目录

tar -xzvf ai-search-data-backup.tar.gz -C /

建议定期将备份文件同步到对象存储或另一台服务器,例如:

rsync -avz /opt/ai-search/data user@backup-server:/backup/ai-search/

十七、性能优化建议

AI搜索系统的性能主要受以下因素影响:

  1. 模型响应速度;
  2. 搜索引擎响应速度;
  3. 向量检索速度;
  4. 数据库性能;
  5. 网络带宽;
  6. 并发请求数量。

1. 使用更快的模型

如果追求低延迟,可以选择轻量模型,例如:

gpt-4o-mini
deepseek-chat
qwen-plus
qwen-turbo

如果追求更强推理能力,可以选择更大的模型,但响应时间和成本会增加。

2. 开启缓存

对于重复搜索问题,可以使用 Redis 缓存结果。常见配置:

CACHE_ENABLED=true
CACHE_TTL=3600

表示缓存 1 小时。

3. 优化向量切分

文档切分过小,会导致上下文不完整;切分过大,会影响检索精度。建议:

chunk_size:500 到 1000 字
chunk_overlap:50 到 150 字

4. 限制最大搜索结果数

搜索结果过多会增加模型处理成本。建议配置:

SEARCH_RESULT_LIMIT=8

一般 5 到 10 条结果即可满足多数场景。

5. 使用反向代理压缩

Nginx 可开启 gzip 压缩,减少传输体积:

gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1k;

十八、安全加固建议

部署完成后,不要忽视安全问题。

1. 修改默认密码

必须修改:

ADMIN_PASSWORD
POSTGRES_PASSWORD
JWT_SECRET

不要使用:

123456
admin
password

2. 限制端口暴露

生产环境建议只开放:

80
443
22

不要将数据库、Redis、Qdrant 等端口暴露到公网。

3. 配置防火墙

Ubuntu 可以使用 UFW:

sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

查看状态:

sudo ufw status

4. 定期更新镜像

docker compose pull
docker compose up -d

5. 保护 API Key

不要将 .env 文件上传到公开 Git 仓库。可以设置权限:

chmod 600 .env

十九、常见问题排查

问题一:页面打不开

检查容器是否启动:

docker compose ps

检查端口是否监听:

sudo ss -tulnp | grep 3000

检查防火墙和云服务器安全组是否放行端口。


问题二:模型无法返回答案

检查 .env 中的 API Key、Base URL 和模型名称是否正确。

查看日志:

docker compose logs -f ai-search

常见错误包括:

401 Unauthorized

表示 API Key 错误。

404 model not found

表示模型名称错误。

timeout

表示网络连接超时或模型服务响应过慢。


问题三:搜索结果为空

检查 SearXNG 是否正常:

docker compose logs -f searxng

确认配置:

SEARXNG_URL=http://searxng:8080

如果你使用外部搜索 API,也需要确认 API Key、额度和接口地址。


问题四:向量检索不可用

检查 Qdrant 状态:

docker compose logs -f qdrant

如果数据目录权限异常,可以尝试:

sudo chown -R 1000:1000 ./data/qdrant
docker compose restart qdrant

问题五:数据库连接失败

检查 PostgreSQL 是否运行:

docker compose ps postgres

确认 .env 中的数据库连接字符串:

DATABASE_URL=postgresql://ai_search:ChangeThisStrongPassword@postgres:5432/ai_search_db

注意 Docker Compose 内部服务名应使用 postgres,而不是 localhost


二十、升级 AI搜索系统

当项目发布新版本时,可以执行:

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

如果项目涉及数据库迁移,可能还需要执行:

docker exec -it ai-search sh
npm run migrate

或:

docker exec -it ai-search sh
pnpm db:migrate

升级前建议先备份:

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

这样即使升级失败,也可以快速回滚。


二十一、部署完成后的使用建议

AI搜索部署成功后,可以从以下几个方向提升实际效果。

1. 建立高质量知识库

AI搜索效果很大程度取决于数据质量。建议上传:

  • 产品说明文档;
  • FAQ 文档;
  • 技术手册;
  • Markdown 笔记;
  • PDF 白皮书;
  • 内部流程文档;
  • API 文档;
  • 项目会议纪要。

文档内容越清晰,答案质量越高。

2. 优化提示词

可以为 AI搜索设置系统提示词,例如:

你是一个专业的 AI 搜索助手。
请优先基于检索结果回答问题。
如果检索结果不足,请明确说明不确定。
回答时保持结构清晰,必要时使用列表。
涉及事实性内容时,尽量附带来源。

这可以减少幻觉,提高答案可信度。

3. 开启来源引用

建议开启引用功能,让用户知道答案来自哪里。一个可靠的 AI搜索系统不应该只给结论,还应该告诉用户依据是什么。

4. 设置访问权限

如果是企业内部使用,应配置登录、权限分组和知识库隔离,避免敏感数据泄露。


二十二、总结

通过本文教程,我们完成了一个 AI搜索系统的完整部署流程,包括:

  • 服务器环境准备;
  • Docker 和 Docker Compose 安装;
  • 项目目录创建;
  • .env 环境变量配置;
  • PostgreSQL、Redis、Qdrant、SearXNG 部署;
  • AI搜索服务一键启动;
  • 大语言模型接入;
  • 域名和 HTTPS 配置;
  • 数据备份、升级和故障排查;
  • 安全加固与性能优化。

如果只是个人测试,使用 Docker Compose 部署通常十几分钟即可完成。如果用于企业生产环境,建议进一步完善权限管理、日志审计、备份策略、HTTPS、安全组、防火墙和监控告警。

AI搜索的价值不只是“把大模型接到搜索框上”,而是通过检索、理解、总结和引用,让用户更快获得可信答案。随着 RAG、Agent、多模态搜索和私有知识库技术的发展,AI搜索会逐渐成为网站、应用和企业知识管理系统中的基础能力。

最终,你可以用一条命令完成启动:

docker compose up -d

然后访问:

https://search.example.com

一个属于你自己的 AI搜索系统就部署完成了。

目录结构
全文