Files
hzdyjs/docs/部署文档/杭州第一技师部署文档/多实例部署说明.md
T
2026-09-02 13:23:38 +08:00

7.2 KiB
Raw Blame History

🚀 RuoYi-Admin 多实例部署说明

📋 概述

本文档说明如何在生产环境中部署多个 ruoyi-admin.jar 实例到不同端口,实现负载均衡和高可用。

🏗️ 部署架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   前端应用      │    │   Nginx         │    │   后端实例      │
│                 │    │   负载均衡器    │    │                 │
│  http://80      │───▶│   http://80     │───▶│ 9900, 9901     │
│                 │    │                 │    │ 9902, 9903     │
└─────────────────┘    └─────────────────┘    └─────────────────┘

📁 文件结构

backend/
├── ruoyi-admin.jar                    # 编译后的JAR包
├── application-prod-9900.yml          # 9900端口配置文件
├── application-prod-9901.yml          # 9901端口配置文件
├── application-prod-9902.yml          # 9902端口配置文件
├── application-prod-9903.yml          # 9903端口配置文件
├── start-multi-instance.sh            # Linux启动脚本
├── start-multi-instance.bat           # Windows启动脚本
├── docker-compose-multi.yml           # Docker部署配置
├── nginx.conf                         # Nginx负载均衡配置
└── logs/                              # 日志目录
    ├── ruoyi-admin-9900.log
    ├── ruoyi-admin-9901.log
    ├── ruoyi-admin-9902.log
    └── ruoyi-admin-9903.log

🔧 部署步骤

1. 编译项目

# 进入backend目录
cd backend

# 编译生产环境JAR包(推荐命令)
# -Pprod:启用生产配置
# -Dmaven.compiler.parameters=true:强制保留方法参数名(与父 POM 双保险)
mvn clean package -Pprod -Dmaven.compiler.parameters=true

# 等价简写(父 POM 已默认开启 maven.compiler.parameters=true,也可直接用):
# mvn clean package -Pprod
mvn clean package -Pprod -Dmaven.test.skip=true

# 检查生成的JAR文件
ls -la ruoyi-admin/target/ruoyi-admin.jar

说明:若编译未保留参数名,生产环境可能出现
Name for argument of type [java.lang.Long] not specified...。
父 POM 已配置 <maven.compiler.parameters>true</maven.compiler.parameters> 与 -parameters,
推荐命令再显式传一次 -Dmaven.compiler.parameters=true,避免被外部环境覆盖。

2. 准备部署文件

# 复制JAR文件到部署目录
cp ruoyi-admin/target/ruoyi-admin.jar ./

# 创建日志目录
mkdir -p logs

# 设置脚本执行权限 (Linux)
chmod +x start-multi-instance.sh

3. 启动多实例

Linux环境

# 启动所有实例
./start-multi-instance.sh start all

# 启动单个实例
./start-multi-instance.sh start 9900
./start-multi-instance.sh start 9901
./start-multi-instance.sh start 9902
./start-multi-instance.sh start 9903

# 查看实例状态
./start-multi-instance.sh status all

# 停止实例
./start-multi-instance.sh stop all

# 重启实例
./start-multi-instance.sh restart all

Windows环境

# 启动所有实例
start-multi-instance.bat start all

# 启动单个实例
start-multi-instance.bat start 9900
start-multi-instance.bat start 9901
start-multi-instance.bat start 9902
start-multi-instance.bat start 9903

# 查看实例状态
start-multi-instance.bat status all

# 停止实例
start-multi-instance.bat stop all

# 重启实例
start-multi-instance.bat restart all

4. Docker部署 (可选)

# 启动所有服务
docker-compose -f docker-compose-multi.yml up -d

# 查看服务状态
docker-compose -f docker-compose-multi.yml ps

# 查看日志
docker-compose -f docker-compose-multi.yml logs -f

# 停止服务
docker-compose -f docker-compose-multi.yml down

🌐 访问地址

直接访问各实例

通过负载均衡器访问

📊 监控和管理

1. 实例状态监控

# 查看所有实例状态
./start-multi-instance.sh status all

# 查看单个实例状态
./start-multi-instance.sh status 9900

2. 日志监控

# 查看实时日志
tail -f logs/ruoyi-admin-9900.log
tail -f logs/ruoyi-admin-9901.log
tail -f logs/ruoyi-admin-9902.log
tail -f logs/ruoyi-admin-9903.log

# 查看错误日志
grep "ERROR" logs/ruoyi-admin-*.log

3. 进程监控

# 查看Java进程
ps aux | grep java

# 查看端口占用
netstat -tlnp | grep :99

⚠️ 注意事项

1. 端口冲突

  • 确保9900-9903端口未被其他服务占用
  • 检查防火墙设置,确保端口可访问

2. 内存配置

  • 每个实例默认配置:最小512MB,最大1024MB
  • 根据服务器配置调整 JAVA_OPTS 参数

3. 数据库连接

  • 所有实例共享同一个数据库
  • 确保数据库连接池配置合理,避免连接数过多

4. 文件上传

  • 临时文件目录:/ruoyi/server/temp
  • 确保目录存在且有写权限

🔄 故障排查

1. 实例启动失败

# 检查JAR文件是否存在
ls -la ruoyi-admin.jar

# 检查端口是否被占用
netstat -tlnp | grep :99

# 查看启动日志
tail -f logs/ruoyi-admin-9900.log

2. 实例无法访问

# 检查防火墙设置
firewall-cmd --list-ports

# 检查SELinux状态 (CentOS/RHEL)
getenforce

# 测试端口连通性
telnet localhost 9900

3. 负载均衡不工作

# 检查Nginx状态
docker-compose -f docker-compose-multi.yml ps nginx

# 查看Nginx日志
docker-compose -f docker-compose-multi.yml logs nginx

# 测试后端服务
curl http://localhost:9900/health

📈 性能优化建议

1. JVM调优

# 根据服务器内存调整JVM参数
JAVA_OPTS="-Xms2g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m"

2. 数据库连接池优化

# 在application-prod-*.yml中调整
spring:
    datasource:
        hikari:
            maxPoolSize: 100 # 根据实例数调整
            minIdle: 20
            connectionTimeout: 30000

3. 缓存配置

# Redis连接池优化
redisson:
    threads: 32
    nettyThreads: 64
    singleServerConfig:
        connectionPoolSize: 128

🚀 扩展部署

1. 添加更多实例

  • 复制配置文件模板
  • 修改端口号和应用名称
  • 更新启动脚本和Docker配置

2. 集群部署

  • 使用Redis集群
  • 配置数据库主从复制
  • 实现会话共享

3. 容器化部署

  • 使用Kubernetes管理
  • 配置自动扩缩容
  • 实现滚动更新

📞 技术支持

如遇到部署问题,请检查:

  1. 系统日志和应用日志
  2. 端口占用情况
  3. 防火墙和网络配置
  4. 数据库连接状态
  5. 内存和磁盘空间

📝 文档版本: v1.0
🔄 最后更新: 2025-01-03
👨‍💻 维护人员: 开发团队