从零到生产:基于华为云 CCE 和 SWR 容器化部署 Spring Boot + Vue 全栈项目

举报
yd_280727371 发表于 2026/10/22 14:22:21 2026/10/22
【摘要】 一、背景与痛点之前团队的一个内部管理系统一直跑在单台 ECS 上,前后端直接 nohup 启动。随着功能迭代,几个问题越来越明显:环境漂移:本地 dev 跑得好好的,上到 ECS 就报依赖缺失,排查半天发现是 JDK 小版本不一致。发布风险高:每次更新都是覆盖 jar 包 + 重启,一旦新版本有 bug,回滚得手动翻备份。扩容基本靠加机器:流量一高,只能再开一台 ECS 重复部署流程,没法快...

一、背景与痛点

之前团队的一个内部管理系统一直跑在单台 ECS 上,前后端直接 nohup 启动。随着功能迭代,几个问题越来越明显:
  1. 环境漂移:本地 dev 跑得好好的,上到 ECS 就报依赖缺失,排查半天发现是 JDK 小版本不一致。
  2. 发布风险高:每次更新都是覆盖 jar 包 + 重启,一旦新版本有 bug,回滚得手动翻备份。
  3. 扩容基本靠加机器:流量一高,只能再开一台 ECS 重复部署流程,没法快速弹性。
核心诉求很明确:环境标准化、发布自动化、架构可扩展。容器化 + K8s 是最直接的答案,而华为云 CCE 正好提供了开箱即用的 K8s 集群。

二、方案设计

整体架构如下:
用户访问
   ↓
ELB(弹性负载均衡)
   ↓
Ingress Controller(CCE 内部)
   ↓
Service(ClusterIP)
   ↓
Pod(Spring Boot 后端 / Vue 前端 Nginx)
   ↓
RDS for MySQL(云数据库)
组件选型与职责:
  • SWR:存放前端 Nginx 镜像和后端 Spring Boot 镜像,相当于私有 Docker Hub。
  • CCE:托管 K8s 集群,负责编排 Pod、Service、Ingress。
  • RDS:托管 MySQL,不用自己运维数据库,自带主备高可用。
  • ELB:对外暴露服务,绑定弹性公网 IP。
避坑点:生产环境不要把数据库放在容器里,一定要用 RDS;前端静态资源用 Nginx 容器托管,通过 Ingress 按路径路由到后端 API。

三、实操步骤

3.1 制作镜像并推送到 SWR

后端 Dockerfile(Spring Boot):
FROM openjdk:8-jre-slim
LABEL maintainer="your-name"
WORKDIR /app
COPY target/demo-app.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-Xms256m", "-Xmx512m", "-jar", "/app/app.jar"]
前端 Dockerfile(Vue + Nginx):
# 构建阶段
FROM node:16 as build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# 运行阶段
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
推送到 SWR(以华北-北京四为例):
# 登录 SWR
docker login -u [区域]@[AK] -p [登录密钥] swr.cn-north-4.myhuaweicloud.com

# 打标签
docker tag demo-backend:1.0 swr.cn-north-4.myhuaweicloud.com/my-org/demo-backend:1.0
docker tag demo-frontend:1.0 swr.cn-north-4.myhuaweicloud.com/my-org/demo-frontend:1.0

# 推送
docker push swr.cn-north-4.myhuaweicloud.com/my-org/demo-backend:1.0
docker push swr.cn-north-4.myhuaweicloud.com/my-org/demo-frontend:1.0
注:SWR 的登录指令可以在控制台「我的镜像」里一键复制,别自己拼 URL 容易错。

3.2 创建 CCE 集群

  1. 进入 CCE 控制台,创建「标准集群」
  2. 网络配置:选择已有 VPC 和子网,容器网段建议选 172.16.0.0/16 避免与 VPC 冲突
  3. 节点配置:添加 2 台 4U8G 的 ECS 作为工作节点(生产建议 3 节点起)
  4. 等待集群状态变为「运行中」

3.3 部署后端工作负载

在 CCE 控制台「工作负载 → 无状态负载」中创建:
  • 镜像:选择 SWR 中的 demo-backend:1.0
  • 环境变量:配置数据库连接信息
    env:
      - name: SPRING_DATASOURCE_URL
        value: "jdbc:mysql://[RDS内网地址]:3306/demo_db?useSSL=false"
      - name: SPRING_DATASOURCE_USERNAME
        valueFrom:
          secretKeyRef:
            name: db-secret
            key: username
      - name: SPRING_DATASOURCE_PASSWORD
        valueFrom:
          secretKeyRef:
            name: db-secret
            key: password
  • 实例数:2(保证高可用)
  • 健康检查:配置 livenessProbe 和 readinessProbe,路径 /actuator/health
安全建议:数据库密码不要明文写在 YAML 里,用 CCE 的「密钥(Secret)」管理,然后在环境变量中引用。

3.4 部署前端并配置 Ingress

前端同样创建无状态负载,镜像用 demo-frontend:1.0。
然后创建 Service(ClusterIP 类型)和 Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: demo.example.com  # 换成你的域名
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: demo-backend-svc
            port:
              number: 8080
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo-frontend-svc
            port:
              number: 80
将域名 demo.example.com 解析到 ELB 的公网 IP 即可访问。

3.5 数据库准备

在 RDS 控制台创建 MySQL 实例,创建数据库 demo_db,初始化表结构:
CREATE DATABASE demo_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 导入表结构
SOURCE /path/to/schema.sql;
确保 RDS 安全组允许 CCE 节点网段访问 3306 端口。

四、验证结果

  1. 访问 http://demo.example.com,前端页面正常加载
  2. 点击登录/查询功能,API 请求通过 Ingress 转发到后端,数据正常返回
  3. CCE 控制台查看 Pod 状态:2 个后端 Pod + 2 个前端 Pod 均为 Running
  4. 手动删除一个后端 Pod,CCE 自动拉起新 Pod,服务不中断
压测简单验证(用 wrk 或 ab):
wrk -t10 -c100 -d30s http://demo.example.com/api/health
在 100 并发下响应时间稳定在 20ms 以内,Pod 资源使用率正常。

五、总结与可扩展

这次上云解决了三个核心问题:
  • 环境一致性:镜像一次构建,到处运行
  • 发布可靠:通过修改镜像版本号滚动更新,回滚只需改回旧版本
  • 弹性扩展:CCE 支持 HPA(水平 Pod 自动伸缩),流量高峰自动加 Pod
后续可继续优化的方向:
  1. CI/CD 流水线:用 CodeArts 或 Jenkins,代码推送后自动构建镜像、更新 CCE 工作负载
  2. 配置中心:用 CSE(微服务引擎)或 ConfigMap 管理多环境配置
  3. 监控告警:开启 AOM(应用运维管理),配置 Pod 异常重启告警
  4. 日志采集:配置 LTS(云日志服务),集中收集和分析应用日志
对于中小团队从传统部署向云原生迁移,这套方案是性价比很高的起点。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。