若依4核8G的云主机部署?

4核8G 是部署若依(RuoYi)的“甜点配置”,既能跑得快,又不会让钱包太痛。但很多新手踩坑,不是因为配置低,而是因为环境没调优、内存没限制、端口没开放

下面直接上干货,分场景说清楚怎么搞。

一、 先搞清楚:你部署的是哪个版本?

若依主要有两个分支,资源消耗差异巨大:

  1. RuoYi-Vue(前后端分离版)

    • 前端:Vue3/Vue2 + Nginx
    • 后端:Spring Boot + MyBatis Plus
    • 推荐架构:Nginx 做静态资源X_X + Spring Boot 应用服务
    • 资源占用:中等。JVM 默认堆内存可能占满 8G,导致系统卡顿甚至 OOM。
  2. 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

五、 安全与运维建议

  1. 防火墙/安全组

    • 只开放 80(HTTP)、443(HTTPS)、22(SSH)
    • 严禁 开放 8080、3306、6379 到公网!
    • 使用云厂商的安全组规则,绑定实例 IP。
  2. SSL 证书(HTTPS)

    • 申请 Let’s Encrypt 免费证书或使用阿里云/腾讯云免费证书。
    • Nginx 配置 SSL,提升安全性和 SEO。
  3. 备份策略

    • 每天定时备份 MySQL 数据库:
      crontab -e
      0 2 * * * /usr/bin/mysqldump -u root -p'password' ruoyi > /backup/ruoyi_$(date +%F).sql
    • 定期清理旧备份,保留最近 7 天。
  4. 监控告警

    • 安装 htopiotop 观察资源。
    • 或使用简单脚本监控 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 部署若依完全够用,关键在于:

  1. 限死 JVM 堆内存(2G~3G),别让它吃光所有资源。
  2. Nginx 反向X_X,动静分离。
  3. MySQL 和 Redis 合理分配内存,避免争抢。
  4. 安全第一,不暴露内网端口。

按这个流程走,你的若依系统能稳定运行至少 1~2 年,应对中小型项目毫无压力。

未经允许不得转载:云知道CLOUD » 若依4核8G的云主机部署?