使用若依提供的开源免费的后天管理系统,搭建自己的后台,方便自己做二次开发,权限管理系统其实时一个公共的东西,有人开发好了且开源了,我们拿过来用就是。毕竟互联网的真谛就是资源共享的嘛。
我将会把这套基于微服务的项目部署到腾讯云,作为自己的部分服务。非常感谢这么好的项目能开源。接下来看一下若依的后台管理系统到底是什么样的。
平台简介
若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。
- 采用前后端分离的模式,微服务版本前端(基于RuoYi-Vue)。
- 后端采用Spring Boot、Spring Cloud & Alibaba。
- 注册中心、配置中心选型Nacos,权限认证使用Redis。
- 流量控制框架选型Sentinel,分布式事务选型Seata。
系统模块
com.ruoyi├── ruoyi-ui // 前端框架 [80]
├── ruoyi-gateway // 网关模块 [8080]
├── ruoyi-auth // 认证中心 [9200]
├── ruoyi-api // 接口模块
│ └── ruoyi-api-system // 系统接口
├── ruoyi-common // 通用模块
│ └── ruoyi-common-core // 核心模块
│ └── ruoyi-common-datascope // 权限范围
│ └── ruoyi-common-datasource // 多数据源
│ └── ruoyi-common-log // 日志记录
│ └── ruoyi-common-redis // 缓存服务
│ └── ruoyi-common-security // 安全模块
│ └── ruoyi-common-swagger // 系统接口
├── ruoyi-modules // 业务模块
│ └── ruoyi-system // 系统模块 [9201]
│ └── ruoyi-gen // 代码生成 [9202]
│ └── ruoyi-job // 定时任务 [9203]
│ └── ruoyi-file // 文件服务 [9300]
├── ruoyi-visual // 图形化管理模块
│ └── ruoyi-visual-monitor // 监控中心 [9100]
├──pom.xml // 公共依赖
架构图
内置功能
相信到了这里就能了解这套系统了,其实就是一个开源的后台管理系统,实现了一些基础功能,这这公共的东西也都是大家所需要的。话不多说,撸起袖子开始干吧!
安装基础软件
- 1、mysql(数据库)
- 2、redis(缓存)
- 3、minio(也可以选择fastdfs)【文件存储】
- 4、nacos(注册/配置中心)
这些是需要的最少的组件,我已经安装好了,如果不知道的可以查看一下怎么安装。
配置防火墙
我一般都是配置一个IP段,只能让这个IP段的网络可以访问云上资源。云上的端口不限制IP(设置为0.0.0.0)非常危险,资源随时可能被黑客那个,最终可能沦为肉鸡(被拿去挖矿)。
配置规则
源IP填写为27.9.8.0/24 表示27.9.8.*源IP填写为27.9.0.0/16 表示27.9.*.*
要部署的模块
- 注册与配置中心(nacos) 已经部署
- 基础服务-文件服务(文件上传下载等)
- 基础服务-代码生成服务(代码生成,方便二开)
- 基础服务-任务调度中心(定时任务调度)
- 业务服务-系统管理(用户角色权限等管理)
- 认证中心(auth),用于用户权限认证
- 网关(gateway),作为微服务对外的统一入口,一般内部网关前还会加一层nginx
- 扩展服务(监控中心,暂时不部署)
- 前端服务(打成静态文件,放在nginx静态文件目录)
文件服务启动修改
首先看config目录下的文件,发现就是我们要配置的,于是定义了如下配置文件
# Tomcatserver:
port: 9201
# Spring
spring:
application:
# 应用名称
name: ruoyi-system
profiles:
# 环境配置
active: dev
cloud:
nacos:
discovery:
# 指定命名空间
namespace: ${spring.profiles.active}
# 服务注册地址
server-addr: 你的IP地址:8848
config:
# 指定命名空间
namespace: ${spring.profiles.active}
# 配置中心地址
server-addr: 你的IP地址:8848
# 配置文件格式
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
注意,服务所有的配置bootstrap.yml配置文件除了服务名和端口不一样,其余都是一样的
nacos配置文件ruoyi-file-dev.yml(项目+环境+后缀)
minio:url: http://162.14.74.11:9000
accessKey: minioadmin
secretKey: minioadmin?
bucketName: ry-file
file:
path: /myupload
prefix: c:/upload
domain:
fdfs:
domain:
文件上传实现有几种,有minio/fastdfs/local 使用@Primary选择哪个为要使用的,默认是local
启动项目,并测试文件上传接口
测试文件上传
查看minio上的图片
预览图片
生成代码服务
这个服务里面就是操作mysql的tables等表,实现从数据库的表和字段生成代码,通过模板渲染
配置文件就是配置了数据库相关和redis相关配置, nacos上的配置文件如下
# spring配置spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://162.14.74.11:3306/permission_mgr_sys?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
username: root
password: root
redis:
host: 162.14.74.11
port: 6379
database: 0
username:
password:
lettuce:
pool:
enabled: false
jedis:
pool:
enabled: true
max-idle: 8
min-idle: 0
max-active: 8
max-wait: -1ms
# mybatis配置
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.gen.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mapper/**/*.xml
# swagger配置
swagger:
title: 代码生成接口文档
license: Powered By ruoyi
licenseUrl: https://ruoyi.vip
# 代码生成
gen:
# 作者
author: ruoyi
# 默认生成包路径 system 需改成自己的模块名称 如 system monitor tool
packageName: com.ruoyi.system
# 自动去除表前缀,默认是false
autoRemovePre: false
# 表前缀(生成类名不会包含表前缀,多个用逗号分隔)
tablePrefix: sys_
启动代码生成服务
任务调度中心
实现任务调度的服务
配置文件就是配置了数据库相关和redis相关配置, nacos上的配置文件如下
# spring配置spring:
redis:
host: 162.14.74.11
port: 6379
password:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://162.14.74.11:3306/permission_mgr_sys?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
# mybatis配置
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.job.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mapper/**/*.xml
# swagger配置
swagger:
title: 定时任务接口文档
license: Powered By ruoyi
licenseUrl: https://ruoyi.vip
启动任务调度模块
系统管理模块
也就是我们的RBAC权限控制中心,配置文件同样是数据库和redis
# spring配置spring:
redis:
host: 162.14.74.11
port: 6379
password:
datasource:
druid:
stat-view-servlet:
enabled: true
loginUsername: admin
loginPassword: 123456
dynamic:
druid:
initial-size: 5
min-idle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat,slf4j
connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
datasource:
# 主库数据源
master:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://162.14.74.11:3306/permission_mgr_sys?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: root
# 从库数据源
# slave:
# username:
# password:
# url:
# driver-class-name:
# seata: true # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
# seata配置
seata:
# 默认关闭,如需启用spring.datasource.dynami.seata需要同时开启
enabled: false
# Seata 应用编号,默认为 ${spring.application.name}
application-id: ${spring.application.name}
# Seata 事务组编号,用于 TC 集群名
tx-service-group: ${spring.application.name}-group
# 关闭自动代理
enable-auto-data-source-proxy: false
# 服务配置项
service:
# 虚拟组和分组的映射
vgroup-mapping:
ruoyi-system-group: default
config:
type: nacos
nacos:
serverAddr: 127.0.0.1:8848
group: SEATA_GROUP
namespace:
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
namespace:
# mybatis配置
mybatis:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.system
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath:mapper/**/*.xml
# swagger配置
swagger:
title: 系统模块接口文档
license: Powered By ruoyi
licenseUrl: https://ruoyi.vip
启动系统管理模块
认证中心模块
是要是登录,登出,权限认证的入口功能,认证中心直接调用系统管理获取并校验权限等, 这个服务只引入redis就行了
spring:redis:
host: 162.14.74.11
port: 6379
password:
启动认证中心
网关模块
所有微服务的统一入口,因为多个微服务会有多个服务,前端不可能调用所有,所有通过统一网关进行转发即可。网关还可以做一系列的拦截操作,做自己想做的事情。
配置文件主要使用redis即可,
spring:redis:
host: 162.14.74.11
port: 6379
password:
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
# 认证中心
- id: ruoyi-auth
uri: lb://ruoyi-auth
predicates:
- Path=/auth/**
filters:
# 验证码处理
- CacheRequestFilter
- ValidateCodeFilter
- StripPrefix=1
# 代码生成
- id: ruoyi-gen
uri: lb://ruoyi-gen
predicates:
- Path=/code/**
filters:
- StripPrefix=1
# 定时任务
- id: ruoyi-job
uri: lb://ruoyi-job
predicates:
- Path=/schedule/**
filters:
- StripPrefix=1
# 系统模块
- id: ruoyi-system
uri: lb://ruoyi-system
predicates:
- Path=/system/**
filters:
- StripPrefix=1
# 文件服务
- id: ruoyi-file
uri: lb://ruoyi-file
predicates:
- Path=/file/**
filters:
- StripPrefix=1
# 安全配置
security:
# 验证码
captcha:
enabled: true
type: math
# 防止XSS
xss:
enabled: true
excludeUrls:
- /system/notice
# 不校验白名单
ignore:
whites:
- /auth/logout
- /auth/login
- /auth/register
- /*/v2/api-docs
- /csrf
启动网关服务
前端服务
前端使用vue技术栈实现,我们首先需要安装node.js
下载地址未:https://nodejs.org/en/
安装node.js后查看是否安装成功
配置淘宝镜像加速
# 配置淘宝镜像npm config set registry https://registry.npm.taobao.org
# 查看镜像
npm config get registry
切换到ruoyi-ui目录,检查配置,安装依赖,启动项目
配置后端接口代理
安装并启动服务
# 开发环境npm run dev
# 生产环境 打成静态文件 放在nginx
npm run build:prod
本地启动成功
登录页面
首页
项目发布到腾讯云
编写dockerfile, 限制一下内存,云服务器内存有限, 其他的文件都一样
# 基础镜像FROM openjdk:8-jre
# author
MAINTAINER ruoyi
# 挂载目录
VOLUME /home/ruoyi
# 创建目录
RUN mkdir -p /home/ruoyi
# 指定路径
WORKDIR /home/ruoyi
# 复制jar文件到路径
COPY ./jar/ruoyi-modules-job.jar /home/ruoyi/ruoyi-modules-job.jar
# 启动定时任务服务
ENV JAVA_OPT="-Xmx256m -Xms256m -Xmn128m"
CMD java $JAVA_OPT -jar ruoyi-modules-job.jar
编写构建镜像脚本
docker build -t ruoyi-modules-job -f dockerfile .编写启动脚本
docker run -itd --restart=always --name ruoyi-modules-job -p 9203:9203 -e "SPRING_PROFILES_ACTIVE=prod" ruoyi-modules-job编写停止脚本
docker rm -f ruoyi-modules-job脚本授权
chmod +x ./*.sh因为是自己的云服务器,内存较小,搞这么多服务已经不容易了,就是用这种比较老实的方法干吧
配置nginx
#user nobody;worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html; #指定容器中的路径
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://162.14.74.11:8080/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html; #指定容器中的路径
}
}
include /etc/nginx/conf.d/*.conf;
}
云服务器启动项目,使用docker
云服务器首页查看
小结
本次集成微服务版本的若依后台管理,其实过程还是非常简单个清晰的,当然如果自己实现也是可以的,但毕竟还是要花很多的时间。
在该项目上面做二次开发,应该也还是比较快的。总的来说,这个项目对于个人和中小企业来说还是非常不错的,因为大企业一般都是会自己实现。
到此就整的结束了,下次再见。。。