318 lines
7.2 KiB
Markdown
318 lines
7.2 KiB
Markdown
# 🚀 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 已配置 `<maven.compiler.parameters>true</maven.compiler.parameters>` 与 `-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
|
||
**👨💻 维护人员**: 开发团队
|