# Ruoyi-Cloud-Cluster **Repository Path**: aecode/ruoyi-cloud-cluster ## Basic Information - **Project Name**: Ruoyi-Cloud-Cluster - **Description**: 若依集群版,使用mybatis-plus、redis cluster、mysql cluster等等,还有众多模块可直接使用,低耦合度即开即用,二次开发便捷 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2025-01-11 - **Last Updated**: 2025-05-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 平台简介 基于Ruoyi-Cloud开发的分布式集群系统,在原有的基础上扩展了很多功能,如: * 分布式事务、分布式锁、分布式定时任务、分布式限流、分布式日志、分布式监控、分布式消息队列 * 分布式搜索引擎、分布式文件系统、分布式会话管理等,同时支持微服务架构、前后端分离、多租户、数据权限 * 社交登录、支付系统、工作流引擎、定时任务、短信发送、邮件发送、云存储、云部署、Docker --- * JDK修改为使用`jdk17` * 前端没变,还是(基于 [RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue))。 * 后端采用SpringCloudAlibaba * 注册中心、配置中心选型Nacos,权限认证使用Redis。 * 流量控制框架选型Sentinel,分布式事务选型Seata。 ## 系统模块 ~~~ TODO 这里放目录结构 ~~~ ## 内置功能 1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3. 岗位管理:配置系统用户所属担任职务。 4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 7. 参数管理:对系统动态配置常用参数。 8. 通知公告:系统通知公告信息发布维护。 9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 10. 登录日志:系统登录日志记录查询包含登录异常。 11. 在线用户:当前系统中活跃用户状态监控。 12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 14. 系统接口:根据业务代码自动生成相关的api接口文档。 15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 16. 在线构建器:拖动表单元素生成相应的HTML代码。 17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 ## 在线体验 演示地址:http://ruoyi.vip 文档地址:http://doc.ruoyi.vip # 部署方式 & 必要依赖 下载源码后,请先进入项目文件夹执行:`chmod -R 7777 ./*`赋予权限,然后依次执行下方命令 1.执行./deploy下的setup1.sh脚本复制配置文件到/data/lib统一管理,命令: ```shell sudo sh setup1.sh ``` 2.执行./docker下的docker-compose,命令: ```shell docker-compose up -d ``` 3.编译maven项目,命令: ```shell mvn clean package -DskipTests=true -Dmaven.compile.fork=true -P prod ``` 4.执行dockerbuild.sh脚本,命令: ```shell sudo sh dockerBuild.sh ``` 如果容器已经存在,可以执行: ```shell docker-compose down && sudo sh dockerBuild.sh ``` 如果想看日志输出,可以执行: ```shell docker-compose down && sudo sh dockerBuild.sh && docker-compose logs -f ``` ## 默认账号密码 - 系统:`admin`/`admin123` - mysql:`root`/`djCMnLWuFR1VIOt2` - nacos:`nacos`/`nacos`,请务必修改nacos默认密码 - 代码修改位置在`./pom/project/properties/nacos.password`配置 - nacos密码修改需要登录后在控制台修改 - redis:`djCMnLWuFR1VIOt2` ## 配置修改 ### mysql - `./deploy/dirs/mysql/conf/my.cnf`是数据库配置,里面包含mysql集群相关配置 - `./deploy/docker-compose.yml#cluster-mysql` 是数据库创建指令,其中包含配置默认root密码,请务必修改 ### nacos 1.容器 - `./deploy/dirs/nacos/conf/application.properties` 是nacos配置,默认开启鉴权和自定义bae64令牌,请务必修改令牌值,生成的值为32位密码以上的base64编码 - 在nacos配置中,务必保证所有的nacos服务使用同一个ip端口的数据库 - `./deploy/dirs/docker-compose.yml/cluster-nacos` 是nacos创建指令,环境变量中NACOS_SERVERS为集群服务列表,要求至少3个,若无三个请使用同一个 `ip:port`方式 2.代码 - 在最顶层pom.xml中配置了nacos账号密码`nacos.username`和`nacos.password`,如果需要根据环境不同配置不同的nacos账号密码,可以将这两个变量移动到 `profiles.profile.properties`中与`nacos.namespace`同级 - 服务采用了命名空间区分配置项,如果有修改命名空间,请同步修改`./pom.xml#profile.properties.`( 共有两个,开发和生产) 为你设置的命名空间id。 - nacos的地址通过环境变量注入,变量名为`CLUSTER-NACOS-HOST`和`CLUSTER-NACOS-PORT`,分别为ip和端口号,默认设置是 `${CLUSTER-NACOS-HOST:cluster-nacos}:${CLUSTER-NACOS-PORT:8848}` - 如果是通过docker部署,务必修改 `./docker-compose.yml`中的`x-common-env.environment`的两个变量 - 如果是开发时,可以通过idea设置环境变量`CLUSTER-NACOS-HOST=你的nacos IP地址;CLUSTER-NACOS-PORT=你的nacos端口` ### redis - `./deploy/dirs/redis/conf/redis.conf`是redis配置,其中默认开启了redis cluster模式,但集群的节点需要进入任意新容器执行命令: - 密码默认是`djCMnLWuFR1VIOt2`,redis.conf配置文件修改为你自己的密码 - 默认只安装一个redis容器,如果你还需要多个redis,可以参考`./docker/redis-slave/`文件夹的`README.md`文件 在任意主节点`初始化`创建主节点(tips:至少3个节点): ```shell # redis-cli -a 密码 集群模式 创建 节点ip:port 节点ip:port 节点ip:port 每个主节点应该有多少个从节点 0个 确认创建集群 redis-cli -a djCMnLWuFR1VIOt2 --cluster create 192.168.214.128:6379 192.168.214.129:6379 192.168.214.130:6379 --cluster-replicas 0 --cluster-yes # --cluster-replicas指的是你的每一个主节点有多少个从节点,如果--cluster-replicas 1或者2,那么指的就是你的每一个主节点都要带1或者2个从节点(取决于你的值是1还是2) # 这就意味着你需要准备 主机数量 * (cluster-replicas + 1)个redis服务 ``` 在任意主节点添加新的主节点 ```shell # 指定密码来添加新的节点到集群中 redis-cli -a djCMnLWuFR1VIOt2 --cluster add-node 192.168.214.129:6380 192.168.214.128:6379 # --cluster add-node 用于添加节点到集群中,后面跟 你的ip:port 空格 集群中任意一个主节点ip:port ``` 在任意主节点加载从节点: ```shell # 首先加入集群 # 使用 redis-cli 添加节点 要加入的节点ip 端口 集群任意节点的ip 端口 主节点id获取同上注释 redis-cli -a djCMnLWuFR1VIOt2 --cluster add-node 192.168.214.128 6380 192.168.214.128 6379 --cluster-master-id <主节点id> # 然后切换为从节点 # 使用 redis-cli 命令并指定密码来为新从节点分配主节点 # 密码 要设置的从节点IP 从节点端口 主节点id redis-cli -a djCMnLWuFR1VIOt2 -c -h 192.168.214.128 -p 6380 CLUSTER REPLICATE <主节点id> # CLUSTER REPLICATE 参数用于为新从节点分配主节点,后面跟主节点的id,主节点id可以通过在主节点的`cluster nodes`命令中找到 # 在redis-cli控制台上输入: # > cluster nodes # 可以看到类似如下输出: #9c4bff7e81e9d6e6c089aa1b5fedc3f1c7d19799 192.168.214.130:6379@16379 master - 0 1737093572685 3 connected 10923-16383 #c578932be7fdda0ffbe4541b0b9a2da62fc1614f 192.168.214.129:6379@16379 myself,master - 0 0 2 connected 5461-10922 #fa529d48f557fe6c968cc757b257db8e694ad398 192.168.214.128:6379@16379 master - 0 1737093572000 1 connected 0-5460 # 其中的myself,master就是当前节点,复制前面的id就是主节点id ``` 在任意集群主节点上删除从节点(tips:不要停止要删除的redis): ```shell # 密码 删除节点 删除节点的ip和端口 删除节点的id redis-cli -a djCMnLWuFR1VIOt2 --cluster del-node 192.168.214.128:6380 2ec5ce4c49f0cef1e1f0947b5a4c3081e7e492e1 ``` 删除主节点需要先把下面的所有从节点分配给其他主节点才能删除,请自行从浏览器搜索学习 删除已经宕机并且不再使用的节点: ```shell # 密码 删除节点 删除节点的id redis-cli -a djCMnLWuFR1VIOt2 CLUSTER FORGET c578932be7fdda0ffbe4541b0b9a2da62fc1614f ``` ### nginx - ./docker/nginx/conf/nginx.conf是nginx配置,配置了nacos和gateway的负载均衡,需要先修改upstream cluster-gateway和upstream cluster-nacos的地址列表 - nginx只使用一台,nacos和gateway的负载均衡都在这一台上面,如果需要多台nginx,请自行配置 - 请把./docker/nginx文件夹挪到外面,防止容器映射的配置文件、日志等污染git工作目录 - 所有的listen监听端口建议监听80端口,并使用server_name配置域名,若无域名,需要保证每个监听端口都不一样,防止冲突 - 为了防止跨域,已将前端和后端放置在一个server块内 - 如果需要更新前端,打包好之后放在html/dist下,无需重启即可直接生效 - nacos负载均衡说明 - grpc端口必须与nacos服务监听端口+1000一致,例如nacos监听端口8800,那么grpc端口就是8800+1000=9800 # 可选依赖 & 可选模块 ## 模块及依赖绑定关系 | 模块名 | 依赖 | 是否可移除 | |:-------------------------|:-------------|:-----:| | aestate-modules-redis | redis分布式 | √ | | aestate-modules-es | 分布式es大数据存储 | √ | | aestate-modules-rabbitmq | rabbitmq消息队列 | √ | | aestate-modules-rocketmq | rocketmq消息队列 | √ | | aestate-modules-kafka | kafka消息队列 | √ | | aestate-modules-mongodb | mongodb分布式存储 | √ | | aestate-modules-xxl-job | 分布式定时任务 | √ | | aestate-modules-minio | 分布式文件存储 | √ | | aestate-modules-activiti | 分布式工作流 | √ | ## 移除方法 - 不引入依赖,不安装容器就好了,如果已经安装了,删除就行了,所有的容器都是独立的 ## 引入方法 ### redis - 在上面的`部署方式 & 必要依赖`中的`redis`介绍的是使用安装主节点