opensource-demo-mendmix-cloud-20241114:基于 Mendmix cloud 与华为云的微服务开发脚手架项目

可快速搭建微服务开发环境,实现代码持续集成与自动部署。基于Mendmix cloud、Spring Cloud Gateway等技术,整合华为云CCE、OBS等服务,提供数据库、缓存等组件集成能力。【此简介由AI生成】

分支1Tags0
文件最后提交记录最后更新时间
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前
1 年前

项目背景

Mendmix-cloud定位是一站式云原生架构技术底座。Mendmix-cloud提供了数据库、缓存、消息中间件、分布式定时任务、安全框架、网关以及主流产商云服务快速集成能力。本项目基于Mendmix cloud + Spring cloud gateway + spring boot jpa + GaussDB 搭建微服开发脚手架,基于华为云CCE,OBS,SWR,CodeArts,实现代码持续集成,自动部署功能。

源码地址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

2. maven依赖配置

  1. eureka-server pom.xml依赖配置
<project>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>3.1.1</version>
        </dependency>
</project>
  1. gateway-server pom.xml 依赖配置
<project>
        <dependency>
            <groupId>com.mendmix</groupId>
            <artifactId>mendmix-gateway</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-reactor-netty</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>3.1.1</version>
        </dependency>
</project>
  1. gaussdb-demo-server pom.xml 依赖核心配置
<project>
    
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>3.1.1</version>
        </dependency>
         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- Database access -->
        <!-- 引入lib目录下jar包 -->
        <dependency>
            <groupId>org.opengauss</groupId>
            <artifactId>opengauss-jdbc</artifactId>
            <version>5.0.0-htrunk3.csi.gaussdb_kernel.opengaussjdbc.r3</version>
            <scope>system</scope>
            <systemPath>${pom.basedir}/src/main/resources/lib/gsjdbc4.jar</systemPath>
        </dependency>
        <!-- plug配置允许引入lib目录下jar包 -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
        </plugins>
</project>

3. dockerfile编写

  1. eureka-server 模块
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"]
  1. gateway-server 模块
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"]
  1. gaussdb-demo-server 模块
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 模块
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
  1. gateway-server 模块
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
  1. gaussdb-demo-server 模块
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
  2. CodeArts控制台--持续交付--编译构建--新建任务
    • 任务一:上传kubernetes yaml至OBS,通过预置插件“上传文件到OBS” 图片上传失败,等后面更新
    • 任务二:构建项目并上传镜像至SWR仓库,通过预置插件“通过dockerfile制作镜像并推送至SWR仓库” 图片上传失败,等后面更新
  3. CodeArts控制台--持续交付--部署--新建任务
    • 任务:部署镜像至ECC,通过kubernetes manifest插件,执行上传到OBS的kubernetes yaml文件
  4. 部署执行过程
    • 步骤一:执行构建任务一,上传kubernetes yaml至OBS
    • 步骤二:执行构建任务二,构建项目并上传镜像至SWR仓库
    • 步骤三:发布任务,部署镜像至ECC
    • 最后:通过gateway网关服务访问gaussdb demo提供api

开发总结

产品名称 产品类型 数据库引擎版本 内核引擎版本 实例类型 部署形态 备注
云数据库 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) 推荐

项目介绍

可快速搭建微服务开发环境,实现代码持续集成与自动部署。基于Mendmix cloud、Spring Cloud Gateway等技术,整合华为云CCE、OBS等服务,提供数据库、缓存等组件集成能力。【此简介由AI生成】

定制我的领域