Skip to content

部署策略设计

**本文引用的文件** - [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)

目录

  1. 引言
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

引言

本文件面向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

图表来源

章节来源

核心组件

  • 前端镜像与容器
    • 基于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。

章节来源

架构总览

DeviceMate的多环境部署采用“容器化+Kubernetes”双轨方案:

  • 开发/测试/预生产:优先使用Docker Compose快速验证,便于本地联调与小规模测试。
  • 生产:基于Kubernetes集群,通过Ingress统一入口、Service暴露、ConfigMap集中管理配置,结合滚动更新与探活保障高可用。

图表来源

详细组件分析

多环境部署差异与配置管理

  • 开发环境
    • 推荐使用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集中管理配置,避免硬编码
    • 使用探针与滚动更新保障高可用