# mendmix-cloud-demo **Repository Path**: wmwei/mendmix-cloud-demo ## Basic Information - **Project Name**: mendmix-cloud-demo - **Description**: 基于mendmix-cloud,spring jpa,GaussDB搭建的微服务开发脚手架平台 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-11 - **Last Updated**: 2024-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目背景 Mendmix-cloud定位是一站式云原生架构技术底座。Mendmix-cloud提供了数据库、缓存、消息中间件、分布式定时任务、安全框架、网关以及主流产商云服务快速集成能力。本项目基于Mendmix cloud + Spring cloud gateway + spring boot jpa + GaussDB 搭建微服开发脚手架,基于华为云CCE,OBS,SWR,CodeArts,实现代码持续集成,自动部署功能。 [源码地址](https://gitee.com/dromara/mendmix-cloud):https://gitee.com/dromara/mendmix-cloud ## 开发过程 ### 1. 创建工程,目录结构如下 - mendmix-cloud-demo #pom 依赖管理 --apis-server #服务api入口 --eureka-server #eureka服务注册中心 --gateway-server #网关服务 --gaussdb-demo-server #使用gaussdb demo示例服务 - IDEA创建项目如下图 ![deploy](./img/mendix-cloud-demo-project.png) ### 2. maven依赖配置 1. eureka-server pom.xml依赖配置 ```xml org.springframework.boot spring-boot-starter-web org.springframework.cloud spring-cloud-starter-netflix-eureka-server 3.1.1 ``` 2. gateway-server pom.xml依赖配置 ```xml com.mendmix mendmix-gateway 1.4.1 org.springframework.boot spring-boot-starter-reactor-netty 3.1.1 org.springframework.cloud spring-cloud-starter-gateway 3.1.1 org.springframework.cloud spring-cloud-starter-netflix-eureka-client 3.1.1 ``` 3. gaussdb-demo-server pom.xml 依赖核心配置 ```xml org.springframework.cloud spring-cloud-starter-netflix-eureka-client 3.1.1 org.springframework.boot spring-boot-starter-data-jpa org.springframework.boot spring-boot-starter-logging org.opengauss opengauss-jdbc 5.0.0-htrunk3.csi.gaussdb_kernel.opengaussjdbc.r3 system ${pom.basedir}/src/main/resources/lib/gsjdbc4.jar org.springframework.boot spring-boot-maven-plugin true ``` ### 3. dockerfile编写 1. eureka-server 模块 ```dockfile FROM openjdk:17-alpine LABEL authors="wmwei" RUN mkdir -p /opt COPY target/eureka-server.jar /opt WORKDIR /opt EXPOSE 8761 ENTRYPOINT ["java", "-jar","eureka-server.jar"] ``` 2. gateway-server 模块 ```dockerfile FROM openjdk:17-alpine LABEL authors="wmwei" RUN mkdir -p /opt COPY target/gateway-server.jar /opt WORKDIR /opt EXPOSE 8080 ENTRYPOINT ["java", "-jar","gateway-server.jar"] ``` 3. gaussdb-demo-server 模块 ```dockfile FROM openjdk:17-alpine LABEL authors="wmwei" RUN mkdir -p /opt COPY target/gaussdb-used-server.jar /opt WORKDIR /opt EXPOSE 8088 ENTRYPOINT ["java", "-jar","gaussdb-used-server.jar"] ``` ### 4. kubernetes yaml编写 1. eureka-server 模块 ```yaml apiVersion: v1 kind: Service metadata: name: eureka-server spec: selector: app: eureka-server-pods ports: - protocol: TCP port: 8761 targetPort: 8761 --- apiVersion: apps/v1 kind: Deployment metadata: name: eureka-server labels: app: eureka-server-deploy spec: replicas: 1 selector: matchLabels: app: eureka-server-pods template: metadata: name: eureka-server labels: app: eureka-server-pods spec: containers: - name: eureka-server-container image: swr.cn-north-4.myhuaweicloud.com/wmwei/eureka-server:0.0.1 env: - name: EK_SERVER value: "eureka-server:8761" imagePullPolicy: IfNotPresent ports: - containerPort: 8761 protocol: TCP resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "256Mi" cpu: "250m" imagePullSecrets: - name: default-secret restartPolicy: Always ``` 2. gateway-server 模块 ```yaml apiVersion: v1 kind: Service metadata: name: gateway-server spec: selector: app: gateway-server-pods ports: - protocol: TCP port: 8080 targetPort: 8080 nodePort: 30100 type: NodePort --- apiVersion: apps/v1 kind: Deployment metadata: name: gateway-server labels: app: gateway-server-deploy spec: replicas: 1 selector: matchLabels: app: gateway-server-pods template: metadata: name: gateway-server labels: app: gateway-server-pods spec: containers: - name: gateway-server-container image: swr.cn-north-4.myhuaweicloud.com/wmwei/gateway-server:0.0.1 env: - name: EK_SERVER value: "eureka-server:8761" - name: GAUSSDB-SERVER value: "gaussdb-used-server:8088" imagePullPolicy: IfNotPresent ports: - containerPort: 8080 protocol: TCP resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "256Mi" cpu: "250m" imagePullSecrets: - name: default-secret restartPolicy: Always ``` 3. gaussdb-demo-server 模块 ```yaml apiVersion: v1 kind: Service metadata: name: gaussdb-used-server spec: selector: app: gaussdb-used-pods ports: - protocol: TCP port: 8088 targetPort: 8088 --- apiVersion: apps/v1 kind: Deployment metadata: name: gaussdb-used labels: app: gaussdb-used-deploy spec: replicas: 1 selector: matchLabels: app: gaussdb-used-pods template: metadata: name: gaussdb-used labels: app: gaussdb-used-pods spec: containers: - name: gaussdb-used-container image: swr.cn-north-4.myhuaweicloud.com/wmwei/gaussdb-used-server:0.0.1 env: - name: EK_SERVER value: "eureka-server:8761" - name: DB_PASSWORD valueFrom: configMapKeyRef: key: DB_PASSWORD name: opengauss - name: DB_URL valueFrom: configMapKeyRef: key: DB_URL name: opengauss - name: DB_USERNAME valueFrom: configMapKeyRef: key: DB_USERNAME name: opengauss - name: DB_DRIVER valueFrom: configMapKeyRef: key: DB_DRIVER name: opengauss imagePullPolicy: IfNotPresent ports: - containerPort: 8088 protocol: TCP resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "256Mi" cpu: "250m" imagePullSecrets: - name: default-secret restartPolicy: Always ``` ### 5. 部署代码 1. CodeArts控制台--创建项目--代码托管--新建仓库 ![project-new](./img/new-project.png) 2. CodeArt控制台--持续交付--编译构建--新建任务 - 任务一:上传kubernetes yaml至OBS,通过预置插件“上传文件到OBS” 图片上传失败,等后面更新 - 任务二:构建项目并上传镜像至SWR仓库,通过预置插件“通过dockerfile制作镜像并推送至SWR仓库” 图片上传失败,等后面更新 3. CodeArt控制台--持续交付--部署--新建任务 - 任务:部署镜像至ECC,通过kubernetes manifest插件,执行上传到OBS的kubernetes yaml文件 4. 部署执行过程 - 步骤一:执行构建任务一,上传kubernetes yaml至OBS - 步骤二:执行构建任务二,构建项目并上传镜像至SWR仓库 - 步骤三:发布任务,部署镜像至ECC - 最后:通过gateway网关服务访问gaussdb demo提供api ## 开发总结 * 本文主要是结合Mendmix cloud开源框架和华为GaussDB数据库,搭建微服开发脚手架,整合华为云CCE,SWR,OBS,CodeArts实现微服务容器化部署,持续集成,自动构建,一键发布等功能。 * [demo地址](https://gitee.com/wmwei/mendmix-cloud-demo):https://gitee.com/wmwei/mendmix-cloud-demo * [博客地址](https://bbs.huaweicloud.com/blogs/439256):https://bbs.huaweicloud.com/blogs/439256 * demo运行结果关键截图 ![result](./img/mendix-cloud-demo-result.png) * * * demo运行环境资源清单 | 产品名称 | 产品类型 | 数据库引擎版本 | 内核引擎版本 | 实例类型 | 部署形态 | 备注 | |--------------|------|----------|---------|------|------|-----| | 云数据库 GaussDB | 基础版 | V2.0-8.* | 505.1.* | 集中式 | 1主2备 | 推荐 |
| 产品名称 | 集群类型 | 集群版本 | 集群规模 | 备注 | |-----------|------------------|-------|------|-----| | 云容器引擎 CCE | CCE Standard 集群 | V1.29 | 50 | 推荐 |
| 产品名称 | CPU架构 | 实例类型 | 公共镜像 | 镜像版本 | 备注 | |--------|-------|-----------|----------------------|----------------------------------------------|-----| | 弹性云服务器 | 鲲鹏计算 | 鲲鹏通用计算增强型 | Huawei Cloud EulerOS | Huawei Cloud EulerOS 2.0 标准版 64位 ARM版(10GiB) | 推荐 |