Appearance
部署策略设计
**本文引用的文件** - [docker-compose.yml](file://lemes-cloud/src/devops/docker-compose/docker-compose.yml) - [base.yml](file://lemes-cloud/src/devops/docker-compose/base.yml) - [alone.yml](file://lemes-cloud/src/devops/docker-compose/alone.yml) - [install.sh](file://lemes-cloud/src/devops/k8s/install.sh) - [deploy-master.sh](file://lemes-cloud/src/devops/k8s/deploy-master.sh) - [baremetal-nginx-ingress.yaml](file://lemes-cloud/src/devops/k8s/baremetal-nginx-ingress.yaml) - [lemes-web.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-web.yaml) - [lemes-nacos.yaml](file://lemes-cloud/src/devops/console/k8s/template/lemes-nacos.yaml) - [Dockerfile(前端)](file://dm/lemes-web/Dockerfile) - [Dockerfile(后端)](file://lemes-cloud/src/devops/Dockerfile) - [devops-ci.yml](file://lemes-cloud/devops-ci.yml)目录
引言
本文件面向DeviceMate项目的多环境部署与运维团队,系统性阐述从开发到生产的部署策略与最佳实践,覆盖容器化与Kubernetes集群部署、服务发现与负载均衡、蓝绿/滚动更新与金丝雀发布、配置管理与自动化流水线。文档以仓库中的现有部署资产为依据,结合实际文件路径与片段说明,帮助读者快速落地可复用的部署方案。
项目结构
DeviceMate由前后端与云原生基础设施组成:
- 前端应用位于 dm/lemes-web,采用Nginx容器化,通过Dockerfile构建静态站点镜像。
- 后端微服务位于 lemes-cloud,采用Spring Boot应用,通过分层Dockerfile实现增量构建与运行时启动参数注入。
- DevOps与部署资产集中在 lemes-cloud/src/devops 下,包含:
- Docker Compose编排:docker-compose.yml、base.yml、alone.yml
- Kubernetes安装与部署脚本:install.sh、deploy-master.sh
- Ingress与服务模板:baremetal-nginx-ingress.yaml、lemes-web.yaml、lemes-nacos.yaml
- CI配置:lemes-cloud/devops-ci.yml
图表来源
- docker-compose.yml:1-136
- base.yml:1-70
- alone.yml:1-108
- install.sh:1-98
- deploy-master.sh:1-51
- baremetal-nginx-ingress.yaml:1-654
- lemes-web.yaml:1-80
- lemes-nacos.yaml:1-151
- Dockerfile(前端):1-26
- Dockerfile(后端):1-52
- devops-ci.yml:1-27
章节来源
- docker-compose.yml:1-136
- base.yml:1-70
- alone.yml:1-108
- install.sh:1-98
- deploy-master.sh:1-51
- baremetal-nginx-ingress.yaml:1-654
- lemes-web.yaml:1-80
- lemes-nacos.yaml:1-151
- Dockerfile(前端):1-26
- Dockerfile(后端):1-52
- devops-ci.yml:1-27
核心组件
- 前端镜像与容器
- 基于Nginx镜像,复制构建产物,注入Nginx配置与启动脚本,暴露80端口。
- 支持通过环境变量动态注入网关地址、前缀等参数。
- 后端镜像与容器
- 分层Dockerfile:先解压JAR为多层结构,再拷贝至运行时镜像,减少变更传播体积。
- 运行时注入Nacos地址、命名空间、分组、时区、探针参数等。
- Docker Compose编排
- 单机演示:alone.yml提供最小可用拓扑(Redis、Nacos、网关、认证、若干服务、Web)。
- 基础编排:base.yml定义Nacos、网关、认证等核心依赖。
- 多服务编排:docker-compose.yml定义各业务服务端口映射与日志挂载。
- Kubernetes部署
- 安装脚本:install.sh完成系统初始化、Docker/K8s安装、镜像拉取准备。
- Master部署:deploy-master.sh初始化集群、设置NodePort范围、安装Flannel与Nginx Ingress。
- Ingress:baremetal-nginx-ingress.yaml提供Ingress控制器与RBAC、Service等资源。
- 应用模板:lemes-web.yaml定义Web服务、Deployment与Ingress;lemes-nacos.yaml定义Nacos StatefulSet与Ingress。
章节来源
- Dockerfile(前端):1-26
- Dockerfile(后端):1-52
- alone.yml:1-108
- base.yml:1-70
- docker-compose.yml:1-136
- install.sh:1-98
- deploy-master.sh:1-51
- baremetal-nginx-ingress.yaml:1-654
- lemes-web.yaml:1-80
- lemes-nacos.yaml:1-151
架构总览
DeviceMate的多环境部署采用“容器化+Kubernetes”双轨方案:
- 开发/测试/预生产:优先使用Docker Compose快速验证,便于本地联调与小规模测试。
- 生产:基于Kubernetes集群,通过Ingress统一入口、Service暴露、ConfigMap集中管理配置,结合滚动更新与探活保障高可用。
图表来源
- baremetal-nginx-ingress.yaml:261-403
- lemes-web.yaml:64-80
- lemes-nacos.yaml:31-132
- docker-compose.yml:1-136
- base.yml:1-70
详细组件分析
多环境部署差异与配置管理
- 开发环境
- 推荐使用alone.yml快速搭建,便于本地调试与联调。
- 通过.env注入环境变量,如Nacos地址、服务端口、日志目录等。
- 测试/预生产环境
- 使用base.yml与docker-compose.yml组合,按需扩展服务实例数与端口映射。
- 日志挂载到宿主机指定目录,便于采集与分析。
- 生产环境
- 使用Kubernetes模板与Ingress统一入口,结合ConfigMap集中管理配置。
- Nacos使用StatefulSet与持久化,确保配置一致性与高可用。
章节来源
容器化部署方案
- 前端镜像构建
- 基于Nginx镜像,复制dist目录,注入nginx.conf与站点配置,暴露80端口。
- 支持通过环境变量动态注入网关地址、前缀等,实现多环境适配。
- 后端镜像构建
- 使用Spring Boot Layertools分层打包,运行时仅拷贝application层,降低镜像体积与更新成本。
- 启动参数注入Nacos地址、命名空间、分组、时区、探针参数等,确保服务注册与配置拉取正确。
图表来源
章节来源
Kubernetes集群部署
- 安装与初始化
- install.sh完成系统优化、Docker/K8s安装、镜像拉取准备。
- deploy-master.sh初始化master节点、设置NodePort范围、安装Flannel与Nginx Ingress。
- Ingress与Service
- baremetal-nginx-ingress.yaml定义Ingress控制器、RBAC、Service与Deployment。
- lemes-web.yaml定义Web Service、Deployment与Ingress,实现对外暴露。
- 配置管理
- ConfigMap用于传递时区、数据库连接等配置键值,被Pod以环境变量或挂载方式引用。
图表来源
章节来源
蓝绿部署与滚动更新策略
- 蓝绿部署
- 通过两套完全相同的Web Deployment与Ingress切换实现零停机切换。
- 切换步骤:部署新版本到备用Deployment → 更新Ingress指向新Deployment → 健康检查通过后释放旧Deployment。
- 滚动更新
- 使用Deployment的RollingUpdate策略,逐步替换Pod,配合liveness/readiness探针保证流量只进入健康实例。
- 回滚机制
- 通过kubectl rollout undo快速回退至上一版本;建议保留历史副本以便审计。
(本图为概念性流程图,无需图表来源)
金丝雀发布与灰度发布
- 用户分组与流量比例
- 基于Ingress注解或Service权重实现流量切分;也可通过多版本Deployment并行运行,逐步提升新版本副本数。
- 监控指标
- 结合探针与日志采集,关注错误率、响应时间、P95/P99延迟与CPU/内存占用。
- 回滚条件
- 错误率阈值触发自动回滚;人工确认后执行kubectl rollout undo。
(本节为通用实践说明,无需章节来源)
部署自动化与配置管理
- CI流水线
- devops-ci.yml定义构建阶段与Sonar扫描任务,支持多环境打包与质量门禁。
- 镜像与配置
- Dockerfile中注入环境变量与启动参数,确保不同环境一致行为。
- ConfigMap集中管理配置键值,避免硬编码与重复构建。
章节来源
依赖关系分析
- 前端依赖
- 依赖Nginx镜像与构建产物;通过环境变量注入网关与前缀。
- 后端依赖
- 依赖Nacos作为服务发现与配置中心;通过环境变量注入Nacos地址、命名空间、分组。
- 编排依赖
- Docker Compose中服务间通过env_file与depends_on建立依赖顺序。
- K8s中Ingress依赖Service,Service依赖Deployment。
图表来源
章节来源
性能考量
- 镜像层优化
- 后端使用分层Dockerfile,仅传输代码层,显著降低带宽与构建时间。
- 探针与资源
- 建议为Pod配置liveness/readiness探针,合理设置资源requests/limits,避免雪崩。
- Ingress与网络
- 使用Nginx Ingress作为统一入口,结合NodePort范围调整与网络插件(Flannel)保障低延迟转发。
(本节为通用指导,无需章节来源)
故障排查指南
- K8s安装失败
- 检查install.sh中系统优化项是否生效(防火墙、SELinux、swap、ipvs模块)。
- 确认Docker与K8s版本匹配,镜像拉取源可用。
- 集群初始化失败
- 查看deploy-master.sh输出的Join命令与NodePort范围设置是否成功。
- Ingress不可达
- 检查baremetal-nginx-ingress.yaml是否正确应用,Service类型与端口映射是否一致。
- 服务未注册
- 检查Nacos地址、命名空间、分组与鉴权参数是否正确注入。
- 日志定位
- Docker Compose中通过日志卷挂载定位问题;K8s中使用kubectl logs查看Pod日志。
章节来源
结论
DeviceMate的部署体系以“容器化+Kubernetes”为核心,结合Docker Compose与K8s模板实现从开发到生产的平滑过渡。通过分层镜像、探针与Ingress、ConfigMap集中配置以及蓝绿/滚动更新策略,可有效提升交付效率与系统稳定性。建议在生产环境中进一步完善监控告警、限流熔断与备份恢复机制,持续迭代部署流程。
附录
- 快速清单
- 使用alone.yml快速验证本地联调
- 使用base.yml+docker-compose.yml扩展测试环境
- 使用K8s模板与Ingress部署生产环境
- 通过ConfigMap集中管理配置,避免硬编码
- 使用探针与滚动更新保障高可用