4核8G 是部署若依(RuoYi)的“甜点配置”,既能跑得快,又不会让钱包太痛。但很多新手踩坑,不是因为配置低,而是因为环境没调优、内存没限制、端口没开放。
下面直接上干货,分场景说清楚怎么搞。
一、 先搞清楚:你部署的是哪个版本?
若依主要有两个分支,资源消耗差异巨大:
-
RuoYi-Vue(前后端分离版)
- 前端:Vue3/Vue2 + Nginx
- 后端:Spring Boot + MyBatis Plus
- 推荐架构:Nginx 做静态资源X_X + Spring Boot 应用服务
- 资源占用:中等。JVM 默认堆内存可能占满 8G,导致系统卡顿甚至 OOM。
-
RuoYi-Cloud(微服务版)
- 包含 Nacos、Gateway、Auth、Common 等多个模块
- 资源占用:极高! 4核8G 跑全套微服务会非常吃力,启动慢、响应慢,容易内存溢出。
- 建议:除非你只是学习单个模块,否则生产环境强烈建议升级到 8核16G 以上,或者只部署核心服务。
本文默认以最常见的 RuoYi-Vue(单体/前后端分离)为例。
二、 核心避坑指南:JVM 内存设置
这是最关键的一步!Spring Boot 默认会根据服务器总内存自动计算堆大小(通常取物理内存的 1/4)。在 8G 机器上,它可能尝试分配 2G+ 给 JVM,再加上操作系统和其他进程,极易触发 Swap 交换,导致 CPU 飙升、接口超时。
正确做法:手动限制 JVM 堆内存。
在你的 application.yml 或启动脚本中,明确指定 JVM 参数:
# 示例启动命令(Linux)
java -Xms2g -Xmx2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m
-jar ruoyi-admin.jar --spring.profiles.active=prod
-Xms2g -Xmx2g:初始堆和最大堆都设为 2GB,避免动态扩容带来的性能抖动。- 剩余 6GB 留给操作系统、MySQL、Redis 等组件。
⚠️ 如果你同时部署了 MySQL 和 Redis,它们也需要内存。建议:
- MySQL:限制 innodb_buffer_pool_size = 1G~2G
- Redis:maxmemory 设置为 512MB~1G
- JVM:保持 2G~3G
三、 部署架构优化(Nginx + Spring Boot)
不要直接用 java -jar 跑在前台,要用 systemd 管理,并用 Nginx 反向X_X。
1. 安装依赖
# CentOS/RHEL
yum install -y nginx java-1.8.0-openjdk-devel maven git
# Ubuntu/Debian
apt update && apt install -y nginx openjdk-8-jdk maven git
2. 编译打包
本地 IDEA 中执行 mvn clean package,生成 target/ruoyi-admin.jar,上传到服务器 /opt/ruoyi/ 目录。
3. 配置 Nginx
编辑 /etc/nginx/conf.d/ruoyi.conf:
server {
listen 80;
server_name your_domain.com; # 替换为你的域名或IP
# 前端静态资源
location / {
root /usr/share/nginx/html; # 假设你把 dist 文件夹解压到这里
index index.html;
try_files $uri $uri/ /index.html; # Vue History 模式必须
}
# 后端 API 接口
location /prod-api/ {
proxy_pass http://127.0.0.1:8080/; # 若依默认端口
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
# 文件上传路径(可选)
location /profile/ {
alias /home/profile/;
expires 30d;
}
}
重启 Nginx:
systemctl restart nginx
systemctl enable nginx
4. 用 Systemd 管理服务(开机自启)
创建 /etc/systemd/system/ruoyi.service:
[Unit]
Description=RuoYi Admin Service
After=syslog.target network.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/ruoyi
ExecStart=/usr/bin/java -Xms2g -Xmx2g -jar /opt/ruoyi/ruoyi-admin.jar --spring.profiles.active=prod
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
启用并启动:
systemctl daemon-reload
systemctl start ruoyi
systemctl enable ruoyi
journalctl -fu ruoyi # 查看实时日志
四、 数据库与缓存优化
1. MySQL 优化
修改 /etc/my.cnf:
[mysqld]
# 关键配置
innodb_buffer_pool_size = 1G # 根据剩余内存调整,不要超过总内存的 50%
max_connections = 500 # 若依并发不高,不用太大
query_cache_type = 0 # MySQL 8.0+ 已移除,7.x 建议关闭
slow_query_log = 1
long_query_time = 2
重启 MySQL:
systemctl restart mysqld
2. Redis 优化
修改 /etc/redis.conf:
maxmemory 512mb
maxmemory-policy allkeys-lru
bind 127.0.0.1
protected-mode yes
port 6379
requirepass your_redis_password # 务必设密码!
重启 Redis:
systemctl restart redis
五、 安全与运维建议
-
防火墙/安全组
- 只开放 80(HTTP)、443(HTTPS)、22(SSH)
- 严禁 开放 8080、3306、6379 到公网!
- 使用云厂商的安全组规则,绑定实例 IP。
-
SSL 证书(HTTPS)
- 申请 Let’s Encrypt 免费证书或使用阿里云/腾讯云免费证书。
- Nginx 配置 SSL,提升安全性和 SEO。
-
备份策略
- 每天定时备份 MySQL 数据库:
crontab -e 0 2 * * * /usr/bin/mysqldump -u root -p'password' ruoyi > /backup/ruoyi_$(date +%F).sql - 定期清理旧备份,保留最近 7 天。
- 每天定时备份 MySQL 数据库:
-
监控告警
- 安装
htop、iotop观察资源。 - 或使用简单脚本监控 JVM 内存和磁盘空间。
- 设置磁盘使用率 > 80% 时报警。
- 安装
六、 常见问题排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 页面加载慢,API 响应超时 | JVM 内存不足,频繁 GC | 检查 jstat -gcutil <pid>,增加 -Xmx 或升级配置 |
| 启动失败,提示端口占用 | 8080 被其他进程占用 | lsof -i :8080 查找并 kill 掉 |
| Nginx 返回 404 | 前端路径配置错误 | 检查 root 指向是否正确,Vue History 模式需配置 try_files |
| Redis 连接拒绝 | 密码错误或未启动 | 检查 redis-cli 登录,确认 requirepass 是否匹配 |
| 文件上传失败 | 权限问题 | 确保 /home/profile/ 目录存在且可写,Nginx 用户有权限 |
总结
4核8G 部署若依完全够用,关键在于:
- 限死 JVM 堆内存(2G~3G),别让它吃光所有资源。
- Nginx 反向X_X,动静分离。
- MySQL 和 Redis 合理分配内存,避免争抢。
- 安全第一,不暴露内网端口。
按这个流程走,你的若依系统能稳定运行至少 1~2 年,应对中小型项目毫无压力。
云知道CLOUD