从零搭建自己的 AI 搜索服务:Docker 一键部署全流程
AI搜索 部署完整教程|一键部署
随着大语言模型(LLM)、向量数据库、RAG(检索增强生成)等技术的快速普及,越来越多的企业、团队和个人开发者开始搭建自己的 AI搜索系统。相比传统搜索,AI搜索不仅能返回关键词匹配结果,还能理解用户意图、总结网页内容、结合知识库进行回答,并给出更自然、更准确的搜索体验。
本文将以“一键部署 AI搜索服务”为目标,完整介绍从服务器准备、环境安装、项目配置、Docker 一键启动、模型接入、搜索引擎配置、常见问题排查到上线优化的全过程。无论你是个人开发者,还是希望在企业内部部署 AI搜索系统,都可以按照本文一步一步完成部署。
一、什么是 AI搜索?
AI搜索可以简单理解为:
在传统搜索引擎的基础上,结合大语言模型、向量检索、语义理解和内容总结能力,让搜索结果从“链接列表”升级为“智能答案”。
传统搜索通常依赖关键词匹配,例如用户搜索:
如何在 Linux 上部署 AI 搜索?
传统搜索引擎会返回一批网页链接,用户需要自己点击、阅读、筛选和总结。
而 AI搜索会进一步完成:
- 理解用户真正想问什么;
- 自动检索相关网页或知识库;
- 分析多个来源的内容;
- 总结出结构化答案;
- 必要时附带参考来源;
- 支持追问和上下文对话。
因此,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_URL、OPENAI_API_KEY 和 OPENAI_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
如果所有服务状态都是 running 或 Up,说明启动成功。
查看日志:
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搜索的核心能力来自大语言模型。常见接入方式有两种:
- 调用云端模型 API;
- 使用本地模型服务。
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。
后续用户提问时,系统会:
- 将问题转换为向量;
- 在 Qdrant 中查找语义相似的内容;
- 将相关内容作为上下文交给大语言模型;
- 生成最终答案。
.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. 使用更快的模型
如果追求低延迟,可以选择轻量模型,例如:
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搜索系统就部署完成了。