用 Docker 一键搭建自己的 AI 搜索系统:从部署到上线践指南
AI搜索 Docker部署教程|一键部署
随着大语言模型和向量数据库技术的快速发展,越来越多企业和个人开始搭建属于自己的 AI搜索系统。相比传统关键词搜索,AI搜索能够理解用户问题的语义,通过向量检索、知识库问答、RAG(Retrieval-Augmented Generation,检索增强生成)等方式,为用户提供更准确、更自然的答案。
如果你希望快速部署一个 AI搜索服务,用于企业知识库、个人文档检索、站内搜索、客服问答、技术文档助手等场景,那么使用 Docker 一键部署 是目前最简单、最稳定、也最适合新手的方式之一。
本文将以通用 AI搜索系统为例,详细介绍如何通过 Docker 和 Docker Compose 完成一键部署,包括服务器准备、环境安装、配置文件编写、服务启动、访问测试、数据持久化、常见问题排查以及后续优化建议。
一、什么是 AI搜索?
AI搜索并不是简单地把关键词匹配出来,而是通过人工智能模型理解用户输入的真实含义,再从知识库、数据库、网页或文档中找到最相关的内容。
一个典型的 AI搜索系统通常包含以下几个核心模块:
-
前端页面
用户输入问题、查看搜索结果或 AI 回答的界面。 -
后端服务
负责接收用户请求,调用向量数据库、大模型接口,并返回最终结果。 -
向量化模型 Embedding
将文本内容转换成向量,用于语义检索。 -
向量数据库
存储文档向量,并根据相似度快速检索相关内容。 -
大语言模型 LLM
根据检索到的内容生成自然语言回答。 -
文档解析服务
用于解析 PDF、Word、Markdown、网页等资料。
通过 Docker 部署,我们可以把这些复杂组件封装起来,减少环境依赖问题,让部署过程变得更加简单。
二、为什么推荐使用 Docker 部署 AI搜索?
AI搜索系统往往涉及多个组件,例如 Web 服务、数据库、向量数据库、Redis、模型服务等。如果手动安装,会遇到许多问题,例如:
- Python、Node.js、数据库版本不兼容;
- 不同系统环境差异导致启动失败;
- 依赖包安装缓慢或冲突;
- 后期迁移服务器困难;
- 服务崩溃后不容易自动恢复;
- 多组件管理复杂。
而 Docker 的优势非常明显:
| 优势 | 说明 |
|---|---|
| 环境隔离 | 每个服务运行在独立容器中,互不影响 |
| 一键部署 | 通过 docker compose up -d 即可启动全部服务 |
| 易于迁移 | 复制配置文件和数据目录即可迁移到新服务器 |
| 方便升级 | 拉取新镜像后重启即可 |
| 支持数据持久化 | 数据可挂载到宿主机目录,避免容器删除后丢失 |
| 运维成本低 | 非常适合个人开发者和中小团队 |
因此,对于大多数 AI搜索项目来说,Docker Compose 是最佳部署方式。
三、服务器配置要求
在正式部署之前,需要准备一台 Linux 服务器。推荐使用 Ubuntu 20.04 / 22.04 或 Debian 系统。
1. 最低配置
如果只是测试或个人使用,可以选择以下配置:
CPU:2核
内存:4GB
硬盘:40GB
系统:Ubuntu 20.04+
2. 推荐配置
如果用于企业知识库或多人访问,建议使用:
CPU:4核及以上
内存:8GB 或 16GB
硬盘:100GB SSD
带宽:5Mbps+
系统:Ubuntu 22.04 LTS
3. 是否需要 GPU?
如果你使用的是第三方大模型 API,例如 OpenAI、通义千问、智谱、DeepSeek、Claude 等,一般不需要 GPU。
如果你希望本地部署大模型,例如 Qwen、Llama、DeepSeek-R1-Distill 等,则建议配置 NVIDIA GPU,并额外安装 NVIDIA Container Toolkit。
本文默认使用 API 方式调用大模型,因此不要求 GPU。
四、安装 Docker 和 Docker Compose
首先登录服务器:
ssh root@你的服务器IP
更新系统软件包:
apt update && apt upgrade -y
安装必要工具:
apt install -y curl wget git vim ca-certificates gnupg lsb-release
1. 一键安装 Docker
可以使用官方脚本安装 Docker:
curl -fsSL https://get.docker.com | bash
安装完成后查看版本:
docker -v
如果看到类似输出,说明 Docker 安装成功:
Docker version 26.x.x, build xxxxx
2. 设置 Docker 开机自启
systemctl enable docker
systemctl start docker
查看 Docker 状态:
systemctl status docker
如果显示 active (running),表示运行正常。
3. 检查 Docker Compose
新版 Docker 已内置 Compose 插件,可以执行:
docker compose version
如果输出版本号,例如:
Docker Compose version v2.x.x
说明可直接使用。
五、创建 AI搜索部署目录
建议将项目放在 /opt 目录下,方便后续维护。
mkdir -p /opt/ai-search
cd /opt/ai-search
创建常用目录:
mkdir -p data/postgres data/redis data/vector logs nginx
目录说明如下:
/opt/ai-search
├── data
│ ├── postgres # PostgreSQL 数据持久化
│ ├── redis # Redis 数据持久化
│ └── vector # 向量数据库数据
├── logs # 日志目录
├── nginx # Nginx 配置目录
├── docker-compose.yml
└── .env
这样的目录结构可以让数据库、缓存、向量数据和日志都持久化到宿主机,即使容器删除,数据也不会丢失。
六、编写环境变量配置文件
在 /opt/ai-search 目录下创建 .env 文件:
vim .env
写入以下内容:
# =========================
# 基础配置
# =========================
APP_NAME=AI Search
APP_ENV=production
APP_PORT=3000
API_PORT=8000
# =========================
# 数据库配置
# =========================
POSTGRES_DB=ai_search
POSTGRES_USER=ai_search
POSTGRES_PASSWORD=请修改为强密码
POSTGRES_PORT=5432
# =========================
# Redis 配置
# =========================
REDIS_PORT=6379
REDIS_PASSWORD=请修改为Redis强密码
# =========================
# 向量数据库配置
# =========================
VECTOR_PORT=6333
# =========================
# 大模型配置
# 示例:OpenAI / DeepSeek / 通义千问等
# =========================
LLM_PROVIDER=openai
LLM_API_KEY=请填写你的API_KEY
LLM_BASE_URL=https://api.openai.com/v1
LLM_MODEL=gpt-4o-mini
# =========================
# Embedding 模型配置
# =========================
EMBEDDING_MODEL=text-embedding-3-small
# =========================
# 安全配置
# =========================
JWT_SECRET=请修改为随机字符串
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=请修改为管理员密码
需要特别注意的是:
POSTGRES_PASSWORD必须修改为强密码;REDIS_PASSWORD必须修改;LLM_API_KEY必须填写真实可用的大模型 API Key;JWT_SECRET建议使用随机字符串;ADMIN_PASSWORD不要使用简单密码。
可以使用下面命令生成随机字符串:
openssl rand -hex 32
七、编写 Docker Compose 文件
创建 docker-compose.yml:
vim docker-compose.yml
写入以下内容:
services:
postgres:
image: postgres:16
container_name: ai-search-postgres
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "${POSTGRES_PORT}:5432"
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- ai-search-net
redis:
image: redis:7
container_name: ai-search-redis
restart: always
command: redis-server --requirepass ${REDIS_PASSWORD}
ports:
- "${REDIS_PORT}:6379"
volumes:
- ./data/redis:/data
networks:
- ai-search-net
vector:
image: qdrant/qdrant:latest
container_name: ai-search-vector
restart: always
ports:
- "${VECTOR_PORT}:6333"
volumes:
- ./data/vector:/qdrant/storage
networks:
- ai-search-net
backend:
image: your-registry/ai-search-backend:latest
container_name: ai-search-backend
restart: always
depends_on:
- postgres
- redis
- vector
environment:
APP_ENV: ${APP_ENV}
API_PORT: ${API_PORT}
DATABASE_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
REDIS_URL: redis://:${REDIS_PASSWORD}@redis:6379/0
VECTOR_URL: http://vector:6333
LLM_PROVIDER: ${LLM_PROVIDER}
LLM_API_KEY: ${LLM_API_KEY}
LLM_BASE_URL: ${LLM_BASE_URL}
LLM_MODEL: ${LLM_MODEL}
EMBEDDING_MODEL: ${EMBEDDING_MODEL}
JWT_SECRET: ${JWT_SECRET}
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
ports:
- "${API_PORT}:8000"
volumes:
- ./logs:/app/logs
networks:
- ai-search-net
frontend:
image: your-registry/ai-search-frontend:latest
container_name: ai-search-frontend
restart: always
depends_on:
- backend
environment:
API_BASE_URL: http://backend:8000
ports:
- "${APP_PORT}:3000"
networks:
- ai-search-net
networks:
ai-search-net:
driver: bridge
注意:上面
your-registry/ai-search-backend:latest和your-registry/ai-search-frontend:latest是示例镜像地址。实际部署时,需要替换为你所使用的 AI搜索项目镜像。如果你的项目已经提供官方镜像,直接替换即可。
八、一键启动 AI搜索系统
确认当前目录为:
pwd
应显示:
/opt/ai-search
然后执行:
docker compose up -d
首次启动会自动拉取镜像,时间取决于服务器网络环境。
启动完成后查看容器状态:
docker compose ps
正常情况下,应看到所有服务均为 running 或 Up 状态:
ai-search-postgres Up
ai-search-redis Up
ai-search-vector Up
ai-search-backend Up
ai-search-frontend Up
如果某个服务没有启动,可以查看日志:
docker compose logs -f backend
或者查看全部日志:
docker compose logs -f
九、初始化数据库
部分 AI搜索项目首次启动时会自动初始化数据库;如果你的项目需要手动执行迁移,可以进入后端容器:
docker exec -it ai-search-backend sh
执行数据库迁移命令,例如:
npm run migrate
或:
python manage.py migrate
具体命令取决于项目技术栈。如果官方文档提供初始化命令,以官方文档为准。
初始化完成后,重启后端服务:
docker compose restart backend
十、访问 AI搜索页面
如果服务器防火墙已经开放端口,可以直接访问:
http://你的服务器IP:3000
后端接口地址为:
http://你的服务器IP:8000
如果无法访问,请检查云服务器安全组是否开放了以下端口:
| 端口 | 用途 |
|---|---|
| 3000 | 前端页面 |
| 8000 | 后端 API |
| 5432 | PostgreSQL,不建议公网开放 |
| 6379 | Redis,不建议公网开放 |
| 6333 | Qdrant 向量数据库,不建议公网开放 |
生产环境中,数据库、Redis 和向量数据库端口不建议暴露到公网。如果只是容器内部访问,可以删除 postgres、redis、vector 中的 ports 配置,只保留内部网络访问。
十一、配置 Nginx 反向代理
为了使用域名访问 AI搜索系统,建议配置 Nginx 反向代理。
如果服务器还没有安装 Nginx,可以执行:
apt install -y nginx
创建站点配置:
vim /etc/nginx/sites-available/ai-search.conf
写入以下内容:
server {
listen 80;
server_name search.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";
}
location /api/ {
proxy_pass http://127.0.0.1:8000/;
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;
}
}
启用配置:
ln -s /etc/nginx/sites-available/ai-search.conf /etc/nginx/sites-enabled/
检查配置是否正确:
nginx -t
重载 Nginx:
systemctl reload nginx
然后访问:
http://search.example.com
即可打开 AI搜索系统。
十二、配置 HTTPS 证书
生产环境强烈建议启用 HTTPS。可以使用 Certbot 免费申请 Let’s Encrypt 证书。
安装 Certbot:
apt install -y certbot python3-certbot-nginx
申请证书:
certbot --nginx -d search.example.com
按照提示输入邮箱并确认即可。完成后,Certbot 会自动修改 Nginx 配置并开启 HTTPS。
测试自动续期:
certbot renew --dry-run
如果没有报错,表示证书自动续期正常。
十三、上传文档并构建知识库
部署完成后,进入管理后台,通常需要完成以下步骤:
- 登录管理员账号;
- 创建知识库;
- 上传文档;
- 等待系统解析文档;
- 执行文本切分;
- 调用 Embedding 模型生成向量;
- 写入向量数据库;
- 开始提问测试。
常见可上传的文档格式包括:
- PDF;
- Word;
- Markdown;
- TXT;
- HTML;
- CSV;
- Excel;
- 网页链接。
文档上传后,系统会将长文本拆分为多个片段,并生成向量存入向量数据库。当用户提问时,系统会先将问题向量化,再从向量数据库中检索相关片段,最后把这些片段和问题一起交给大模型生成回答。
这就是典型的 RAG 工作流程。
十四、常用运维命令
1. 查看服务状态
docker compose ps
2. 查看实时日志
docker compose logs -f
查看某个服务日志:
docker compose logs -f backend
3. 重启服务
docker compose restart
只重启后端:
docker compose restart backend
4. 停止服务
docker compose down
5. 启动服务
docker compose up -d
6. 更新镜像
docker compose pull
docker compose up -d
7. 查看容器资源占用
docker stats
8. 进入容器
docker exec -it ai-search-backend sh
十五、数据备份方案
AI搜索系统中最重要的数据通常包括:
- PostgreSQL 数据;
- 向量数据库数据;
- 上传的原始文档;
- 用户配置;
- 日志文件;
.env配置文件。
建议定期备份 /opt/ai-search 目录:
tar -zcvf ai-search-backup-$(date +%F).tar.gz /opt/ai-search
如果需要备份 PostgreSQL,可以执行:
docker exec -t ai-search-postgres pg_dump -U ai_search ai_search > backup.sql
恢复数据库:
cat backup.sql | docker exec -i ai-search-postgres psql -U ai_search ai_search
对于生产环境,建议结合定时任务进行自动备份:
crontab -e
添加每天凌晨 2 点自动备份:
0 2 * * * tar -zcf /backup/ai-search-$(date +\%F).tar.gz /opt/ai-search
十六、常见问题排查
1. 容器启动失败怎么办?
查看日志:
docker compose logs -f 服务名
常见原因包括:
.env配置错误;- 数据库密码不一致;
- 镜像拉取失败;
- 端口被占用;
- 服务器内存不足;
- API Key 无效。
2. 端口被占用怎么办?
查看端口占用:
ss -tunlp | grep 3000
如果端口被占用,可以修改 .env 中的端口,例如:
APP_PORT=3010
API_PORT=8010
然后重启:
docker compose up -d
3. AI 回答失败怎么办?
一般需要检查:
LLM_API_KEY是否正确;LLM_BASE_URL是否填写正确;- 当前模型是否支持;
- API 账户是否欠费;
- 服务器是否能访问模型接口;
- 后端日志中是否有报错。
可以在服务器中测试网络:
curl https://api.openai.com/v1/models
如果你使用的是兼容 OpenAI 格式的接口,需要根据服务商文档修改 LLM_BASE_URL。
4. 文档上传成功但无法检索怎么办?
可能原因包括:
- 文档解析失败;
- 文本切分失败;
- Embedding 模型调用失败;
- 向量数据库连接失败;
- 知识库未启用;
- 检索阈值设置过高。
建议查看后端日志,并检查向量数据库状态:
curl http://127.0.0.1:6333/collections
5. 服务器内存不足怎么办?
AI搜索在文档解析和向量化时可能占用较多内存。可以通过以下方式优化:
- 增加服务器内存;
- 降低并发任务数量;
- 减小文档上传大小;
- 使用异步任务队列;
- 给 Docker 设置合理内存限制;
- 将数据库和向量数据库部署到独立服务器。
十七、安全加固建议
部署完成后,不建议直接将所有端口暴露到公网。可以做以下安全优化:
-
只开放 80、443 端口
前端和 API 通过 Nginx 代理访问。 -
关闭数据库公网端口
PostgreSQL、Redis、Qdrant 只允许容器内部访问。 -
修改默认管理员密码
首次登录后立即修改。 -
保护
.env文件
该文件包含数据库密码和 API Key,不要上传到公开仓库。 -
启用 HTTPS
避免登录信息和 API 请求被明文传输。 -
限制上传文件类型和大小
防止恶意文件上传。 -
定期更新镜像
修复潜在安全漏洞。 -
配置防火墙
使用ufw开放必要端口:
ufw allow 22
ufw allow 80
ufw allow 443
ufw enable
十八、性能优化建议
如果 AI搜索系统访问量逐渐增加,可以从以下几个方面进行优化:
1. 使用更快的 Embedding 模型
Embedding 模型直接影响文档入库速度和检索效果。如果追求中文效果,可以选择中文表现更好的向量模型。
2. 调整文本切分策略
文本切分过短,容易丢失上下文;文本切分过长,会增加模型输入成本。一般建议每个片段控制在 300~800 字之间,并设置适当重叠。
3. 优化向量检索参数
可以调整 Top-K、相似度阈值、重排序策略等参数,提高召回质量。
4. 增加缓存
对高频问题进行缓存,可以减少大模型调用次数,降低成本。
5. 使用异步任务
文档解析、向量化和入库可以放到后台任务中执行,避免阻塞用户操作。
6. 拆分服务
当用户量变大后,可以将数据库、向量数据库、后端服务分别部署到不同服务器,提升整体稳定性。
十九、升级 AI搜索系统
升级前建议先备份:
tar -zcvf ai-search-before-upgrade-$(date +%F).tar.gz /opt/ai-search
然后拉取最新镜像:
docker compose pull
重新启动:
docker compose up -d
查看日志确认是否正常:
docker compose logs -f
如果升级失败,可以通过备份恢复配置和数据。
二十、总结
通过 Docker Compose 部署 AI搜索系统,可以大幅降低安装和运维难度。整个流程可以概括为:
安装 Docker
创建部署目录
配置 .env
编写 docker-compose.yml
执行 docker compose up -d
配置 Nginx 和 HTTPS
上传文档构建知识库
开始使用 AI搜索
对于个人用户来说,这种方式可以快速搭建自己的智能知识库;对于企业团队来说,也可以作为内部文档问答、客服机器人、研发知识库、产品手册检索系统的基础方案。
如果你只是测试,单机 Docker 部署已经足够;如果用于生产环境,建议重点关注数据备份、安全加固、HTTPS、权限管理和性能监控。只要配置合理,AI搜索系统可以稳定运行,并显著提升信息检索和知识管理效率。