476 lines
8.9 KiB
Markdown
476 lines
8.9 KiB
Markdown
# TSP智能助手部署升级指南
|
||
|
||
## 概述
|
||
|
||
本文档详细介绍了TSP智能助手项目的部署、升级和版本管理策略,包括多种部署方式和完整的回滚机制。
|
||
|
||
## 目录
|
||
|
||
1. [版本管理策略](#版本管理策略)
|
||
2. [部署方式](#部署方式)
|
||
3. [升级流程](#升级流程)
|
||
4. [回滚机制](#回滚机制)
|
||
5. [最佳实践](#最佳实践)
|
||
6. [故障排除](#故障排除)
|
||
|
||
## 版本管理策略
|
||
|
||
### 版本号规范
|
||
|
||
采用语义化版本控制(Semantic Versioning):
|
||
- **主版本号(Major)**:不兼容的API修改
|
||
- **次版本号(Minor)**:向下兼容的功能性新增
|
||
- **修订号(Patch)**:向下兼容的问题修正
|
||
|
||
示例:`1.2.3` → `1.2.4`(补丁版本)
|
||
|
||
### 版本管理工具
|
||
|
||
项目提供了 `version.py` 脚本进行版本管理:
|
||
|
||
```bash
|
||
# 查看当前版本
|
||
python version.py version
|
||
|
||
# 增加版本号
|
||
python version.py increment --type patch # 1.0.0 → 1.0.1
|
||
python version.py increment --type minor # 1.0.1 → 1.1.0
|
||
python version.py increment --type major # 1.1.0 → 2.0.0
|
||
|
||
# 设置部署状态
|
||
python version.py status --status production
|
||
|
||
# 添加变更日志
|
||
python version.py changelog --message "修复用户登录问题"
|
||
|
||
# 创建Git标签
|
||
python version.py tag --message "Release version 1.0.1"
|
||
```
|
||
|
||
### 版本信息存储
|
||
|
||
版本信息存储在 `version.json` 文件中:
|
||
|
||
```json
|
||
{
|
||
"version": "1.0.0",
|
||
"build_number": 1,
|
||
"release_date": "2024-01-01T00:00:00",
|
||
"git_commit": "a1b2c3d4",
|
||
"deployment_status": "production",
|
||
"changelog": [
|
||
{
|
||
"version": "1.0.0",
|
||
"date": "2024-01-01T00:00:00",
|
||
"description": "初始版本发布"
|
||
}
|
||
],
|
||
"dependencies": {
|
||
"flask": "2.0.0",
|
||
"sqlalchemy": "2.0.0"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 部署方式
|
||
|
||
### 1. 传统部署(推荐)
|
||
|
||
使用 `deploy.py` 脚本进行自动化部署:
|
||
|
||
```bash
|
||
# 部署到生产环境
|
||
python deploy.py deploy --source . --force
|
||
|
||
# 部署到测试环境
|
||
python deploy.py deploy --source . --environment staging
|
||
|
||
# 创建备份
|
||
python deploy.py backup
|
||
|
||
# 列出所有备份
|
||
python deploy.py list-backups
|
||
|
||
# 清理旧备份(保留5个)
|
||
python deploy.py cleanup --keep 5
|
||
```
|
||
|
||
### 2. Shell脚本部署
|
||
|
||
使用 `scripts/deploy.sh` 脚本:
|
||
|
||
```bash
|
||
# 部署到生产环境
|
||
./scripts/deploy.sh deploy production yourdomain.com 5000
|
||
|
||
# 部署到测试环境
|
||
./scripts/deploy.sh deploy staging staging.yourdomain.com 5001
|
||
|
||
# 部署到开发环境
|
||
./scripts/deploy.sh deploy development localhost 5000
|
||
|
||
# 回滚
|
||
./scripts/deploy.sh rollback backup_20240101_120000
|
||
```
|
||
|
||
### 3. Docker部署
|
||
|
||
#### 单容器部署
|
||
|
||
```bash
|
||
# 构建镜像
|
||
docker build -t tsp-assistant:latest .
|
||
|
||
# 运行容器
|
||
docker run -d \
|
||
--name tsp-assistant \
|
||
-p 5000:5000 \
|
||
-v $(pwd)/data:/app/data \
|
||
-v $(pwd)/logs:/app/logs \
|
||
tsp-assistant:latest
|
||
```
|
||
|
||
#### Docker Compose部署
|
||
|
||
```bash
|
||
# 启动所有服务
|
||
docker-compose up -d
|
||
|
||
# 查看服务状态
|
||
docker-compose ps
|
||
|
||
# 查看日志
|
||
docker-compose logs -f tsp-assistant
|
||
|
||
# 停止服务
|
||
docker-compose down
|
||
```
|
||
|
||
### 4. 云平台部署
|
||
|
||
#### 阿里云ECS部署
|
||
|
||
```bash
|
||
# 1. 上传代码到服务器
|
||
scp -r . user@your-server:/opt/tsp_assistant
|
||
|
||
# 2. 在服务器上执行部署
|
||
ssh user@your-server
|
||
cd /opt/tsp_assistant
|
||
python deploy.py deploy --force
|
||
```
|
||
|
||
#### Kubernetes部署
|
||
|
||
```yaml
|
||
# k8s-deployment.yaml
|
||
apiVersion: apps/v1
|
||
kind: Deployment
|
||
metadata:
|
||
name: tsp-assistant
|
||
spec:
|
||
replicas: 3
|
||
selector:
|
||
matchLabels:
|
||
app: tsp-assistant
|
||
template:
|
||
metadata:
|
||
labels:
|
||
app: tsp-assistant
|
||
spec:
|
||
containers:
|
||
- name: tsp-assistant
|
||
image: tsp-assistant:latest
|
||
ports:
|
||
- containerPort: 5000
|
||
env:
|
||
- name: DATABASE_URL
|
||
value: "mysql+pymysql://user:pass@mysql-service/tsp_assistant"
|
||
```
|
||
|
||
## 升级流程
|
||
|
||
### 1. 准备升级
|
||
|
||
```bash
|
||
# 1. 确保代码已提交
|
||
git add .
|
||
git commit -m "准备升级到版本 1.0.1"
|
||
|
||
# 2. 创建发布分支
|
||
git checkout -b release-1.0.1
|
||
|
||
# 3. 更新版本号
|
||
python version.py increment --type patch
|
||
|
||
# 4. 添加变更日志
|
||
python version.py changelog --message "修复用户登录问题,优化性能"
|
||
|
||
# 5. 创建Git标签
|
||
python version.py tag --message "Release version 1.0.1"
|
||
```
|
||
|
||
### 2. 测试环境验证
|
||
|
||
```bash
|
||
# 1. 部署到测试环境
|
||
python deploy.py deploy --environment staging
|
||
|
||
# 2. 运行测试
|
||
python -m pytest tests/
|
||
|
||
# 3. 手动测试功能
|
||
curl http://staging.yourdomain.com/api/health
|
||
```
|
||
|
||
### 3. 生产环境升级
|
||
|
||
```bash
|
||
# 1. 创建备份
|
||
python deploy.py backup
|
||
|
||
# 2. 部署新版本
|
||
python deploy.py deploy --force
|
||
|
||
# 3. 验证部署
|
||
curl http://yourdomain.com/api/health
|
||
|
||
# 4. 监控系统状态
|
||
tail -f logs/tsp_assistant.log
|
||
```
|
||
|
||
### 4. 升级后验证
|
||
|
||
```bash
|
||
# 1. 健康检查
|
||
curl http://yourdomain.com/api/health
|
||
|
||
# 2. 功能测试
|
||
# - 用户登录
|
||
# - 工单创建
|
||
# - 知识库搜索
|
||
# - 数据分析
|
||
|
||
# 3. 性能监控
|
||
# - 响应时间
|
||
# - 内存使用
|
||
# - CPU使用率
|
||
```
|
||
|
||
## 回滚机制
|
||
|
||
### 1. 自动回滚
|
||
|
||
如果部署后健康检查失败,系统会自动回滚:
|
||
|
||
```bash
|
||
# 部署脚本会自动检测健康状态
|
||
python deploy.py deploy --force
|
||
# 如果健康检查失败,会自动回滚到上一个备份
|
||
```
|
||
|
||
### 2. 手动回滚
|
||
|
||
```bash
|
||
# 1. 列出可用备份
|
||
python deploy.py list-backups
|
||
|
||
# 2. 回滚到指定备份
|
||
python deploy.py rollback --backup backup_20240101_120000
|
||
|
||
# 3. 验证回滚结果
|
||
curl http://yourdomain.com/api/health
|
||
```
|
||
|
||
### 3. 数据库回滚
|
||
|
||
```bash
|
||
# 1. 停止服务
|
||
sudo systemctl stop tsp_assistant
|
||
|
||
# 2. 恢复数据库
|
||
cp backups/backup_20240101_120000/database/tsp_assistant.db ./
|
||
|
||
# 3. 重启服务
|
||
sudo systemctl start tsp_assistant
|
||
```
|
||
|
||
### 4. Docker回滚
|
||
|
||
```bash
|
||
# 1. 停止当前容器
|
||
docker stop tsp-assistant
|
||
|
||
# 2. 启动旧版本容器
|
||
docker run -d \
|
||
--name tsp-assistant-old \
|
||
-p 5000:5000 \
|
||
tsp-assistant:v1.0.0
|
||
|
||
# 3. 验证回滚
|
||
curl http://localhost:5000/api/health
|
||
```
|
||
|
||
## 最佳实践
|
||
|
||
### 1. 部署前检查
|
||
|
||
- [ ] 代码已提交到版本控制
|
||
- [ ] 所有测试通过
|
||
- [ ] 数据库迁移脚本准备就绪
|
||
- [ ] 配置文件已更新
|
||
- [ ] 依赖包版本已锁定
|
||
|
||
### 2. 部署策略
|
||
|
||
- **蓝绿部署**:维护两套生产环境,切换流量
|
||
- **滚动更新**:逐步替换实例,保证服务可用性
|
||
- **金丝雀发布**:先发布给部分用户,验证无问题后全量发布
|
||
|
||
### 3. 监控和告警
|
||
|
||
```bash
|
||
# 设置监控脚本
|
||
cat > monitor.sh << 'EOF'
|
||
#!/bin/bash
|
||
while true; do
|
||
if ! curl -f http://localhost:5000/api/health > /dev/null 2>&1; then
|
||
echo "服务异常,发送告警"
|
||
# 发送告警邮件或短信
|
||
fi
|
||
sleep 30
|
||
done
|
||
EOF
|
||
|
||
chmod +x monitor.sh
|
||
nohup ./monitor.sh &
|
||
```
|
||
|
||
### 4. 备份策略
|
||
|
||
- **自动备份**:每次部署前自动创建备份
|
||
- **定期备份**:每日创建完整备份
|
||
- **异地备份**:重要数据备份到不同地区
|
||
- **备份验证**:定期验证备份完整性
|
||
|
||
### 5. 安全考虑
|
||
|
||
- 使用HTTPS加密传输
|
||
- 定期更新依赖包
|
||
- 限制服务器访问权限
|
||
- 监控异常访问行为
|
||
|
||
## 故障排除
|
||
|
||
### 1. 常见问题
|
||
|
||
#### 部署失败
|
||
|
||
```bash
|
||
# 检查日志
|
||
tail -f logs/deploy.log
|
||
|
||
# 检查权限
|
||
ls -la /opt/tsp_assistant
|
||
|
||
# 检查服务状态
|
||
sudo systemctl status tsp_assistant
|
||
```
|
||
|
||
#### 服务无法启动
|
||
|
||
```bash
|
||
# 检查端口占用
|
||
netstat -tlnp | grep 5000
|
||
|
||
# 检查Python环境
|
||
which python3
|
||
python3 --version
|
||
|
||
# 检查依赖
|
||
pip list
|
||
```
|
||
|
||
#### 数据库连接失败
|
||
|
||
```bash
|
||
# 检查数据库服务
|
||
sudo systemctl status mysql
|
||
|
||
# 测试连接
|
||
mysql -u root -p -e "SHOW DATABASES;"
|
||
|
||
# 检查配置文件
|
||
cat src/config/config.py
|
||
```
|
||
|
||
### 2. 性能问题
|
||
|
||
#### 响应慢
|
||
|
||
```bash
|
||
# 检查系统资源
|
||
top
|
||
free -h
|
||
df -h
|
||
|
||
# 检查应用日志
|
||
tail -f logs/tsp_assistant.log
|
||
|
||
# 检查数据库性能
|
||
mysql -u root -p -e "SHOW PROCESSLIST;"
|
||
```
|
||
|
||
#### 内存泄漏
|
||
|
||
```bash
|
||
# 监控内存使用
|
||
ps aux | grep python
|
||
|
||
# 检查日志文件大小
|
||
ls -lh logs/
|
||
|
||
# 重启服务释放内存
|
||
sudo systemctl restart tsp_assistant
|
||
```
|
||
|
||
### 3. 紧急处理
|
||
|
||
#### 服务完全不可用
|
||
|
||
```bash
|
||
# 1. 立即回滚
|
||
python deploy.py rollback
|
||
|
||
# 2. 检查系统状态
|
||
sudo systemctl status tsp_assistant
|
||
sudo journalctl -u tsp_assistant -f
|
||
|
||
# 3. 联系技术支持
|
||
```
|
||
|
||
#### 数据丢失
|
||
|
||
```bash
|
||
# 1. 停止服务
|
||
sudo systemctl stop tsp_assistant
|
||
|
||
# 2. 恢复最新备份
|
||
python deploy.py rollback --backup latest
|
||
|
||
# 3. 验证数据完整性
|
||
python -c "from src.core.database import db; print('数据库连接正常')"
|
||
```
|
||
|
||
## 总结
|
||
|
||
TSP智能助手项目提供了完整的部署升级解决方案:
|
||
|
||
1. **版本管理**:语义化版本控制,自动版本号管理
|
||
2. **多种部署方式**:传统部署、Docker部署、云平台部署
|
||
3. **自动化流程**:一键部署、自动备份、健康检查
|
||
4. **完整回滚**:自动回滚、手动回滚、数据库回滚
|
||
5. **监控告警**:实时监控、异常告警、性能分析
|
||
|
||
通过遵循本指南,您可以安全、高效地管理TSP智能助手的部署和升级,确保系统的稳定性和可靠性。
|