# 版本升级流程 ## 概述 本文介绍版本升级标准流程,包括升级前准备、执行步骤、验证检查和回滚方案。遵循规范的升级流程可最大程度降低线上风险。 :::tip 升级原则 1. 先备份,后升级 2. 先测试环境,后生产环境 3. 每次升级可回滚 4. 低峰期执行升级 ::: ## 升级前准备 ### 备份 ```bash # 1. 数据库全量备份 mysqldump -h 127.0.0.1 -u root -p --single-transaction \ djangoadmin_prod | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz # 2. 上传文件备份 tar -czf uploads_$(date +%Y%m%d).tar.gz /data/apps/uploads/ # 3. 应用目录备份(含 .env 和配置) tar -czf app_$(date +%Y%m%d).tar.gz \ --exclude='uploads' --exclude='__pycache__' --exclude='.git' \ /data/apps/ ``` ### 查看变更日志 ```bash # 查看当前版本 git describe --tags --always # 查看提交记录 git log --oneline -20 # 查看变更文件 git diff --stat HEAD~10 ``` :::tip 重点关注 - 是否有数据库结构变更(Flask-Migrate 迁移脚本) - 是否有 `.env` 新增配置项 - 是否有依赖包更新(requirements.txt) - 是否有破坏性变更(Breaking Changes) ::: ## 标准升级步骤 ### 步骤一:拉取代码 ```bash cd /data/apps/djangoadmin # 拉取最新代码 git fetch origin git pull origin main # 或切换到指定版本 git checkout v1.2.0 ``` ### 步骤二:更新依赖 ```bash # 激活虚拟环境 source venv/bin/activate # 更新依赖 pip install -r requirements.txt ``` ### 步骤三:更新配置 ```bash # 检查是否有新增的 .env 配置项 git diff HEAD~1 .env.example # 如有新增项,手动添加到 .env vim .env ``` ### 步骤四:执行数据库迁移 ```bash # 查看待执行的迁移 flask db current flask db history # 执行迁移 flask db upgrade # 或使用 Make 命令 make migrate-upgrade ``` :::warning 迁移前确认 - 迁移脚本需提前在测试环境验证 - 确认迁移不会锁表影响线上服务 - 大表结构变更建议在低峰期执行 ::: ### 步骤五:重启服务 ```bash # Supervisor 管理 sudo supervisorctl restart djangoadmin-flask # Docker 部署 docker-compose down && docker-compose up --build -d # Systemd 管理 sudo systemctl restart djangoadmin-flask ``` ### 步骤六:验证 ```bash # 1. 检查服务状态 sudo supervisorctl status djangoadmin-flask # 2. 检查健康端点 curl -s http://127.0.0.1:8021/api/v1/health | python -m json.tool # 3. 检查日志 tail -f /data/apps/logs/supervisor.out.log # 4. 验证核心功能 # - 登录接口 # - 列表查询接口 # - 新增/编辑/删除接口 ``` ## 回滚方案 ### 代码回滚 ```bash # 回退到上一个版本 git checkout HEAD~1 # 或回退到指定版本 git checkout v1.1.0 # 重新安装依赖 pip install -r requirements.txt # 重启服务 sudo supervisorctl restart djangoadmin-flask ``` ### 数据库回滚 ```bash # 回滚最近一次迁移 flask db downgrade -1 # 回滚到指定版本 flask db downgrade # 查看可用版本 flask db history ``` ### 完整回滚 ```bash # 1. 停止服务 sudo supervisorctl stop djangoadmin-flask # 2. 恢复应用目录 cd /data/apps/ tar -xzf app_20260905.tar.gz # 3. 恢复数据库 gunzip < backup_20260905.sql.gz | mysql -u root -p djangoadmin_prod # 4. 恢复上传文件 tar -xzf uploads_20260905.tar.gz -C / # 5. 启动服务 sudo supervisorctl start djangoadmin-flask ``` ## 灰度升级策略 对于重要生产环境,建议采用灰度升级: ``` 1. 部署新版本到 1 台服务器 2. Nginx 将 10% 流量切到新版本 3. 观察 30 分钟,无异常后逐步增加流量 4. 流量 100% 切到新版本 5. 下线旧版本 ``` ```nginx # Nginx 灰度配置 upstream backend { server 10.0.1.10:8021 weight=9; # 旧版本 90% server 10.0.1.11:8021 weight=1; # 新版本 10% } ``` ## 升级检查清单 - [ ] 升级前已完成数据库备份 - [ ] 升级前已完成应用目录备份 - [ ] 变更日志已审查,了解所有变更 - [ ] 新增 `.env` 配置项已添加 - [ ] 数据库迁移已在测试环境验证 - [ ] 依赖包已更新 - [ ] 服务已重启 - [ ] 健康检查通过 - [ ] 核心功能验证通过 - [ ] 日志无异常报错 ## 总结 版本升级的核心流程:备份 → 拉代码 → 更新依赖 → 更新配置 → 数据库迁移 → 重启 → 验证。每一步都需要可回滚,完整回滚方案应提前准备并验证。生产环境建议在低峰期执行,重要系统采用灰度升级策略。