项目简介

RuoYi-Vue是一款基于SpringBoot+Vue的前后端分离极速后台开发框架。

RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。

1,主要特性

  • 完全响应式布局(支持电脑、平板、手机等所有主流设备)
  • 强大的一键生成功能(包括控制器、模型、视图、菜单等)
  • 支持多数据源,简单配置即可实现切换。
  • 支持按钮及数据权限,可自定义部门数据权限。
  • 对常用js插件进行二次封装,使js代码变得简洁,更加易维护
  • 完善的XSS防范及脚本过滤,彻底杜绝XSS攻击
  • Maven多项目依赖,模块及插件分项目,尽量松耦合,方便模块升级、增减模块。
  • 国际化支持,服务端及客户端支持
  • 完善的日志记录体系简单注解即可实现
  • 支持服务监控,数据监控,缓存监控功能。

    2,技术选型

    1、系统环境

  • Java EE 8

  • Servlet 3.0
  • Apache Maven 3

2、主框架

  • Spring Boot 2.2.x
  • Spring Framework 5.2.x
  • Spring Security 5.2.x

3、持久层

  • Apache MyBatis 3.5.x
  • Hibernate Validation 6.0.x
  • Alibaba Druid 1.2.x

4、视图层

  • Vue 2.6.x
  • Axios 0.21.x
  • Element 2.15.x

    3,内置功能

  • 用户管理:用户是系统操作者,该功能主要完成系统用户配置。

  • 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
  • 岗位管理:配置系统用户所属担任职务。
  • 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
  • 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
  • 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
  • 参数管理:对系统动态配置常用参数。
  • 通知公告:系统通知公告信息发布维护。
  • 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
  • 登录日志:系统登录日志记录查询包含登录异常。
  • 在线用户:当前系统中活跃用户状态监控。
  • 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
  • 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
  • 系统接口:根据业务代码自动生成相关的api接口文档。
  • 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
  • 缓存监控:对系统的缓存信息查询,命令统计等。
  • 在线构建器:拖动表单元素生成相应的Vue代码。
  • 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。

    一,环境部署

    1,准备工作

    1. JDK >= 1.8 (推荐1.8版本)
    2. Mysql >= 5.7.0 (推荐5.7版本)
    3. Redis >= 3.0
    4. Maven >= 3.0
    5. Node >= 10
    6. nacos >= 1.1.0 (ruoyi-cloud >= 3.0.0需要下载nacos >= 2.x.x版本)
    7. sentinel >= 1.6.0

    二,运行系统

    1,后端运行

    1、前往Gitee下载页面(https://gitee.com/y_project/RuoYi-Cloud(opens new window))下载解压到工作目录
    2、导入到Eclipse,菜单 File -> Import,然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,选择工作目录,然后点击 Finish 按钮,即可成功导入。
    Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)
    3、创建数据库ry-cloud并导入数据脚本ry_2021xxxx.sql(必须),quartz.sql(可选)
    4、创建数据库ry-config并导入数据脚本ry_config_2021xxxx.sql(必须)
    5、配置nacos持久化,修改conf/application.properties文件,增加支持mysql数据源配置

    1. # db mysql
    2. spring.datasource.platform=mysql
    3. db.num=1
    4. db.url.0=jdbc:mysql://localhost:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    5. db.user=root
    6. db.password=password

    提示
    配置文件application.properties是在下载的nacos-server包conf目录下。
    最新RuoYi-Cloud版本>=3.0.0需要下载的nacos-server必须>=2.x.x版本。
    默认配置单机模式,nacos集群/多集群部署模式参考 (Nacos支持三种部署模式(opens new window))
    6、打开运行基础模块(启动没有先后顺序)

  • RuoYiGatewayApplication (网关模块 必须)

  • RuoYiAuthApplication (认证模块 必须)
  • RuoYiSystemApplication (系统模块 必须)
  • RuoYiMonitorApplication (监控中心 可选)
  • RuoYiGenApplication (代码生成 可选)
  • RuoYiJobApplication (定时任务 可选)
  • RuoYFileApplication (文件服务 可选)

7、集成seata分布式事务(可选配置,默认不启用)
创建数据库ry-seata并导入数据脚本ry_seata_2021xxxx.sql
参考集成nacos配置中心
提示
运行前需要先启动nacos,运行成功可以通过(http://localhost:8080(opens new window))访问,但是不会出现静态页面,可以继续参考下面步骤部署ruoyi-ui前端,然后通过前端地址来访问。

2,前端运行

  1. # 进入项目目录
  2. cd ruoyi-ui
  3. # 安装依赖
  4. npm install
  5. # 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
  6. npm install --registry=https://registry.npm.taobao.org
  7. # 本地开发 启动项目
  8. npm run dev

4、打开浏览器,输入:(http://localhost:80(opens new window)) 默认账户/密码 admin/admin123)
若能正确展示登录页面,并能成功登录,菜单及页面展示正常,则表明环境搭建成功
建议使用Git克隆,因为克隆的方式可以和RuoYi随时保持更新同步。使用Git命令克隆

  1. git clone https://gitee.com/y_project/RuoYi-Cloud.git

提示
因为本项目是前后端完全分离的,所以需要前后端都单独启动好,才能进行访问。
前端安装完node后,最好设置下淘宝的镜像源,不建议使用cnpm(可能会出现奇怪的问题)

三,部署系统

提示
因为本项目是前后端分离的,所以需要前后端都部署好,才能进行访问

1,后端部署

  • 打包工程文件

在ruoyi项目的bin目录下执行package.bat打包Web工程,生成war/jar包文件。
然后会在项目下生成target文件夹包含war或jar
提示
不同模块版本会生成在ruoyi/ruoyi-xxxx模块下target文件夹

  • 部署工程文件

1、jar部署方式
使用命令行执行:java –jar ruoyi-xxxx.jar 或者执行脚本:ruoyi/bin/run-xxxx.bat
2、war部署方式
ruoyi/pom.xml中的packaging修改为war,放入tomcat服务器webapps

  1. <packaging>war</packaging>

提示
不同模块版本在ruoyi/ruoyi-xxxx模块下修改pom.xml

  • SpringBoot去除内嵌Tomcat(PS:此步骤不重要,因为不排除也能在容器中部署war)
    1. <!-- 排除内置tomcat -->
    2. <dependency>
    3. <groupId>org.springframework.boot</groupId>
    4. <artifactId>spring-boot-starter-web</artifactId>
    5. <exclusions>
    6. <exclusion>
    7. <groupId>org.springframework.boot</groupId>
    8. <artifactId>spring-boot-starter-tomcat</artifactId>
    9. </exclusion>
    10. </exclusions>
    11. </dependency>

    2,前端部署

    当项目开发完毕,只需要运行一行命令就可以打包你的应用 ```css

    打包正式环境

    npm run build:prod

打包预发布环境

npm run build:stage

  1. 构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js 、***.cssindex.html 等静态文件。<br />通常情况下 dist 文件夹的静态文件发布到你的 nginx 或者静态服务器即可,其中的 index.html 是后台服务的入口页面。<br />**outputDir 提示**<br />如果需要自定义构建,比如指定 dist 目录等,则需要通过 [config(opens new window)](https://gitee.com/y_project/RuoYi-Vue/blob/master/ruoyi-ui/vue.config.js)的 outputDir 进行配置。<br />**publicPath 提示**<br />部署时改变页面js 和 css 静态引入路径 ,只需修改 vue.config.js 文件资源路径即可。
  2. ```css
  3. publicPath: './' //请根据自己路径来配置更改
  4. export default new Router({
  5. mode: 'hash', // hash模式
  6. })

3,环境变量

所有测试环境或者正式环境变量的配置都在 .env.development(opens new window)等 .env.xxxx文件中。
它们都会通过 webpack.DefinePlugin 插件注入到全局。
环境变量必须以VUEAPP为开头。如:VUE_APP_API、VUE_APP_TITLE
你在代码中可以通过如下方式获取:
console.log(process.env.VUE_APP_xxxx)

4,Nginx配置

  1. worker_processes 1;
  2. events {
  3. worker_connections 1024;
  4. }
  5. http {
  6. include mime.types;
  7. default_type application/octet-stream;
  8. sendfile on;
  9. keepalive_timeout 65;
  10. server {
  11. listen 80;
  12. server_name localhost;
  13. charset utf-8;
  14. location / {
  15. root /home/ruoyi/projects/ruoyi-ui;
  16. try_files $uri $uri/ /index.html;
  17. index index.html index.htm;
  18. }
  19. location /prod-api/{
  20. proxy_set_header Host $http_host;
  21. proxy_set_header X-Real-IP $remote_addr;
  22. proxy_set_header REMOTE-HOST $remote_addr;
  23. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  24. proxy_pass http://localhost:8080/;
  25. }
  26. error_page 500 502 503 504 /50x.html;
  27. location = /50x.html {
  28. root html;
  29. }
  30. }
  31. }

建议开启Gzip压缩
在http配置中加入如下代码对全局的资源进行压缩,可以减少文件体积和加快网页访问速度。

  1. # 开启gzip压缩
  2. gzip on;
  3. # 不压缩临界值,大于1K的才压缩,一般不用改
  4. gzip_min_length 1k;
  5. # 压缩缓冲区
  6. gzip_buffers 16 64K;
  7. # 压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
  8. gzip_http_version 1.1;
  9. # 压缩级别,1-10,数字越大压缩的越好,时间也越长
  10. gzip_comp_level 5;
  11. # 进行压缩的文件类型
  12. gzip_types text/plain application/x-javascript text/css application/xml application/javascript;
  13. # 跟Squid等缓存服务有关,on的话会在Header里增加"Vary: Accept-Encoding"
  14. gzip_vary on;
  15. # IE6对Gzip不怎么友好,不给它Gzip了
  16. gzip_disable "MSIE [1-6]\.";

5,Tomcat配置

修改server.xml,Host节点下添加

  1. <Context docBase="" path="/" reloadable="true" source=""/>

dist目录的文件夹下新建WEB-INF文件夹,并在里面添加web.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  5. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  6. version="3.1" metadata-complete="true">
  7. <display-name>Router for Tomcat</display-name>
  8. <error-page>
  9. <error-code>404</error-code>
  10. <location>/index.html</location>
  11. </error-page>
  12. </web-app>

6,常见问题

  1. 如果使用Mac需要修改nacos配置ruoyi-file-dev.yml文件路径path
  2. 如果使用Linux 提示表不存在,设置大小写敏感配置在/etc/my.cnf添加lower_case_table_names=1,重启MYSQL服务
  3. 如果提示当前权限不足,无法写入文件请检查ruoyi-file-dev.yml中的path路径或logback.xml中的log.path路径是否有可读可写操作权限