# 🚀 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. 编译项目 ```bash # 进入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 已配置 `true` 与 `-parameters`, > 推荐命令再显式传一次 `-Dmaven.compiler.parameters=true`,避免被外部环境覆盖。 ### 2. 准备部署文件 ```bash # 复制JAR文件到部署目录 cp ruoyi-admin/target/ruoyi-admin.jar ./ # 创建日志目录 mkdir -p logs # 设置脚本执行权限 (Linux) chmod +x start-multi-instance.sh ``` ### 3. 启动多实例 #### Linux环境 ```bash # 启动所有实例 ./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环境 ```cmd # 启动所有实例 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部署 (可选) ```bash # 启动所有服务 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**: http://localhost:9900 - **实例2**: http://localhost:9901 - **实例3**: http://localhost:9902 - **实例4**: http://localhost:9903 ### 通过负载均衡器访问 - **主入口**: http://localhost (Nginx负载均衡) - **监控页面**: http://localhost:8080/status ## 📊 监控和管理 ### 1. 实例状态监控 ```bash # 查看所有实例状态 ./start-multi-instance.sh status all # 查看单个实例状态 ./start-multi-instance.sh status 9900 ``` ### 2. 日志监控 ```bash # 查看实时日志 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. 进程监控 ```bash # 查看Java进程 ps aux | grep java # 查看端口占用 netstat -tlnp | grep :99 ``` ## ⚠️ 注意事项 ### 1. 端口冲突 - 确保9900-9903端口未被其他服务占用 - 检查防火墙设置,确保端口可访问 ### 2. 内存配置 - 每个实例默认配置:最小512MB,最大1024MB - 根据服务器配置调整 `JAVA_OPTS` 参数 ### 3. 数据库连接 - 所有实例共享同一个数据库 - 确保数据库连接池配置合理,避免连接数过多 ### 4. 文件上传 - 临时文件目录:`/ruoyi/server/temp` - 确保目录存在且有写权限 ## 🔄 故障排查 ### 1. 实例启动失败 ```bash # 检查JAR文件是否存在 ls -la ruoyi-admin.jar # 检查端口是否被占用 netstat -tlnp | grep :99 # 查看启动日志 tail -f logs/ruoyi-admin-9900.log ``` ### 2. 实例无法访问 ```bash # 检查防火墙设置 firewall-cmd --list-ports # 检查SELinux状态 (CentOS/RHEL) getenforce # 测试端口连通性 telnet localhost 9900 ``` ### 3. 负载均衡不工作 ```bash # 检查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调优 ```bash # 根据服务器内存调整JVM参数 JAVA_OPTS="-Xms2g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m" ``` ### 2. 数据库连接池优化 ```yaml # 在application-prod-*.yml中调整 spring: datasource: hikari: maxPoolSize: 100 # 根据实例数调整 minIdle: 20 connectionTimeout: 30000 ``` ### 3. 缓存配置 ```yaml # 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 **👨‍💻 维护人员**: 开发团队