首頁 > 軟體

Rainbond雲原生部署SpringCloud應用架構實踐

2022-04-21 16:00:18

範例專案詳情

本檔案以Pig 快速開發框架為例,演示如何在Rainbond上部署一套完整的Spring Cloud專案。

Pig Microservice Architecture V2.1.0:

基於 Spring Cloud Finchley 、Spring Security OAuth2 的RBAC許可權管理系統

基於資料驅動檢視的理念封裝 Element-ui,即使沒有 vue 的使用經驗也能快速上手

提供對常見容器化支援 Docker、Kubernetes、Rancher2 支援

提供 lambda 、stream api 、webflux 的生產實踐

模組說明:

pig
├── pig-ui -- 前端工程[80]
├── pig-auth -- 授權服務提供[3000]
└── pig-common -- 系統公共模組
     ├── pig-common-core -- 公共工具類核心包
     ├── pig-common-log -- 紀錄檔服務
     └── pig-common-security -- 安全工具類
├── pig-config -- 設定中心[8888]
├── pig-eureka -- 服務註冊與發現[8761]
├── pig-gateway -- Spring Cloud Gateway閘道器[9999]
└── pig-upms -- 通用使用者許可權管理模組
     └── pigx-upms-api -- 通用使用者許可權管理系統公共api模組
     └── pigx-upms-biz -- 通用使用者許可權管理系統業務處理模組[4000]
└── pigx-visual  -- 圖形化模組
     ├── pigx-monitor -- Spring Boot Admin監控 [5001]
     └── pigx-codegen -- 圖形化程式碼生成[5003]
     └── pigx-zipkin -- 微服務鏈路跟蹤[5002]

上述的模組,可以分為類庫與服務兩類,讀者可以對比自己的Spring Cloud專案:

構建後產生jar包,用來實現各種功能的類的集合,即是類庫,如Pig中的pig-common模組

構建後產生jar包或者war包,通過 java -jar 或者tomcat等方式啟動,開放某個埠提供服務的,即是服務,如Pig中的pig-eureka模組

只需要將服務模組在Rainbond中構建出來即可。

經過梳理,該專案需要構建的服務元件包括:

啟動順序服務元件名稱執行埠元件功能
1pig-eureka8761spring cloud 服務發現註冊與發現
2pig-config8888spring cloud 設定中心
3pig-gateway9999spring cloud 微服務閘道器
4pig-auth3000授權服務提供
5pig-upms-biz4000通用使用者許可權管理系統業務處理模組
6pig-monitor5001Spring Boot Admin監控
7pig-codegen5003圖形化程式碼生成
8pig-zipkin5002微服務鏈路跟蹤
9pig-ui80前端專案(vue專案)

部署環境說明:

部署pig,需要以下環境支援:

中介軟體或環境要求版本要求備註
JDK1.8強制要求版本
MySQL5.7+強制要求版本
Redis3.2 +強制要求版本
node8.0 +用於執行前端專案
npm6.0 +用於構建前端專案

模組構建

新建應用,並命名為 spring-cloud

獲取專案克隆/下載地址: https://gitee.com/log4j/pig

以pig-eureka為例,演示從原始碼開始構建流程:

為 spring-cloud 新增服務元件 —— 從原始碼開始 —— 自定義倉庫:

點選 新建服務,Rainbond會自動拉取程式碼,並根據程式碼根目錄下的 pom.xml 自動將程式碼語言識別為 Java-maven。取消 並構建啟動 選項:

點選 建立,進入服務元件未部署的頁面。編輯 埠 索引標籤,開放 pig-eureka 自身埠 8761:

pig-eureka 需要被其它微服務元件存取以進行註冊,所以開啟對內服務,以便之後建立依賴關係。該元件也提供web頁面,顯示微服務元件的註冊情況與健康情況,所以開啟對外服務,以便外部存取。

編輯 構建源 索引標籤,指定 pig-eureka 構建引數:

由於 Pig 本身是一個多模組的專案,所以需要指定當前服務元件構建的模組。指定的方式是在 構建執行環境設定 中的 Maven構建全域性引數:

clean dependency:list install -pl pig-eureka -am

上述的引數指定了普通的子模組構建方式,對於另一種子模組中的子模組,比如 pig-codegen 模組,引數指定的方式為:

clean dependency:list install -pl pig-visual/pig-codegen -am

在v5.1+版本的Rainbond中,可以指定當前服務元件的啟動命令。指定的方式是在 構建執行環境設定 中的 啟動命令:

web: java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/pig-eureka/target/*.jar 

命令格式與 Procfile 一致。

編輯 依賴 索引標籤,指定當前服務元件依賴其它服務元件:

各個服務元件之間的依賴關係,可以在建立時指定。所有的 spring cloud 微服務元件都需要依賴 pig-eureka,以 pig-gateway為例,應新增依賴關係如下:

所有的設定完成後,即可點選 構建 ,構建完成後,服務元件將自動執行起來。

將所有服務元件依次部署完成。

部署 Mysql

Pig 微服務專案需要部署 Mysql 5.7+ 作為資料來源。並在程式碼倉庫中提供了資料庫初始化指令碼: 

https://gitee.com/log4j/pig/blob/master/db/pig.sql

為了能夠在資料庫啟動時即載入初始化指令碼,製作了一份 Dockerfile:

FROM percona:5.7.23-stretch
LABEL creater="barnett"
ENV MYSQL_VERSION=5.7.23
ENV TZ=Asia/Shanghai
ADD docker-entrypoint.sh /run/docker-entrypoint.sh
ADD ./run/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
ADD ./run/mysqld.cnf /etc/mysql/percona-server.conf.d/mysqld.cnf
RUN fetchDeps=' 
		ca-certificates 
		wget 
	'; 
	sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list; 
	apt-get update; 
	apt-get install -y --no-install-recommends $fetchDeps; 
	rm -rf /var/lib/apt/lists/*; 
    wget -O /usr/local/bin/env2file -q https://github.com/barnettZQG/env2file/releases/download/v0.1/env2file-linux; 
    chmod +x /run/docker-entrypoint.sh && chmod +x /usr/local/bin/env2file; 
    apt-get purge -y --auto-remove $fetchDeps
EXPOSE 3306
VOLUME ["/var/lib/mysql", "/var/log/mysql"]
# 將程式碼倉庫中 sql 目錄下的指令碼放到對應的初始化目錄下
COPY sql/*.sql /docker-entrypoint-initdb.d/
# change ENTRYPOINT exec some custom command
ENTRYPOINT [ "/run/docker-entrypoint.sh" ]
CMD [ "mysqld" ]

為 spring-cloud 新增服務元件 —— 從原始碼開始 —— 自定義倉庫:

將服務元件命名為 pig-db,並指定程式碼分支 pig。

在程式碼倉庫地址url的最後新增 ?dir=5.7 可以讓Rainbond將構建目錄指定為程式碼倉庫根目錄下的 5.7 資料夾。

為了讓資料庫正常工作,並且可以被其它依賴的本資料庫的應用獲取連線資訊,需要設定若干環境變數:

環境變數名稱環境變數值設定位置
MYSQL_USERroot連線資訊
MYSQL_HOST127.0.0.1連線資訊
MYSQL_PORT3306連線資訊
MYSQL_ROOT_PASSWORDmysqlpassword連線資訊
MYSQL_DATABASEpig連線資訊

通過修改 pig-config 中的組態檔,來定義多個微服務元件連線資料庫的設定:

pig/pig-config/src/main/resources/config/pigx-auth-dev.yml
pig/pig-config/src/main/resources/config/pigx-upms-dev.yml  
pig/pig-config/src/main/resources/config/pigx-codegen-dev.yml
pig/pig-config/src/main/resources/config/pigx-zipkin-dev.yml.yml

修改範例如下:

# 資料來源
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.jdbc.Driver
    username: ${MYSQL_USER}
    password: ${MYSQL_ROOT_PASSWORD}
    url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai

部署 Redis

通過Rainbond應用市場,可以直接安裝 Redis 4.0.13。

該版本Redis預設提供連線資訊:

通過修改 pig-config 中的 pig/pig-config/src/main/resources/config/application-dev.yml 來定義所有服務元件連線Redis的設定:

修改範例如下:

# Spring 相關
spring:
  redis:
    password: ${REDIS_PASS}
    host: ${REDIS_HOST}

部署 pig-ui

pig-ui 是一個由nodejs語言編寫的 vue專案,作為整個系統的前端靜態頁面。Rainbond目前已經支援原始碼構建 nodejs前端 專案,參考檔案:NodeJS前端語言

為了便於改造專案,所以將專案 fork 了一份進行修改,程式碼地址:

https://gitee.com/dazuimao1990/pig-ui

參照Rainbond程式碼支援規範,在程式碼根目錄下新增了識別檔案: nodestatic.json

{"path":"dist"}

並在程式碼倉庫中新增了nginx組態檔: www/web.conf 用於處理代理轉發:

server {
    listen       80;
    root   /app/www;
    location ~* ^/(code|auth|admin|gen) {
        proxy_pass http://127.0.0.1:9999;
        proxy_connect_timeout 15s;
        proxy_send_timeout 15s;
        proxy_read_timeout 15s;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

利用這份程式碼進行原始碼構建,即可完成 pig-ui 服務元件的部署。

依賴與埠梳理

服務元件名稱依賴埠對內服務埠對外服務
pig-uipig-gatewayoffon
pig-gatewaypig-eureka Redisonoff
pig-monitorpig-eureka Redisoffoff
pig-configpig-eurekaoffoff
pig-upms-bizpig-eureka pig-db Redisoffoff
pig-zipkinpig-eureka pig-db Redisoffon
pig-authpig-eureka Redisoffoff
pig-codegenpig-eureka pig-db Redisoffoff

最終成果

完成部署後,拓撲圖如下:

登陸效果:

登陸賬戶密碼:
admin
123456

以上就是Rainbond雲原生部署SpringCloud應用架構實踐的詳細內容,更多關於Rainbond部署SpringCloud架構的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com