Rainbond 部署 SpringCloud架構應用實踐

示例項目詳情

本文檔以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模塊

{{% notice note %}}
只需要將服務模塊在Rainbond中構建出來即可。
{{% /notice %}}

經過梳理,該項目需要構建的服務組件包括:

啓動順序 服務組件名稱 運行端口 組件功能
1 pig-eureka 8761 spring cloud 服務發現註冊與發現
2 pig-config 8888 spring cloud 配置中心
3 pig-gateway 9999 spring cloud 微服務網關
4 pig-auth 3000 授權服務提供
5 pig-upms-biz 4000 通用用戶權限管理系統業務處理模塊
6 pig-monitor 5001 Spring Boot Admin監控
7 pig-codegen 5003 圖形化代碼生成
8 pig-zipkin 5002 微服務鏈路跟蹤
9 pig-ui 80 前端項目(vue項目)

部署環境說明:

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

中間件或環境要求 版本要求 備註
JDK 1.8 強制要求版本
MySQL 5.7+ 強制要求版本
Redis 3.2 + 強制要求版本
node 8.0 + 用於運行前端項目
npm 6.0 + 用於構建前端項目

項目鏈接:

模塊構建

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

獲取項目克隆/下載地址: https://gitee.com/log4j/pig.git

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

{{% notice note %}}
上述的參數指定了普通的子模塊構建方式,對於另一種子模塊中的子模塊,比如 pig-codegen 模塊,參數指定的方式爲: clean dependency:list install -pl pig-visual/pig-codegen -am
{{% /notice %}}

在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:

https://github.com/dazuimao1990/percona-mysql/blob/pig/5.7/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

{{% notice note %}}
在代碼倉庫地址url的最後添加 ?dir=5.7 可以讓Rainbond將構建目錄指定爲代碼倉庫根目錄下的 5.7 文件夾。
{{% /notice %}}

爲了讓數據庫正常工作,並且可以被其它依賴的本數據庫的應用獲取連接信息,需要設置若干環境變量:

環境變量名稱 環境變量值 設置位置
MYSQL_USER root 連接信息
MYSQL_HOST 127.0.0.1 連接信息
MYSQL_PORT 3306 連接信息
MYSQL_ROOT_PASSWORD mysqlpassword 連接信息
MYSQL_DATABASE pig 連接信息

通過修改 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-ui pig-gateway off on
pig-gateway pig-eureka Redis on off
pig-monitor pig-eureka Redis off off
pig-config pig-eureka off off
pig-upms-biz pig-eureka pig-db Redis off off
pig-zipkin pig-eureka pig-db Redis off on
pig-auth pig-eureka Redis off off
pig-codegen pig-eureka pig-db Redis off off

最終成果

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

登陸效果:

登陸賬戶密碼:
admin
123456
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章