RuoYiPlus与Minio集成实战:从零搭建高效OSS存储系统

张开发
2026/4/6 15:30:45 15 分钟阅读

分享文章

RuoYiPlus与Minio集成实战:从零搭建高效OSS存储系统
1. 为什么选择RuoYiPlus与Minio组合在开发企业级应用时文件存储是个绕不开的话题。传统做法是把文件直接存在服务器本地但这种方式存在单点故障风险扩容也很麻烦。我刚开始做项目时也这么干过结果服务器硬盘爆满导致系统崩溃不得不半夜爬起来处理。后来试过各种云存储方案直到遇到Minio这个开源的宝藏工具。Minio就像是你自己搭建的私有云盘完全兼容AWS S3协议但部署简单到令人发指。我在Windows笔记本上测试时从下载到运行成功只用了3分钟。而RuoYiPlus作为国内流行的快速开发框架集成了Minio之后简直就是如虎添翼。实测下来这套组合方案特别适合以下场景开发测试环境不需要花钱买云存储服务内网应用数据完全自主可控临时项目快速搭建随时销毁教学演示学生能直观看到文件存储过程有个真实案例去年给客户做内部文档管理系统要求所有文件必须存在本地机房。我们用Minio集群部署在三台服务器上通过RuoYiPlus的前端上传界面实现了和某度网盘类似的体验客户验收时直呼这效果跟大厂产品没区别。2. Windows下Minio环境搭建2.1 五分钟快速安装指南先说说我在Windows 10上的实测安装过程比官方文档更接地气的操作下载环节直接浏览器打开http://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe注意这个国内镜像速度飞快。我习惯把这类工具放在D:\dev_tools\minio目录避免中文路径可能带来的坑。存储准备建议专门新建目录作为文件仓库比如我的E:\minio_data。这里有个细节最好在磁盘根目录创建避免Windows权限问题。曾经有同事把目录建在用户文档下结果总是报权限错误。启动命令在minio.exe所在目录按住Shift键右键选择在此处打开PowerShell窗口输入.\minio.exe server E:\minio_data --console-address :9001这个命令有两个关键点E:\minio_data要换成你自己的路径--console-address :9001是固定管理端口避免冲突访问控制台浏览器打开http://localhost:9001初始账号密码都是minioadmin。第一次登录后强烈建议修改密码我有次忘记改密码被测试同事误操作删光了测试数据...2.2 必须掌握的Minio基础配置登录成功后别急着关黑窗口这几个操作是后续集成关键创建Access Key在左侧菜单点击Access Keys → Create access key生成的密钥对一定要立即保存。我习惯用记事本记录后直接复制到RuoYiPlus配置里避免手输错误。曾经因为手抖输错一个字符调试了两小时才发现问题。新建Bucket点击Buckets → Create Bucket名字建议全小写字母。有个坑要注意Bucket名称必须全局唯一哪怕是在你自己的Minio服务里。我常用项目名环境的命名方式比如ruoyi-dev。权限设置新创建的Bucket默认是私有权限需要手动改为public才能通过URL直接访问文件。点击Bucket名称 → Manage → Access Rules → 添加readonly规则。这个步骤经常被忽略导致文件上传成功但前端无法显示。3. RuoYiPlus中的Minio集成实战3.1 后台配置关键步骤现在进入重头戏如何在RuoYiPlus中接入Minio。我用的是RuoYiPlus 3.6.0版本其他版本可能略有差异找到配置入口登录后台 → 系统管理 → 文件管理 → 配置管理。这里有个隐藏技巧如果没看到配置入口检查用户权限是否包含system:file:view。修改存储配置点击第一条记录的修改按钮重点配置这三个参数Endpoint填写http://127.0.0.1:9000注意不是管理台的9001端口Access Key粘贴Minio控制台生成的Access KeySecret Key对应Secret KeyBucket名称填写之前创建的Bucket名域名字段陷阱很多教程没说清楚如果Minio和RuoYiPlus不在同一台服务器域名字段要填Minio服务器的真实IP或域名。我在公司内网测试时这里填的是http://192.168.1.100:9000。3.2 文件上传功能调试配置保存后别急着庆祝实际测试中可能会遇到这些问题首次上传卡顿这是正常现象因为要初始化连接。我测试时传个2MB的图片等了约15秒第二次就秒传了。如果持续卡顿检查Minio服务器资源占用情况。权限错误排查如果报Access Denied按这个顺序检查Minio控制台的Access Key是否匹配Bucket权限是否为public防火墙是否放行了9000端口文件路径之谜上传成功后文件实际存储在Minio数据目录的Bucket子文件夹下。比如我的配置上传test.jpg后实际路径是E:\minio_data\ruoyi-dev\test.jpg。有个实用技巧在Minio控制台可以直接预览和下载文件比去文件夹找方便多了。4. 生产环境优化建议4.1 安全加固方案在测试环境跑通只是第一步真要上线还得做这些加固HTTPS配置用Nginx给Minio加SSL证书配置示例server { listen 443 ssl; server_name minio.yourdomain.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; } }定期备份策略虽然Minio自带纠删码但重要数据还是要额外备份。我用的bat脚本echo off set backup_dirE:\minio_backup\%date:~0,4%%date:~5,2%%date:~8,2% mkdir %backup_dir% xcopy E:\minio_data %backup_dir% /E /H /C /I /Y4.2 性能调优技巧当用户量上来后这些优化手段很管用客户端直传大文件建议让浏览器直接传到Minio减轻应用服务器压力。前端代码示例async function directUpload(file) { const presignedUrl await axios.get(/api/file/presigned-url); await axios.put(presignedUrl, file, { headers: {Content-Type: file.type} }); }多节点部署Minio支持分布式部署启动命令加上其他节点地址即可minio.exe server http://192.168.1.101/data http://192.168.1.102/data ...监控配置PrometheusGranfa监控方案在Minio启动命令添加--prometheus-job-idruoyi_minio5. 常见问题解决方案5.1 连接超时问题排查最近帮同事解决的问题案例上传总是超时按照这个流程排查先用Postman直接调Minio接口成功 → 问题出在RuoYiPlus配置检查application.yml发现多写了空格minio: endpoint: http://127.0.0.1:9000 # 注意这里不能有空格查看RuoYiPlus日志发现报Invalid endpoint最终发现是Nginx代理配置少了proxy_set_header Host $host;5.2 文件上传中断处理大文件上传时网络抖动可能导致中断两种恢复方案分片上传前端代码改造const uploader new MinioClient({ partSize: 5 * 1024 * 1024 // 5MB分片 });断点续传记录已上传的ETag// RuoYiPlus中的上传记录 uploadRecord.setEtag(uploadResult.etag());5.3 存储空间不足预警写个定时任务检查剩余空间核心代码StatObjectResponse stat minioClient.statObject(bucketName, ); double usedPercent (double)stat.size() / stat.totalSize() * 100; if(usedPercent 80) { sendAlertEmail(存储空间即将不足); }最后分享个真实踩坑经历有次更新Minio版本后突然所有文件无法访问查了半天发现是新版本默认启用了SSL而我们的Nginx配置还是http。所以升级时一定要看变更日志现在我的团队有个规矩所有组件升级必须在测试环境跑满一周才准上线。

更多文章