Kouchou-AI项目中的Azure部署更新流程优化实践
背景与问题分析
在Kouchou-AI项目的实际开发过程中,我们发现Azure云平台的部署更新流程存在一定复杂性。开发人员nishio在尝试更新Azure上的部署时遇到了困难,虽然执行了一系列命令(包括登录、构建、推送镜像等),但最终发现前端界面没有变化。经过排查发现,问题出在容器更新机制上——虽然新镜像已成功推送到容器注册表,但运行中的容器实例并未自动更新。
技术细节剖析
问题的核心在于Azure容器应用的更新机制。当执行标准部署流程时:
- 通过
az containerapp update命令可以更新容器应用的配置 - 但默认情况下,即使镜像已更新,运行中的容器实例也不会自动重启
- 需要手动将副本数降为0再恢复,才能强制使用新镜像创建容器
这种机制在client-admin容器上已经通过azure-fix-client-admin目标实现了,但对于client和api容器则缺少相应的处理流程。更严重的是,api容器重启后还出现了数据丢失的问题(报表数据),这表明部署流程还需要考虑数据持久化的因素。
解决方案设计
针对上述问题,我们决定将完整的Azure部署更新流程封装到Makefile中,形成标准化的操作流程:
- 认证阶段:处理Azure和ACR的登录认证
- 构建阶段:完成代码构建和镜像打包
- 部署阶段:
- 推送镜像到容器注册表
- 更新所有相关容器应用配置
- 确保各容器实例使用最新镜像
- 数据安全:在api容器更新前后加入数据备份/恢复机制
Makefile实现要点
在Makefile中,我们创建了以下关键目标:
azure-full-deploy: azure-login azure-build azure-acr-login-auto azure-push \
azure-config-update azure-restart-containers azure-data-backup
azure-restart-containers:
@echo "重启client-admin容器..."
az containerapp update --name client-admin --resource-group $(AZURE_RESOURCE_GROUP) --min-replicas 0
sleep 5
az containerapp update --name client-admin --resource-group $(AZURE_RESOURCE_GROUP) --min-replicas 1
@echo "重启client容器..."
# 类似client-admin的处理
@echo "重启api容器(含数据保护)..."
azure-data-backup
# 容器重启逻辑
azure-data-restore
实施效果与最佳实践
通过这一改进,我们实现了:
- 一键式部署:开发人员只需运行
make azure-full-deploy即可完成完整部署流程 - 可靠性提升:自动化的容器重启机制确保总是使用最新镜像
- 数据安全:关键数据在部署前后自动备份/恢复
- 可维护性:所有部署逻辑集中管理,便于后续调整
对于类似项目,我们建议:
- 将云平台操作封装为标准化脚本/Makefile目标
- 特别注意有状态服务(如数据库、文件存储)的部署更新策略
- 在自动化流程中加入适当的等待时间(如容器停止后等待几秒再启动)
- 为关键操作添加日志输出,便于问题排查
总结
通过将Azure部署流程标准化并封装到Makefile中,Kouchou-AI项目显著提高了部署的可靠性和开发效率。这一实践不仅解决了当前的部署问题,还为项目的持续交付奠定了良好基础。这种模式也适用于其他基于容器化部署的云原生应用项目。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



