这个一个基础架构项目,以目前最新的技术栈输出最好的示例,以实现拿来即用的开发框架脚手架。项目结构主要采用微服务 Spring Cloud 系的技术栈实现,是一个非常好用的轮子,欢迎大家指错,一起进步。
Demo站点仅支持ipv6用户访问,因为demo站点是使用我私有的小服务器搭建的的ipv6的方式映射的,详见:我另外一个仓库(暂时没完善) 默认账号:admin 默认密码:123456
没条件搞服务器都挂了
实现功能 | 是否已实现 |
---|---|
Spring Cloud 微服务化 | √ |
整合 OAuth2.1 | √ |
OAuth2.1 加入JWT增强 | √ |
独立授权服务器 | √ |
RBAC 动态权限管理 | √ |
动态分配菜单 | √ |
整合服务熔断 Sentinel | - |
整合消息队列 RocketMQ | - |
整合查询中间件 Elasticsearch | - |
openapi文档查看、导出 | √ |
实现分布式定时任务 | - |
加入分布式事务 | - |
引入分布式存储 MinIO | √ |
加入 OAuth2 实现第三方登陆 | √ |
加入Dockerfile直接打包部署到服务器 | - |
从零开始实现工作流引擎 | - |
实现低代码流程引擎 | - |
尝试切换指 JDK17 及 Spring Boot3 | - |
组件功能 | 组件 |
---|---|
服务发现 | Nacos |
配置中心 | Nacos |
服务熔断 | Sentinel |
分布式事务 | Seata |
消息队列 | RocketMQ |
该项目使用的相关技术/工具主要有:
- Spring Cloud / Spring Cloud Alibaba
- Spring Boot
- Spring Security
- OAuth2.1
- JWT
- React
- Typescript & ES6
- Redis
- openapi
- Docker
- JDK 1.8
- Gradle 7.0+
- Node.JS 16.x.x
best-cloud -- 父项目,各模块分离,方便集成和微服务
│ │─authorize -- 授权服务器
│ │ ├─authorize-server -- 授权服务器-后台应用
│ │ ├─authorize-web -- 授权服务器-前端模块
│ │─client -- 前端应用
│ ├─common -- 核心通用模块,主模块
│ │ ├─common-core -- 封装通用模块
│ │ ├─common-minio -- 封装 minio 配置模块
│ │ ├─common-mybatis -- 封装 mybatis 配置模块
│ │ ├─common-redis -- 封装 redis 配置模块
│ │ ├─common-web -- 封装 web 常用基础模块
│ │─doc -- 文档
│ │─gateway -- 统一网关模块 [8088]
│ │─generator -- 代码生成器
│ │─authorize -- 统一认证中心模块 [9000]
│ │─uaa -- 系统用户管理模块,主模块
│ │ ├─uaa-api -- 系统用户管理的通用模块,供其他模块引用
│ │ ├─uaa-biz -- 系统用户管理模块核心功能 [9500]
│ │─oauth -- oauth 管理模块
│ │ ├─oauth-api -- oauth 管理的通用模块,供其他模块引用
│ │ ├─oauth-biz -- oauth 管理模块核心功能 [9600]
│ │─glbpm -- 流程引擎模块
│ │ ├─glbpm-api -- 流程引擎的通用模块,供其他模块引用
│ │ ├─glbpm-biz -- 流程引擎模块核心功能 [9700]
authorize-server
项目依赖 authorize-web
项目
authorize-web
为前端项目,因为打包太慢所以平常都注释了 processResources.dependsOn(':authorize:authorize-web:buildWeb')
,使用手动打包将前端生成的 dist
里面的所有文件放在 authorize-server
项目中的 /resources/static/front
请查看 /docs/sql/uaa.sql
生成密钥库jwt.jks
# 生成RSA证书
# genkey 生成密钥
# alias 别名
# keyalg 密钥算法
# keypass 密钥口令
# keystore 生成密钥库的存储路径和名称
# storepass 密钥库口令
keytool -genkey -alias best-cloud -keyalg RSA -keypass 123456 -storepass 123456 -keystore jwt.jks
keytool -genkey -alias <alias> -keyalg RSA -keypass <keypass> -keystore <filename>.jks -storepass <storepass>
1. 启动 Nacos (详细文档)
-
下载/更新源码或下载发行包,详细点击查看
- 直接下载:Nacos Server 下载页
- 源码构建:进入 Nacos Github 项目页面 ,将代码 git clone 到本地自行编译打包,参考此文档 。
-
启动Nacos
Linux/Unix/Mac 启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
Windows 启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
- Docker 启动
mkdir -p /home/nacos/logs/ #新建logs目录
mkdir -p /home/nacos/init.d/
vim /home/nacos/init.d/custom.properties #修改配置文件
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
# 单机模式 Derby
docker-compose -f example/standalone-derby.yaml up
# 如果希望使用MySQL5.7
docker-compose -f example/standalone-mysql-5.7.yaml up
# 如果希望使用MySQL8
docker-compose -f example/standalone-mysql-8.yaml up
# 集群模式
docker-compose -f example/cluster-hostname.yaml up
docker run -d \
--restart=always \
--name nacos-standalone \
-e MODE=standalone \
-p 8848:8848 \
-p 9848:9848 \
-p 9849:8849 \
nacos/nacos-server:v2.0.4
- K8S
git clone https://github.com/nacos-group/nacos-k8s.git
2. 启动 Sentinel (详细文档)
-
首先需要获取 Sentinel 控制台,支持直接下载和源码构建两种方式。
- 直接下载:下载 Sentinel 控制台
- 源码构建:进入 Sentinel Github 项目页面 ,将代码 git clone 到本地自行编译打包,参考此文档 。
-
启动控制台,执行 Java 命令
java -jar sentinel-dashboard.jar
完成 Sentinel 控制台的启动。 控制台默认的监听端口为 8080。Sentinel 控制台使用 Spring Boot 编程模型开发,如果需要指定其他端口,请使用 Spring Boot 容器配置的标准方式,详情请参考 Spring Boot 文档 。
-
Docker 启动
Sentinel 没有官方的镜像,所以使用Dockerfile构建镜像
(请看路径/middleware/sentinel)
docker run \ --name sentinel \ -p 18080:18080 \ -d sentinel-dashboard:1.8.0
- 文档
- Docker 启动
# 创建一个存储的文件夹进行映射,我这里的环境是使用虚拟机,直接用硬盘映射到虚拟机测试
# 默认账号密码:minioadmin:minioadmin
mkdir -p /root/docker/minio/{data,config}
docker run -d \
--restart always \
-p 9100:9000 \
-p 9101:9001 \
-v /root/docker/minio/data:/data \
-v /root/docker/minio/config:/root/.minio \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin" \
quay.io/minio/minio server /data --console-address ":9001"