Skip to main content

moregeek program

微服务开发平台 spring cloud blade 部署实践_rainbond的博客-多极客编程

本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台。Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于 React 和 Vue 的两个前端框架用于快速搭建企业级的 SaaS 多租户微服务平台。


关于 Spring Cloud Blade



  • 采用前后端分离的模式,前端开源两个框架:Sword (基于 React、Ant Design)、Saber (基于 Vue、Element-UI)
  • 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:BladeTool
  • BladeTool 已推送至Maven中央库,直接引入即可,减少了工程的臃肿,也可更注重于业务开发
  • 集成Sentinel从流量控制、熔断降级、系统负载等多个维度保护服务的稳定性。
  • 注册中心、配置中心选型Nacos,为工程瘦身的同时加强各模块之间的联动。
  • 极简封装了多租户底层,用更少的代码换来拓展性更强的SaaS多租户系统。
  • 借鉴OAuth2,实现了多终端认证系统,可控制子系统的token权限互相隔离。
  • 借鉴Security,封装了Secure模块,采用JWT做Token认证,可拓展集成Redis等细颗粒度控制方案。
  • 项目分包明确,规范微服务的开发模式,使包与包之间的分工清晰。

模块说明


SpringBlade
├── blade-auth -- 授权服务提供
├── blade-common -- 常用工具封装包
├── blade-gateway -- Spring Cloud 网关
├── blade-ops -- 运维中心
├ ├── blade-admin -- spring-cloud后台管理
├ ├── blade-develop -- 代码生成
├ ├── blade-resource -- 资源管理
├ ├── blade-seata-order -- seata分布式事务demo
├ ├── blade-seata-storage -- seata分布式事务demo
├── blade-service -- 业务模块
├ ├── blade-desk -- 工作台模块
├ ├── blade-log -- 日志模块
├ ├── blade-system -- 系统模块
├ └── blade-user -- 用户模块
├── blade-service-api -- 业务模块api封装
├ ├── blade-desk-api -- 工作台api
├ ├── blade-dict-api -- 字典api
├ ├── blade-system-api -- 系统api
└── └── blade-user-api -- 用户api

Spring Cloud Blade 完整部署的服务拓扑图



基于应用商店快速部署 Spring Cloud Blade


通过开源应用商店部署 Spring Cloud Blade,在 平台管理 -> 应用市场 -> 开源应用商店 中搜索 SpringBlade 并一键安装。


部署完成后,如上图 Spring Cloud Blade 完整部署的服务拓扑图 所示。



基于源码部署 Spring Cloud Blade


本篇文章基于 Spring Cloud Blade v3.5.0 版本部署。


一、部署 Nacos


通过开源应用商店部署 Nacos,在开源应用商店中搜索 Nacos单机 并选择安装 2.1.2 版本。


二、部署 Redis


通过开源应用商店部署 Redis,在开源应用商店中搜索 Redis 并选择安装 5.0.7 版本。


三、部署 Sentinel Dashboard


通过开源应用商店部署 Sentinel Dashboard,在开源应用商店中搜索 Sentinel-Dashboard 并选择安装 1.8.6 版本。


四、初始化数据库


从开源应用商店安装的 Nacos 自带了 Mysql 组件,进入该组件中 -> 端口 -> 打开对外服务,通过客户端工具连接。



  1. 创建 blade 数据库。
  2. 初始化表结构和数据:Blade SQL

五、部署 Blade 后端服务


1.基于源码创建组件,填写以下信息:


内容
组件名称 自定义
组件英文名称 自定义
仓库地址 https://gitee.com/smallc/SpringBlade
代码版本: Tag v3.5.0

2.检测出多模块构建,进入多模块构建页面




  1. 创建前,在多模块构建页面 -> 右侧修改按钮 -> 修改每个模块的启动命令,如下。
  2. 创建后,删除每个组件的默认端口,为每个组件添加对应的新端口和端口别名并打开端口的对内服务,如下。
  3. 修改完成后构建组件。


组件 端口 启动命令
blade-auth 8100 web: java $JAVA_OPTS -jar blade-auth/target/blade-auth.jar
blade-gateway 80 web: java $JAVA_OPTS -jar blade-gateway/target/blade-gateway.jar
blade-admin 7002 web: java $JAVA_OPTS -jar blade-ops/blade-admin/target/blade-admin.jar
blade-develop 7007 web: java $JAVA_OPTS -jar blade-ops/blade-develop/target/blade-develop.jar
blade-report 8108 web: java $JAVA_OPTS -jar blade-ops/blade-report/target/blade-report.jar
blade-resource 8010 web: java $JAVA_OPTS -jar blade-ops/blade-resource/target/blade-resource.jar
blade-swagger 18000 web: java $JAVA_OPTS -jar blade-ops/blade-swagger/target/blade-swagger.jar
blade-desk 8105 web: java $JAVA_OPTS -jar blade-service/blade-desk/target/blade-desk.jar
blade-log 8103 web: java $JAVA_OPTS -jar blade-service/blade-log/target/blade-log.jar
blade-system 8106 web: java $JAVA_OPTS -jar blade-service/blade-system/target/blade-system.jar
blade-user 8102 web: java $JAVA_OPTS -jar blade-service/blade-user/target/blade-user.jar

3.编辑依赖关系,切换到 编排模式 拖动组件进行依赖关系建立。



4.进入 Nacos 组件内 -> 端口 -> 打开 8848 端口的对外服务,访问 Nacos 并登录,默认用户密码 nacos/nacos,创建配置文件。


创建 blade.yaml 配置文件,内容如下:


#服务器配置
server:
undertow:
# 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
buffer-size: 1024
# 是否分配的直接内存
direct-buffers: true
# 线程配置
threads:
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
io: 16
# 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
worker: 400

#spring配置
spring:
cloud:
sentinel:
eager: true
devtools:
restart:
log-condition-evaluation-delta: false
livereload:
port: 23333

#feign配置
feign:
sentinel:
enabled: true
okhttp:
enabled: true
httpclient:
enabled: false

#对外暴露端口
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always

#knife4j配置
knife4j:
#启用
enable: true
#基础认证
basic:
enable: false
username: blade
password: blade
#增强配置
setting:
enableSwaggerModels: true
enableDocumentManage: true
enableHost: false
enableHostText: http://localhost
enableRequestCache: true
enableFilterMultipartApis: false
enableFilterMultipartApiMethodType: POST
language: zh-CN
enableFooter: false
enableFooterCustom: true
footerCustomContent: Copyright © 2022 SpringBlade All Rights Reserved

#swagger配置信息
swagger:
title: SpringBlade 接口文档系统
description: SpringBlade 接口文档系统
version: 3.5.0
license: Powered By SpringBlade
licenseUrl: https://bladex.vip
terms-of-service-url: https://bladex.vip
contact:
name: smallchill
email: smallchill@163.com
url: https://gitee.com/smallc

#blade配置
blade:
token:
sign-key: 请配置32位签名提高安全性
xss:
enabled: true
skip-url:
- /weixin
secure:
skip-url:
- /test/**
client:
- client-id: sword
path-patterns:
- /sword/**
- client-id: saber
path-patterns:
- /saber/**
tenant:
column: tenant_id
tables:
- blade_notice

创建 blade-dev.yaml 配置文件,内容如下:


#spring配置
spring:
redis:
##redis 单机环境配置
host: 127.0.0.1
port: 6379
password:
database: 0
ssl: false

#项目模块集中配置
blade:
#通用开发生产环境数据库地址(特殊情况可在对应的子工程里配置覆盖)
datasource:
dev:
url: jdbc:mysql://127.0.0.1:3306/blade?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8
username: root
password: root

更新或重启除 Nacos Mysql Redis Sentinel Dashboard 之外的所有组件。


六、部署 Blade 前端 Saber



  1. 基于源码创建组件,填写以下信息:

内容
组件名称 自定义
组件英文名称 自定义
仓库地址 https://gitee.com/zhangbigqi/Saber.git
代码版本 v3.5.0


  1. 进入 Saber 组件内 -> 端口 -> 删除默认端口,新增 8080 端口并打开对外服务。
  2. 编辑依赖关系,切换到 编排模式 拖动组件进行依赖关系建立,将 Saber 依赖 blade-gateway 并更新组件。
  3. 使用默认域名访问 Saber UI 并登录。

部署完成后,如上图 Spring Cloud Blade 完整部署的服务拓扑图 所示。


©著作权归作者所有:来自51CTO博客作者Rainbond云原生的原创作品,请联系作者获取转载授权,否则将追究法律责任

lamp平台部署及应用_段嘉许的博客-多极客编程

LAMP平台部署及应用📒博客主页: ​​微笑的段嘉许博客主页​​ 🎉欢迎关注🔎点赞👍收藏⭐留言📝📌本文由微笑的段嘉许原创!📆51CTO首发时间:🌴2022年12月日5🌴✉️坚持和努力一定能换来诗与远方!🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!⭐本文介绍⭐LAMP是指一组通常一起使用来运行动态网站​或者服务器的自由软件名称首字母缩写。📝

容器指南之日常运维_虚拟的现实的博客-多极客编程

1.故障定位1.1.查看容器内部 https 请求响应时间docker exec -t $(docker ps -f name=blog_web -q) curl -H 'X-Forwarded-Proto:https' \-w %{time_total} -o /dev/null -s localhost1.2.查看容器日志docker logs --tail 50 --follow --tim

hummerrisk 入门3:开发手册_mb62f1cd5a97d30的博客-多极客编程

本文是 HummerRisk 的开发手册,介绍项目的结构及如何配置 HummerRisk 的开发环境和开发中的注意事项,快速参与到 HummerRisk 项目的开发中来。一、项目结构二、配置开发环境1、环境准备后端HummerRisk 后端使用了 Java 语言的 Spring Boot 框架,并使用 Maven 作为项目管理工具。开发者需要先在开发环境中安装 JDK 11 及 Maven。前端H

docker for windows 安装配置及常用维护_虚拟的现实的博客-多极客编程

1.简介容器技术最早是从Linux 环境产生并持续发展,Windows 是在新的 CEO 上台后才开始转向开源并拥抱Linux。容器相对虚拟化更轻量,资源占用更少。虽然Linux 环境有 Mono 组件可以实现 .net 架构的资源配置与使用,但是兼容性和复杂性也让快速搭建开发和测试环境的想法难以实现。Windows 系统原生支撑容器是最简便的方法,可以在不更改 .net 开发和配置文件的前提下快

文盘rust -- r2d2 实现redis连接池_京东云官方的博客-多极客编程

作者:贾世闻我们在开发应用后端系统的时候经常要和各种数据库、缓存等资源打交道。这一期,我们聊聊如何访问redis 并将资源池化。在一个应用后端程序访问redis主要要做的工作有两个,单例和池化。在后端应用集成redis,我们主要用到以下几个crate:​​once_cell​​​、​​redis-rs​​​、​​r2d2​​​.once_cell 实现单例;redis-rs 是 redis的 ru

docker 基础和常用命令_嵌入式视觉的博客-多极客编程

一,Docker 简介 1.1,什么是 Docker 1.2,Docker 与虚拟机的区别 1.3,Docker 架构 1.4,为什么用 Docker 二,Docker 基本概念 2.1,镜像 2.2,容器 2.3,仓库 三,Docker 使用 3.1,Docker 服务 3.2,下载与使用Docker公共镜像(Images) 四,Docker 镜像命令 五,Docker 容器

k8s 调度不合理解决方案如下-临时方案_赵承胜博客的博客-多极客编程

K8s问题一 ​服务获取pod ip (个人认为) 不合理,集群内部推荐使用cluster ip ​集群外部使用​问题二​K8s 调度不合理问题排查​方案一​修改matser ,node节点 最大pod 数量 (需要评估总共pod 数量,以及各节点需要分配的pod 数量)以达到 均衡的目的​以下为本地实验案例没问题可以先上测试​修改master 节点数 数(多master 都需要修改)​1、sys

kubernetes通过hostaliases自定义hosts_对你无可奈何的博客-多极客编程

背景: 今天突然就有了那么一个需求,记录一下:腾讯云的redis内网地址都是IP的方式。我们的服务注册在了nacos中。小伙伴本地测试链接上nacos(nacos开通了外网访问),获取redis中redis配置都是内网的redis IP故无法加入注册到集群。同事问我能不能将Redis ip设置成域名的方式,那样他本地好歹能做个假的解析做一个欺骗把服务启动起来?(懒得改代码毕竟) 正好就搜到了这两篇

「开源摘星计划」harbor日志轮转:从日志优化harbor性能!_键客李大白的博客-多极客编程

【摘要】Harbor新版功能:日志轮转,从日志优化Harbor性能。 本文已参与「开源摘星计划」,欢迎正在阅读的你加入。 活动链接:​ ​https://github.com/weopenprojects/WeOpen-Star [文章来源]:《Harbor进阶实战》公众号 前言   在Harbor 2.6.0版本后,Harbor添加了日志轮换(logrotate)的功能。   默认情况下,H

tekton pipline概念及调用流程_杨恒泰的博客-多极客编程

官网:​​https://tekton.dev/docs/getting-started/tasks/​​概念:task:一个task即一个任务,一个任务运行一个podstep:一个task包含多个step。一个step包含一个容器taskrun:  task引用taskrun来运行taskpipline:由多个task组成的pipline(流水线)piplinerun:pipline引用pipl

如何排查:the connection to the server ip:6443 was refused - did you specify the right host or port_kiroct的博客-多极客编程

一、概述 1、k8s有时候会报错The connection to the server ip:6443 was refused - did you specify the right host or port ,本文档提供几种可能产生该报错的原因和排障思路。 三、发现问题 使用任意Kubectl 命令会报错:The connection to the server ip:6443 was ref

手把手教你一套完善且高效的k8s离线部署方案-多极客编程

作者:郝建伟背景面对更多项目现场交付,偶而会遇到客户环境不具备公网条件,完全内网部署,这就需要有一套完善且高效的离线部署方案。系统资源编号主机名称IP资源类型CPU内存磁盘01k8s-master110.132.10.91CentOS-74c8g40g02k8s-master110.132.10.92CentOS-74c8g40g03k8s-master110.132.10.93CentOS-74