在生产环境中将 Spring Boot(应用) + MySQL(数据库) + MinIO(对象存储) 三者部署在同一台服务器(即“三合一”单机部署),需兼顾稳定性、性能和基本可维护性。虽然技术上可行,但强烈不建议在中高负载或生产核心系统中这样部署(存在单点故障、资源争抢、安全隔离不足等问题)。不过若为开发/测试/轻量级POC/小型内部工具系统(如企业内网文档共享平台、小型CMS后台),以下是最小推荐配置:
✅ 最小推荐服务器配置(单机三合一,轻量生产/准生产环境)
| 组件 | 推荐配置 | 说明 |
|---|---|---|
| CPU | 4 核(vCPU) | Spring Boot(默认Tomcat)+ MySQL(InnoDB)+ MinIO(Go并发模型)均需CPU;2核易出现响应延迟,4核可保障基础并发(~50–100并发请求) |
| 内存 | 8 GB RAM | ⚠️ 关键项! • MySQL 建议分配 2.5–3.5 GB( innodb_buffer_pool_size)• Spring Boot(JVM)建议 -Xms2g -Xmx2g(避免频繁GC)• MinIO 推荐 ≥1.5 GB(尤其启用纠删码或多桶时) • 系统及预留:≥1 GB → 总计 ≈ 7–8 GB 合理 |
| 磁盘 | 100 GB SSD(NVMe 更佳) | • OS + 软件:15–20 GB • MySQL 数据文件(初期):10–30 GB(视业务增长) • MinIO 存储(最关键):剩余空间全部用于 MinIO(建议 ≥60 GB 可用空间) ✅ 必须为 SSD/NVMe(HDD 会导致 MinIO 性能急剧下降,MySQL WAL 写入延迟高) |
| 操作系统 | Ubuntu 22.04 LTS / CentOS Stream 9 / Rocky Linux 9 | 长期支持、容器友好、MinIO 官方推荐 |
| 网络 | 1 Gbps 公网/内网带宽,固定公网IP(如需外访) | MinIO 默认监听 9000 端口,需防火墙放行;建议通过 Nginx 反向X_X + HTTPS |
⚠️ 关键注意事项与优化建议
-
资源隔离(必须做)
- 使用
systemd或 Docker(推荐)分别管理三服务,限制内存/CPU:# 示例:Docker 启动 MinIO(限 1.5G 内存) docker run -d --name minio --memory=1536m --cpus=1.5 -p 9000:9000 -p 9001:9001 -v /data/minio:/data -e "MINIO_ROOT_USER=minioadmin" -e "MINIO_ROOT_PASSWORD=strongpassword123!" quay.io/minio/minio server /data --console-address :9001 - MySQL 配置关键参数(
/etc/mysql/my.cnf):[mysqld] innodb_buffer_pool_size = 3G max_connections = 200 innodb_log_file_size = 256M
- 使用
-
MinIO 部署模式选择
- ❌ 不要用
minio server /data单节点(无持久化保障) - ✅ 推荐:单节点 + 多磁盘(至少2块挂载目录) 或 单节点 + 本地目录(确保备份)
# 单节点双盘(提升吞吐 & 故障缓冲) minio server /data1 /data2 --console-address :9001
- ❌ 不要用
-
Spring Boot 优化
- 关闭 JMX、Actuator 非必要端点
- 连接池(HikariCP)设置合理大小(
maximum-pool-size: 20) - 静态资源交由 Nginx 托管,减少 JVM 压力
-
备份与监控(最低要求)
- ✅ 每日 MySQL
mysqldump+ MinIOmc mirror到另一台机器或云存储 - ✅ 使用
htop/df -h/free -h+ 简单 Shell 脚本告警磁盘 >90% - ✅ MinIO 控制台(
https://your-ip:9001)开启并设强密码
- ✅ 每日 MySQL
-
安全底线
- 禁用 MySQL root 远程登录,创建专用用户(如
spring_app@localhost) - MinIO Root 用户密码 必须强密码(12位+大小写字母+数字+符号),禁止使用
minioadmin/minioadmin - Spring Boot 配置中心密码加密(如 Jasypt)或使用环境变量注入
- 禁用 MySQL root 远程登录,创建专用用户(如
🚫 绝对不可接受的配置(会频繁崩溃/不可用)
| 配置 | 问题 |
|---|---|
| 2核2GB RAM | MySQL buffer pool 不足 → 磁盘 IO 爆表;JVM GC 频繁;MinIO 启动失败 |
| HDD 磁盘 | MinIO PUT/GET 延迟 >500ms;MySQL 写入超时;整体响应卡顿 |
| 40GB 总磁盘 | 1周后因日志/上传文件占满 → 服务全挂(MySQL crash,MinIO read-only) |
| 未限制资源 | 任一服务 OOM kill(常见:MySQL 或 MinIO 占满内存) |
✅ 进阶建议(预算允许时)
| 场景 | 推荐升级方案 |
|---|---|
| 并发 >200 / 日活 >1w | → 拆分为 2台:1台(Spring Boot + Nginx),1台(MySQL + MinIO) |
| 数据可靠性要求高 | → MinIO 改为 4节点分布式模式(最低4台 × 4GB RAM) |
| 长期稳定生产 | → 直接采用云服务:RDS(MySQL)+ OSS/S3(MinIO 替代)+ ECS(Spring Boot) |
如需,我可以为你提供:
- ✅ 一键部署脚本(Ubuntu + Docker 三合一)
- ✅ 生产级
application.yml+my.cnf+ MinIO systemd service 配置模板 - ✅ Nginx 反向X_X + HTTPS(Let’s Encrypt)完整配置
- ✅ 自动备份脚本(MySQL dump + MinIO sync + 7天循环清理)
欢迎告知你的具体场景(如:内部知识库?图片上传服务?学生项目?),我可进一步定制方案。
云知识CLOUD