简介
zebra-ruoyi-plus后台管理系统是基于RuoYi-Vue-Plus多租户权限管理系统代码进行改造及调整,主要为后端代码整合了zebra框架简化了代码量,并重构了模块的划分,使其代码层次更清晰,结构更简洁,而在核心功能上没有任何变化,如想要了解关于功能详情,请参见RuoYi-Vue-Plus 多租户权限管理系统官网 https://plus-doc.dromara.org
项目源码
源码地址 | |
---|---|
前端 | https://gitee.com/zhanghongbin/zebra-ruoyi-plus-ui |
后端 | https://gitee.com/zhanghongbin/zebra-ruoyi-plus-admin |
版本说明
基于RuoYi-Vue-Plus以下版本进行改造,版本号保持和RuoYi-Vue-Plus一致
名称 | RuoYi-Vue-Plus版本 | zebra-ruoyi-plus版本 |
---|---|---|
前端 | 2.2 | 2.2 |
后端 | 5.3.0 | 5.3.0 |
因历史原因,前端版本和后端版本没有和RuoYi-Vue-Plus保持一致,接下来的版本会保持一致
变化点说明
- 技术变化点
名称 | zebra-ruoyi-plus | RuoYi-Vue-Plus |
---|---|---|
jdk版本 | jdk11 | jdk17 |
核心依赖 | 依赖zebra框架 | 依赖ruoyi-common模块 |
模块 | zebra-admin-common,zebra-admin-storage,zebra-admin-system | ruoyi-admin,ruoyi-common,ruoyi-extend,ruoyi-modules |
表结构 | 主要支持mysql,并对部分表结构及字段进行微调 | 支持多种数据库 |
- 表结构差异详情
类型 | 变化表名 |
---|---|
删除 | gen_table,gen_table_column,sys_logininforsys_oss,sys_oss_config,sys_tenant_package |
新增 | sys_audit_log(审计日志表),sys_operation_log(操作日志表)sys_resource(资源表) |
注:图片左侧为RuoYi-Vue-Plus表结构,右侧为zebra-ruoyi-plus表结构
表名 | 变化字段 |
---|---|
sys_client | ![]() |
sys_config | ![]() |
sys_dept | ![]() |
sys_dict_data | ![]() |
sys_dict_type | ![]() |
sys_menu | ![]() |
sys_notice | ![]() |
sys_post | ![]() |
sys_role | ![]() |
sys_tenant | ![]() |
sys_user | ![]() |
sys_user_post | ![]() |
sys_user_role | ![]() |
- 功能变化点
名称 | zebra-ruoyi-plus | RuoYi-Vue-Plus |
---|---|---|
系统监控 | 去掉 | 有 |
工作流 | 去掉,建议采用zebra-flow工作流系统 | 有 |
文件管理 | 去掉 | 有 |
参数设置 | 去掉 | 有 |
租户套餐管理 | 去掉 | 有 |
在线演示
演示地址: http://admin.zhanghongbin.xyz
用户 | 账号 | 密码 |
---|---|---|
超级管理员 | admin | admin123 |
- 演示环境不要放置个人重要数据,并请不要故意破坏线上数据
- 演示环境服务器相关配置较低,恶意大规模访问ip会被封
- 演示环境针对部分功能或数据限制了修改、删除等操作
快速开始
1. 前端
运行环境 | 演示环境版本 | 建议版本 | 描述 |
---|---|---|---|
node | 18.0.0 | >=18.0.0 | windows建议安装nvm-desktop可以多版本切换 |
# 克隆项目
git clone https://gitee.com/zhanghongbin/zebra-ruoyi-plus-ui.git
# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 启动服务
npm run dev
# 构建生产环境
npm run build:prod
# 前端访问地址 http://localhost:80
在 env环境下增加了minio的配置,通常在开发模式下,找到.env.development文件中的VITE_STORAGE_PATH 变量配置上minio的api访问地址即可,而正式环境下通常使用nginx做为minio转发,需要在nginx上进行配置。
更多信息和资料请参见官方网址 https://plus-doc.dromara.org/#/plus-ui/home
2. 后端
运行环境 | 演示环境版本 | 建议版本 |
---|---|---|
jdk | Liberica JDK 11 | 11 |
maven | 3.8.3 | >=3.8.3 |
mysql | 8.0.27 | >=8.0.27 |
redis | 7.4.2 | >=6.2.6 |
minio | RELEASE.2025-02-03T21-03-04Z |
- 下载项目
# 克隆项目
git clone https://gitee.com/zhanghongbin/zebra-admin.git
- 创建数据库
建立好数据库后,从项目下找到db目录中的zebra-admin-mysql.sql文件并执行
minio创建bucket
修改项目配置
用开发工具打开项目,首先找到zebra-admin-common模块下resources目录中的application-common.yml文件进行修改
主要修改内容为:
数据库地址,端口,数据库名称,数据库用户名,数据库密码
redis地址,端口,密码
继续找到zebra-admin-storage模块下resources目录中的application-storage.yml文件进行修改
修改内容为minio配置
- 启动程序
前端项目开发
前端代码结构没有变化,具体参考前端官网相关文档 https://plus-doc.dromara.org/#/plus-ui/home
后端项目开发
项目结构
zebra admin 工程为多级模块项目,默认模块为:
. zebra-admin
├──zebra-admin-common 公共模块,包括公共代码和配置文件
├──zebra-admin-storage 存储模块,主要采用minio存储
├──zebra-admin-system 系统模块,包括用户,部门等等功能代码
zebra-admin 通常为单体多模块项目,当然也可以做为微服务项目但需要自己去引入依赖及微服务相关治理组件,暂时不建议把此项目做为微服务项目。
如果要加新的功能,通常情况下根据情况可以建立一个或多个业务模块,如果只有一个模块也叫单业务模块并且此模块为启动模块,模块命名方式建议为 组织名称-系统名称-service。
单业务模块示例如下:
建议使用业务版本,而不是后台管理版本,也不议把后台管理版本号改成业务版本号,这样对于日后后台升级版本维护比较清晰
- pom 增加以下依赖
<groupId>com.ninemax.crm</groupId>
<artifactId>ninemax-crm-service</artifactId>
<version>业务版本号</version>
<dependencies>
<dependency>
<groupId>org.zebra</groupId>
<artifactId>zebra-admin-storage</artifactId>
<version>${admin.version}</version>
<exclusions>
<exclusion>
<groupId>org.zebra</groupId>
<artifactId>zebra-admin-common</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.zebra</groupId>
<artifactId>zebra-admin-common</artifactId>
<version>${admin.version}</version>
</dependency>
<dependency>
<groupId>org.zebra</groupId>
<artifactId>zebra-admin-system</artifactId>
<version>${admin.version}</version>
<exclusions>
<exclusion>
<groupId>org.zebra</groupId>
<artifactId>zebra-admin-storage</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
- application.yml 增加以下内容,引入common,storage,system 资源
spring:
profiles:
active: @profiles.active@
include: common,storage,system
flyway:
baseline-on-migrate: true
schemas: flyway
table: flyway_schema_history_test
enabled: false
注意必须配置flyway,如果不使用需要把enabled设置为false,建议采用flayway对sql进行管理。
3. 启动程序
/**
* 启动程序
*
* @author zhanghongbin
*/
@EnableZebra
@EnableMethodCache(basePackages = {"org.zebra.admin.auth", "org.zebra.admin.sys","com.ninemax.crm"})
@SpringBootApplication
@Import(SystemApplication.class)
public class CrmApplication {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(CrmApplication.class);
application.setApplicationStartup(new BufferingApplicationStartup(2048));
application.run(args);
}
}
多业务模块示例如下:
模块命名方式建议为:系统名称-moudle-功能名称,此外还必须有以上启动模块,示例如下:
在 zebra-admin-parent pom文件中增加依赖
<dependencies>
<dependency>
<groupId>com.ninemax.crm</groupId>
<artifactId>crm-module-order</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
默认模块介绍
默认模块是在RuoYi-Vue-Plus基础上进行调整和部分重构,主要分为三个模块,在没有业务模块的情况下通常zebra-admin-system做为启动模块, 三个模块分别为:
zebra-admin-common 模块
主要介绍下公共模块核心内容,具体详情请看源码。
名称 | 描述 |
---|---|
AdminConfig | 主要对数据填充和satoken权限进行数据初始化 |
CurrentLoginUserDto | 用户登录后的对象模型。LoginHelper 方法中获取的LoginUser对象都是CurrentLoginUserDto |
LogicDeleteAuditedEntity | 带逻辑删除的审计实体,如果有逻辑删除实体可以继承此类 |
LogicDeleteTenantAuditedEntity | 带逻辑删除的租户审计实体,如果有逻辑删除实体可以继承此类 |
OperationLogHandler | 行为和审计日志的事件监听类 |
RuoYiServicePlusImpl | ruoyi mybatis plus 适配,service实现类可以继承,也可以不使用 |
application-common.yml | 公共的资源文件,常用的公共配置,如mongodb,redis等 |
application-dev.yml,application-prod.yml ,application-test.yml | 环境资源文件,主要配置的zebra框架内容,没有特殊情况不需要更改及增加新内容 |
zebra-admin-storage 模块
存储模块采用minio进行资源保存,核心内容如下:
名称 | 描述 |
---|---|
StorageController | 提供文件上传和删除接口 |
application-storage.yml | minio配置 |
zebra-admin-system 模块
此模块代码来源ruoyi,只有少量的结构和命名的调整,不做具体详细描述。
项目部署
- 安装中间件(如果存在请忽略这一步)
以下为 docker compose 配置,具体根据实际情况调整
services:
mysql:
image: mysql:8.0.27
container_name: mysql
environment:
# 时区上海
TZ: Asia/Shanghai
# root 密码
MYSQL_ROOT_PASSWORD: root
ports:
- "3306:3306"
volumes:
# 数据挂载
- /docker/mysql/data/:/var/lib/mysql/
# 配置挂载
- /docker/mysql/conf/:/etc/mysql/conf.d/
command:
# 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
privileged: true
network_mode: "host"
nginx-web:
image: nginx:1.23.4
container_name: nginx-web
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "80:80"
- "443:443"
volumes:
# 证书映射
- /docker/nginx/cert:/etc/nginx/cert
# 配置文件映射
- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
# 页面目录
- /docker/nginx/html:/usr/share/nginx/html
# 日志目录
- /docker/nginx/log:/var/log/nginx
privileged: true
network_mode: "host"
redis:
image: redis:7.4.2
container_name: redis
ports:
- "6379:6379"
environment:
# 时区上海
TZ: Asia/Shanghai
volumes:
# 配置文件
- /docker/redis/conf:/redis/config:rw
# 数据文件
- /docker/redis/data/:/redis/data/:rw
command: "redis-server /redis/config/redis.conf"
privileged: true
network_mode: "host"
minio:
image: minio/minio:RELEASE.2023-04-13T03-08-07Z
container_name: minio
ports:
# api 端口
- "9000:9000"
# 控制台端口
- "9001:9001"
environment:
# 时区上海
TZ: Asia/Shanghai
# 管理后台用户名
MINIO_ROOT_USER: ruoyi
# 管理后台密码,最小8个字符
MINIO_ROOT_PASSWORD: ruoyi123
# https需要指定域名
#MINIO_SERVER_URL: "https://xxx.com:9000"
#MINIO_BROWSER_REDIRECT_URL: "https://xxx.com:9001"
# 开启压缩 on 开启 off 关闭
MINIO_COMPRESS: "off"
# 扩展名 .pdf,.doc 为空 所有类型均压缩
MINIO_COMPRESS_EXTENSIONS: ""
# mime 类型 application/pdf 为空 所有类型均压缩
MINIO_COMPRESS_MIME_TYPES: ""
volumes:
# 映射当前目录下的data目录至容器内/data目录
- /docker/minio/data:/data
# 映射配置目录
- /docker/minio/config:/root/.minio/
command: server --address ':9000' --console-address ':9001' /data # 指定容器中的目录 /data
privileged: true
network_mode: "host"
相关文件RuoYi-Vue-Plus直接下载
nginx https://gitee.com/dromara/RuoYi-Vue-Plus/blob/5.X/script/docker/nginx/conf/nginx.conf
redis https://gitee.com/dromara/RuoYi-Vue-Plus/blob/5.X/script/docker/redis/conf/redis.conf
- 构建后台管理系统 dockerfile
# 执行 package 后,把根目录下的dockerfile文件和 zebra-admin-system target目录下 zebra-admin-system-5.3.0.jar 拷贝到服务器上
docker build -t zebra-ruoyi-plus:5.3.0 .
- 把根目录下的 docker-compose.yml 放到服务器上并执行