首页
/ RuoYi-Cloud-Plus 开发与部署指南

RuoYi-Cloud-Plus 开发与部署指南

2026-02-04 04:20:18作者:宗隆裙

本文详细介绍了RuoYi-Cloud-Plus项目的初始化、开发环境搭建、代码生成器使用、Docker编排部署以及常见问题解决方案。内容涵盖从项目克隆、依赖服务配置到微服务启动的全流程,并提供了代码生成器的扩展方法和Docker化部署的最佳实践。

项目初始化与开发环境搭建

RuoYi-Cloud-Plus 是一个基于 Spring Cloud Alibaba 的微服务通用权限管理系统,提供了丰富的功能和模块化的设计。为了顺利开始开发,首先需要完成项目的初始化与开发环境的搭建。以下是一个详细的步骤指南:

1. 环境准备

在开始之前,确保你的开发环境满足以下要求:

  • JDK 17+:项目基于 Java 17 开发,确保已安装并配置好环境变量。
  • Maven 3.6+:用于项目的依赖管理和构建。
  • Docker:用于运行依赖的服务(如 MySQL、Redis、Nacos 等)。
  • IDE:推荐使用 IntelliJ IDEA 或 Eclipse 进行开发。

验证环境

运行以下命令验证 JDK 和 Maven 是否已正确安装:

java -version
mvn -version

如果未安装 Maven,可以参考 Maven 官方文档 进行安装。

2. 克隆项目

使用以下命令克隆项目到本地:

git clone https://gitcode.com/dromara/RuoYi-Cloud-Plus.git
cd RuoYi-Cloud-Plus

3. 配置依赖服务

项目依赖多个服务(如 MySQL、Redis、Nacos 等),可以通过 Docker 快速启动这些服务。项目提供了 docker-compose.yml 文件,位于 script/docker 目录下。

运行以下命令启动服务:

cd script/docker
docker-compose up -d

服务说明

  • MySQL:默认端口 3306,用户名 root,密码 123456
  • Redis:默认端口 6379
  • Nacos:默认端口 8848,用户名 nacos,密码 nacos

4. 初始化数据库

项目提供了 SQL 脚本用于初始化数据库,位于 script/sql 目录下。运行以下命令导入数据:

mysql -u root -p < script/sql/ry-cloud.sql

5. 构建项目

在项目根目录下运行以下命令构建项目:

mvn clean install

6. 启动服务

项目包含多个微服务模块,可以通过以下命令启动核心服务:

cd ruoyi-auth
mvn spring-boot:run

cd ../ruoyi-gateway
mvn spring-boot:run

7. 访问系统

启动完成后,可以通过以下地址访问系统:

  • 前端地址http://localhost:80
  • Nacos 控制台http://localhost:8848/nacos

8. 开发工具推荐

  • Lombok:减少样板代码。
  • MapStruct:简化对象映射。
  • MyBatis-Plus:增强 MyBatis 功能。

9. 常见问题

  • Maven 依赖下载失败:检查网络或配置镜像源。
  • 服务启动失败:检查日志文件,确认依赖服务是否正常运行。

通过以上步骤,你已经完成了 RuoYi-Cloud-Plus 项目的初始化与开发环境搭建。接下来可以开始进行功能开发或二次定制。

代码生成器使用与扩展

RuoYi-Cloud-Plus 的代码生成器是一个强大的工具,能够根据数据库表结构自动生成前后端代码,显著提升开发效率。本节将详细介绍代码生成器的使用方法、核心组件以及如何扩展其功能。

代码生成器核心组件

代码生成器的核心组件主要包括以下几个类:

  1. GenTableGenTableColumn
    这两个类分别表示数据库表和表的列信息,用于存储生成代码所需的元数据。

  2. VelocityUtils
    负责模板渲染,将数据库表信息转换为代码文件。支持动态生成 Java 类、XML 映射文件、前端页面等。

  3. GenUtils
    提供工具方法,如初始化表信息、转换字段名、生成模块名称等。

  4. GenTableServiceImpl
    实现代码生成的核心逻辑,包括表信息的导入、同步、代码生成等。

  5. GenConfig
    配置代码生成的基本参数,如作者、包名、表前缀等。

以下是一个简单的类图,展示这些组件之间的关系:

classDiagram
    class GenTable {
        +Long id
        +String tableName
        +String tableComment
        +List~GenTableColumn~ columns
        +GenTableColumn pkColumn
    }

    class GenTableColumn {
        +Long id
        +String columnName
        +String columnComment
        +String javaType
    }

    class VelocityUtils {
        +prepareContext(GenTable genTable)
        +getFileName(String template, GenTable genTable)
    }

    class GenUtils {
        +initTable(GenTable genTable)
        +initColumnField(GenTableColumn column, GenTable table)
    }

    class GenTableServiceImpl {
        +selectGenTableById(Long id)
        +updateGenTable(GenTable genTable)
        +generatorCode(Long tableId)
    }

    class GenConfig {
        +String author
        +String packageName
    }

    GenTable "1" *-- "n" GenTableColumn
    VelocityUtils --> GenTable
    GenUtils --> GenTable
    GenUtils --> GenTableColumn
    GenTableServiceImpl --> GenTable
    GenTableServiceImpl --> GenTableColumn

使用代码生成器

1. 配置代码生成参数

application.yml 中配置代码生成的基本参数,如作者、包名等:

gen:
  author: YourName
  packageName: com.yourpackage
  autoRemovePre: true
  tablePrefix: sys_

2. 导入表结构

通过以下步骤导入数据库表结构:

  1. 在数据库中创建表。
  2. 在代码生成器界面中点击“导入表”,选择需要生成代码的表。

3. 生成代码

导入表结构后,点击“生成代码”按钮,系统会自动生成以下文件:

  • 后端代码:Controller、Service、Mapper、Entity 等。
  • 前端代码:Vue 页面、API 接口等。

扩展代码生成器

1. 自定义模板

代码生成器使用 Velocity 模板引擎渲染代码文件。可以通过修改模板文件来自定义生成的代码:

  • 模板文件路径:resources/templates
  • 支持自定义模板类型,如新增一个 custom.vm 模板。

2. 扩展字段类型映射

GenUtils 类中,可以通过修改 initColumnField 方法扩展字段类型映射逻辑。例如:

public static void initColumnField(GenTableColumn column, GenTable table) {
    // 自定义字段类型映射
    if (column.getColumnType().equals("custom_type")) {
        column.setJavaType("CustomType");
    }
}

3. 新增生成逻辑

GenTableServiceImpl 类中,可以通过扩展 generatorCode 方法新增生成逻辑。例如:

public void generatorCode(Long tableId) {
    // 原有逻辑
    GenTable table = baseMapper.selectGenTableById(tableId);
    // 新增自定义逻辑
    generateCustomFiles(table);
}

示例:生成代码流程

以下是一个生成代码的流程图:

flowchart TD
    A[导入表结构] --> B[配置生成参数]
    B --> C[生成后端代码]
    C --> D[生成前端代码]
    D --> E[下载代码包]

总结

RuoYi-Cloud-Plus 的代码生成器通过灵活的配置和扩展能力,能够满足不同项目的需求。通过自定义模板和扩展逻辑,可以进一步优化生成代码的质量和效率。

Docker 编排与一键部署

RuoYi-Cloud-Plus 提供了完整的 Docker 编排支持,通过 docker-compose.yml 文件可以一键部署所有依赖服务和微服务模块。以下是对 Docker 编排与一键部署的详细介绍。

Docker Compose 文件解析

项目的 docker-compose.yml 文件位于 script/docker 目录下,定义了所有依赖服务的容器化配置。以下是一个简化的示例:

version: '3.8'

services:
  nacos:
    image: nacos/nacos-server:2.0.3
    container_name: ruoyi-nacos
    ports:
      - "8848:8848"
    volumes:
      - ./nacos/conf:/home/nacos/conf
    environment:
      - MODE=standalone

  redis:
    image: redis:6.2.6
    container_name: ruoyi-redis
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data
      - ./redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
    command: redis-server /usr/local/etc/redis/redis.conf

  mysql:
    image: mysql:8.0.28
    container_name: ruoyi-mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=123456
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d

关键配置说明

  1. Nacos:作为注册中心和配置中心,端口为 8848,数据卷挂载了配置文件目录。
  2. Redis:用于缓存,端口为 6379,挂载了数据目录和配置文件。
  3. MySQL:数据库服务,端口为 3306,挂载了数据目录和配置文件。

一键部署流程

  1. 启动依赖服务: 运行以下命令启动所有依赖服务:

    cd script/docker
    docker-compose up -d
    
  2. 构建微服务镜像: 每个微服务模块(如 ruoyi-gatewayruoyi-auth 等)均提供了 Dockerfile,可以通过以下命令构建镜像:

    docker build -t ruoyi-gateway:latest ruoyi-gateway/
    
  3. 启动微服务: 使用 docker-compose 启动所有微服务:

    docker-compose -f docker-compose-microservices.yml up -d
    

微服务部署示例

以下是一个微服务模块的 Dockerfile 示例(以 ruoyi-gateway 为例):

FROM openjdk:17-jdk-slim
VOLUME /tmp
COPY target/ruoyi-gateway.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

关键点

  • 基础镜像:使用 openjdk:17-jdk-slim 作为基础镜像。
  • 构建命令:将编译后的 jar 文件复制到容器中,并通过 ENTRYPOINT 启动服务。

部署验证

  1. 检查容器状态

    docker ps
    

    确保所有容器(如 ruoyi-nacosruoyi-redis 等)均处于运行状态。

  2. 访问服务

    • Nacos 控制台:http://localhost:8848/nacos
    • 网关服务:http://localhost:8080

常见问题

  1. 端口冲突: 如果某个端口已被占用,修改 docker-compose.yml 中的端口映射即可。

  2. 数据持久化: 所有数据卷(如 MySQL 数据、Redis 数据)均挂载到本地目录,确保数据持久化。

  3. 日志查看: 使用以下命令查看容器日志:

    docker logs -f ruoyi-gateway
    

通过以上步骤,可以快速完成 RuoYi-Cloud-Plus 的 Docker 化部署。

常见问题与解决方案

在开发与部署RuoYi-Cloud-Plus项目时,可能会遇到一些常见问题。本节将针对这些问题提供详细的解决方案,帮助开发者快速定位并解决问题。

1. 登录认证失败

问题描述:用户登录时提示“授权类型不正确”或“验证码错误”。

解决方案

  • 授权类型不正确:检查登录请求中的grant_type参数是否正确。支持的授权类型包括passwordsmsemail等。确保前端传递的授权类型与后端配置一致。
  • 验证码错误
    • 确保验证码未过期(默认有效期为5分钟)。
    • 检查验证码是否正确,区分大小写。
    • 若使用Redis存储验证码,确保Redis服务正常运行。
// 示例:验证码校验逻辑
if (!captcha.equals(redisCache.getCacheObject(verifyKey))) {
    throw new CaptchaException();
}

2. 网关限流异常

问题描述:请求被Sentinel拦截,返回“Too Many Requests”。

解决方案

  • 检查Sentinel的限流规则配置,确保规则符合业务需求。
  • 调整限流阈值或关闭不必要的限流规则。
  • 若为突发流量,可考虑增加服务实例或优化接口性能。
// 示例:Sentinel限流处理
@SentinelResource(value = "resourceName", blockHandler = "handleBlock")
public Mono<ServerResponse> handleBlock(ServerWebExchange exchange, BlockException ex) {
    return ServerResponse.status(HttpStatus.TOO_MANY_REQUESTS).build();
}

3. 文件上传失败

问题描述:上传文件时提示“文件大小超过限制”或“文件名过长”。

解决方案

  • 文件大小限制:检查配置文件中的spring.servlet.multipart.max-file-sizespring.servlet.multipart.max-request-size参数,适当调整大小限制。
  • 文件名长度限制:默认文件名长度限制为100字符,可通过配置文件修改。
# 示例:文件上传配置
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB

4. 分布式事务失败

问题描述:跨服务调用时事务未回滚。

解决方案

  • 确保Seata服务正常运行,且配置文件中seata.enabled=true
  • 检查@GlobalTransactional注解是否添加到分布式事务的入口方法上。
  • 验证数据库是否支持Seata(如MySQL需开启XA模式)。
// 示例:分布式事务注解
@GlobalTransactional
public void distributedMethod() {
    // 业务逻辑
}

5. Redis连接异常

问题描述:Redis连接超时或无法访问。

解决方案

  • 检查Redis服务是否启动,网络是否通畅。
  • 验证配置文件中的spring.redis.hostspring.redis.port是否正确。
  • 若为集群模式,确保所有节点配置正确。
# 示例:Redis配置
spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password: your_password

6. 服务注册失败

问题描述:服务未注册到Nacos。

解决方案

  • 检查Nacos服务是否正常运行。
  • 验证配置文件中的spring.cloud.nacos.discovery.server-addr是否正确。
  • 确保服务启动时未报错,日志中无Nacos相关异常。
# 示例:Nacos配置
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

7. 接口文档无法访问

问题描述:Swagger或Knife4j文档页面无法打开。

解决方案

  • 检查是否添加了springdoc-openapi-starter-webmvc-ui依赖。
  • 确保配置文件中的springdoc.api-docs.enabled=true
  • 若为生产环境,需显式启用文档(默认禁用)。
# 示例:Swagger配置
springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    path: /swagger-ui.html

8. 多数据源切换失败

问题描述:动态数据源切换无效。

解决方案

  • 检查数据源配置是否正确,确保dynamic-datasource依赖已引入。
  • 验证@DS注解是否添加到Service或Mapper层方法上。
  • 确保数据源名称与配置文件中定义的一致。
// 示例:动态数据源注解
@DS("slave")
public List<User> selectUserList() {
    return userMapper.selectList();
}

9. 日志收集异常

问题描述:ELK未收集到日志。

解决方案

  • 检查Logstash服务是否正常运行。
  • 验证日志配置文件(如logback-spring.xml)中的Logstash输出配置是否正确。
  • 确保日志级别设置为INFO或更低。
<!-- 示例:Logstash配置 -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>127.0.0.1:5000</destination>
</appender>

10. 代码生成器报错

问题描述:代码生成时提示“表不存在”或“字段类型不支持”。

解决方案

  • 检查数据库中是否存在目标表。
  • 验证表名和字段名是否符合命名规范(避免使用关键字)。
  • 若为Oracle或PostgreSQL,确保表名和字段名为大写。
// 示例:代码生成器配置
GenTable genTable = new GenTable();
genTable.setTableName("sys_user");

通过以上解决方案,可以快速定位并解决RuoYi-Cloud-Plus项目中的常见问题。若问题仍未解决,建议查阅项目文档或联系社区支持。

RuoYi-Cloud-Plus作为一个功能完善的微服务权限管理系统,通过本文的指南可以快速完成开发环境搭建和项目部署。代码生成器和Docker编排的支持显著提升了开发效率,而常见问题的解决方案则为项目稳定性提供了保障。掌握这些核心内容后,开发者能够更高效地进行二次开发和定制化工作。

登录后查看全文
热门项目推荐
相关项目推荐