382 lines
7.3 KiB
Markdown
382 lines
7.3 KiB
Markdown
|
|
# B2B Shopping AI Assistant - 生产环境部署指南
|
|||
|
|
|
|||
|
|
## 📋 目录
|
|||
|
|
|
|||
|
|
- [部署前准备](#部署前准备)
|
|||
|
|
- [快速部署](#快速部署)
|
|||
|
|
- [详细配置](#详细配置)
|
|||
|
|
- [监控与维护](#监控与维护)
|
|||
|
|
- [故障排查](#故障排查)
|
|||
|
|
- [升级策略](#升级策略)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 部署前准备
|
|||
|
|
|
|||
|
|
### 系统要求
|
|||
|
|
|
|||
|
|
- **操作系统**: Linux (推荐 Ubuntu 20.04+)
|
|||
|
|
- **Docker**: 20.10+
|
|||
|
|
- **Docker Compose**: 2.0+
|
|||
|
|
- **CPU**: 4 核心以上
|
|||
|
|
- **内存**: 8GB 以上
|
|||
|
|
- **磁盘**: 50GB 以上
|
|||
|
|
|
|||
|
|
### 网络要求
|
|||
|
|
|
|||
|
|
- **开放端口**:
|
|||
|
|
- `8000`: Agent 服务
|
|||
|
|
- `8001-8004`: MCP 服务
|
|||
|
|
- `3000-3001`: Chatwoot (如果部署在同一服务器)
|
|||
|
|
- `9090`: Prometheus (可选)
|
|||
|
|
- `3001`: Grafana (可选)
|
|||
|
|
|
|||
|
|
### 外部依赖
|
|||
|
|
|
|||
|
|
1. **Chatwoot**: 需要提前部署并配置好
|
|||
|
|
2. **Strapi CMS**: 用于 FAQ 和知识库管理
|
|||
|
|
3. **Hyperf API**: 后端业务 API
|
|||
|
|
4. **Redis**: 使用 Docker Compose 内置,或外部 Redis 实例
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚡ 快速部署
|
|||
|
|
|
|||
|
|
### 1. 准备配置文件
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 复制环境变量模板
|
|||
|
|
cp .env.production.example .env.production
|
|||
|
|
|
|||
|
|
# 编辑配置文件
|
|||
|
|
vim .env.production
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**必须配置的关键参数**:
|
|||
|
|
|
|||
|
|
```env
|
|||
|
|
# AI 模型
|
|||
|
|
ZHIPU_API_KEY=your_actual_api_key
|
|||
|
|
|
|||
|
|
# Redis 密码(必须修改)
|
|||
|
|
REDIS_PASSWORD=your_strong_password_here
|
|||
|
|
|
|||
|
|
# Chatwoot
|
|||
|
|
CHATWOOT_API_URL=https://your-chatwoot.com
|
|||
|
|
CHATWOOT_API_TOKEN=your_chatwoot_token
|
|||
|
|
CHATWOOT_WEBHOOK_SECRET=your_webhook_secret
|
|||
|
|
|
|||
|
|
# API 地址
|
|||
|
|
HYPERF_API_URL=https://api.yourdomain.com
|
|||
|
|
MALL_API_URL=https://apicn.yourdomain.com
|
|||
|
|
STRAPI_API_URL=https://cms.yourdomain.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 执行部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用部署脚本(推荐)
|
|||
|
|
./scripts/deploy-production.sh
|
|||
|
|
|
|||
|
|
# 或手动部署
|
|||
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 验证部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查服务状态
|
|||
|
|
docker-compose -f docker-compose.prod.yml ps
|
|||
|
|
|
|||
|
|
# 健康检查
|
|||
|
|
curl http://localhost:8000/health
|
|||
|
|
|
|||
|
|
# 查看日志
|
|||
|
|
docker-compose -f docker-compose.prod.yml logs -f agent
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 详细配置
|
|||
|
|
|
|||
|
|
### 生产环境与开发环境差异
|
|||
|
|
|
|||
|
|
| 配置项 | 开发环境 | 生产环境 |
|
|||
|
|
|--------|---------|---------|
|
|||
|
|
| 日志级别 | INFO | WARNING |
|
|||
|
|
| 代码挂载 | 是(支持热更新) | 否(使用镜像) |
|
|||
|
|
| 资源限制 | 无 | 有限制 |
|
|||
|
|
| 健康检查 | 基础 | 完整 |
|
|||
|
|
| 日志轮转 | 无 | 有(10MB x 3) |
|
|||
|
|
| 重启策略 | unless-stopped | always |
|
|||
|
|
| Redis 密码 | 无 | 必须 |
|
|||
|
|
|
|||
|
|
### 资源配置
|
|||
|
|
|
|||
|
|
生产环境默认资源配置(可在 `docker-compose.prod.yml` 中调整):
|
|||
|
|
|
|||
|
|
| 服务 | CPU 限制 | 内存限制 | CPU 预留 | 内存预留 |
|
|||
|
|
|------|---------|---------|---------|---------|
|
|||
|
|
| Agent | 2 核 | 2GB | 0.5 核 | 512MB |
|
|||
|
|
| MCP 服务 | 0.5 核 | 512MB | 0.25 核 | 256MB |
|
|||
|
|
|
|||
|
|
### 健康检查
|
|||
|
|
|
|||
|
|
所有服务都配置了健康检查:
|
|||
|
|
|
|||
|
|
- **Agent**: 每 30 秒检查 `/health` 端点
|
|||
|
|
- **MCP 服务**: 每 30 秒检查 `/health` 端点
|
|||
|
|
- **Redis**: 每 10 秒 ping 检查
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 监控与维护
|
|||
|
|
|
|||
|
|
### 启用监控(可选)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动 Prometheus + Grafana
|
|||
|
|
docker-compose -f docker-compose.prod.yml --profile monitoring up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
监控服务地址:
|
|||
|
|
- **Prometheus**: http://localhost:9090
|
|||
|
|
- **Grafana**: http://localhost:3001 (默认用户名/密码: admin/admin)
|
|||
|
|
|
|||
|
|
### 日志管理
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看实时日志
|
|||
|
|
docker-compose -f docker-compose.prod.yml logs -f
|
|||
|
|
|
|||
|
|
# 查看特定服务日志
|
|||
|
|
docker-compose -f docker-compose.prod.yml logs -f agent
|
|||
|
|
|
|||
|
|
# 查看最近 100 行日志
|
|||
|
|
docker-compose -f docker-compose.prod.yml logs --tail=100 agent
|
|||
|
|
|
|||
|
|
# 导出日志
|
|||
|
|
docker-compose -f docker-compose.prod.yml logs agent > agent.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
日志文件位置:
|
|||
|
|
- **Agent 日志**: `agent_logs_prod` volume
|
|||
|
|
- **日志轮转**: 每个日志文件最大 10MB,保留 3 个文件
|
|||
|
|
|
|||
|
|
### 数据备份
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 备份 Redis 数据
|
|||
|
|
docker run --rm \
|
|||
|
|
-v ai_redis_data_prod:/data \
|
|||
|
|
-v $(pwd)/backups:/backup \
|
|||
|
|
alpine tar czf /backup/redis-$(date +%Y%m%d).tar.gz /data
|
|||
|
|
|
|||
|
|
# 备份 Grafana 配置
|
|||
|
|
docker run --rm \
|
|||
|
|
-v ai_grafana_data:/data \
|
|||
|
|
-v $(pwd)/backups:/backup \
|
|||
|
|
alpine tar czf /backup/grafana-$(date +%Y%m%d).tar.gz /data
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 性能监控
|
|||
|
|
|
|||
|
|
使用 Docker 命令监控资源使用:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 查看容器资源使用情况
|
|||
|
|
docker stats
|
|||
|
|
|
|||
|
|
# 查看特定容器
|
|||
|
|
docker stats ai_agent_prod
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 故障排查
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
#### 1. 服务无法启动
|
|||
|
|
|
|||
|
|
**检查日志**:
|
|||
|
|
```bash
|
|||
|
|
docker-compose -f docker-compose.prod.yml logs agent
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**常见原因**:
|
|||
|
|
- 环境变量未配置或配置错误
|
|||
|
|
- 端口被占用
|
|||
|
|
- 依赖服务未启动
|
|||
|
|
|
|||
|
|
#### 2. API 调用失败
|
|||
|
|
|
|||
|
|
**检查步骤**:
|
|||
|
|
1. 验证 API Token 是否正确
|
|||
|
|
2. 检查网络连接
|
|||
|
|
3. 查看 API 服务状态
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 测试 API 连接
|
|||
|
|
docker exec ai_agent_prod curl https://api.yourdomain.com/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 3. Redis 连接失败
|
|||
|
|
|
|||
|
|
**检查 Redis 容器**:
|
|||
|
|
```bash
|
|||
|
|
docker exec ai_redis_prod redis-cli -a YOUR_PASSWORD ping
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 4. 内存不足
|
|||
|
|
|
|||
|
|
**解决方案**:
|
|||
|
|
- 增加 Docker 内存限制
|
|||
|
|
- 减少并发数
|
|||
|
|
- 优化模型调用
|
|||
|
|
|
|||
|
|
### 服务重启
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 重启所有服务
|
|||
|
|
docker-compose -f docker-compose.prod.yml restart
|
|||
|
|
|
|||
|
|
# 重启特定服务
|
|||
|
|
docker-compose -f docker-compose.prod.yml restart agent
|
|||
|
|
|
|||
|
|
# 强制重新创建(更新环境变量后)
|
|||
|
|
docker-compose -f docker-compose.prod.yml up -d --force-recreate agent
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 完全重置
|
|||
|
|
|
|||
|
|
⚠️ **警告**: 此操作会删除所有容器和数据卷
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 停止并删除所有容器
|
|||
|
|
docker-compose -f docker-compose.prod.yml down -v
|
|||
|
|
|
|||
|
|
# 重新部署
|
|||
|
|
./scripts/deploy-production.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔄 升级策略
|
|||
|
|
|
|||
|
|
### 滚动升级(零停机)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 拉取最新代码
|
|||
|
|
git pull origin main
|
|||
|
|
|
|||
|
|
# 2. 构建新镜像
|
|||
|
|
docker-compose -f docker-compose.prod.yml build
|
|||
|
|
|
|||
|
|
# 3. 逐个重启服务
|
|||
|
|
docker-compose -f docker-compose.prod.yml up -d --no-deps agent
|
|||
|
|
|
|||
|
|
# 4. 验证新版本
|
|||
|
|
curl http://localhost:8000/health
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 蓝绿部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 部署新版本到不同端口
|
|||
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|||
|
|
|
|||
|
|
# 2. 切换流量(修改 Nginx 配置)
|
|||
|
|
|
|||
|
|
# 3. 停止旧版本
|
|||
|
|
docker-compose -f docker-compose.prod.yml down
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 回滚
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 回滚到上一个版本
|
|||
|
|
git checkout PREVIOUS_VERSION_TAG
|
|||
|
|
|
|||
|
|
# 重新构建
|
|||
|
|
docker-compose -f docker-compose.prod.yml build
|
|||
|
|
|
|||
|
|
# 重启服务
|
|||
|
|
docker-compose -f docker-compose.prod.yml up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔐 安全建议
|
|||
|
|
|
|||
|
|
### 环境变量管理
|
|||
|
|
|
|||
|
|
1. **使用密钥管理服务**:
|
|||
|
|
- AWS Secrets Manager
|
|||
|
|
- HashiCorp Vault
|
|||
|
|
- Azure Key Vault
|
|||
|
|
|
|||
|
|
2. **文件权限**:
|
|||
|
|
```bash
|
|||
|
|
chmod 600 .env.production
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **不要提交敏感信息**:
|
|||
|
|
```bash
|
|||
|
|
# .gitignore
|
|||
|
|
.env.production
|
|||
|
|
.env
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 网络安全
|
|||
|
|
|
|||
|
|
1. **使用防火墙限制端口访问**
|
|||
|
|
2. **配置 HTTPS/TLS**
|
|||
|
|
3. **使用 VPN 或专线连接服务**
|
|||
|
|
4. **定期更新 Docker 镜像**
|
|||
|
|
|
|||
|
|
### API 安全
|
|||
|
|
|
|||
|
|
1. **定期轮换 API Token**
|
|||
|
|
2. **限制 API Token 权限**
|
|||
|
|
3. **监控异常调用**
|
|||
|
|
4. **设置速率限制**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📝 部署检查清单
|
|||
|
|
|
|||
|
|
部署前确认:
|
|||
|
|
|
|||
|
|
- [ ] 所有环境变量已配置
|
|||
|
|
- [ ] Redis 密码已设置
|
|||
|
|
- [ ] API Token 已验证
|
|||
|
|
- [ ] 端口未被占用
|
|||
|
|
- [ ] DNS 解析已配置
|
|||
|
|
- [ ] SSL 证书已安装
|
|||
|
|
- [ ] 监控已配置
|
|||
|
|
- [ ] 备份策略已制定
|
|||
|
|
- [ ] 回滚方案已准备
|
|||
|
|
|
|||
|
|
部署后验证:
|
|||
|
|
|
|||
|
|
- [ ] 所有容器正常运行
|
|||
|
|
- [ ] 健康检查通过
|
|||
|
|
- [ ] API 调用成功
|
|||
|
|
- [ ] 日志正常输出
|
|||
|
|
- [ ] 资源使用正常
|
|||
|
|
- [ ] 监控数据正常
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🆘 获取帮助
|
|||
|
|
|
|||
|
|
- **文档**: `/docs` 目录
|
|||
|
|
- **Issues**: GitHub Issues
|
|||
|
|
- **日志**: `docker-compose logs`
|
|||
|
|
- **监控**: Grafana Dashboard (如果启用)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**最后更新**: 2026-01-26
|