示例項目詳情
本文檔以
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包,通過
或者tomcat等方式啟動,開放某個端口提供服務的,即是服務,如Pig中的java -jar
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以
為例,示範從源碼開始建構流程:
- 為
添加服務元件 —— 從源碼開始 —— 自定義倉庫: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
:
https://github.com/dazuimao1990/percona-mysql/blob/pig/5.7/DockerfileFROM 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的最後添加可以讓Rainbond将建構目錄指定為代碼倉庫根目錄下的
?dir=5.7
檔案夾。
5.7
為了讓資料庫正常工作,并且可以被其它依賴的本資料庫的應用擷取連接配接資訊,需要設定若幹環境變量:
環境變量名稱 | 環境變量值 | 設定位置 |
---|---|---|
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
服務元件的部署。
依賴與端口梳理
依賴 | 端口對内服務 | 端口對外服務 | |
---|---|---|---|
off | on | ||
pig-eureka Redis | |||
pig-eureka pig-db Redis | |||
最終成果
完成部署後,拓撲圖如下:
登陸效果:
登陸賬戶密碼:
admin
123456