个人项目最常见的配置就是 2C4G:一台机器上同时跑博客、API、数据库,再塞个缓存。很多人要么买大了浪费,要么挤爆了天天重启。这篇讲怎么估、怎么拆、什么时候升级。

一台服务器的资源切分示意

先估算:每个服务吃多少

动手前先给每个服务画个像,不用精确,量级对就行:

服务内存量级CPU 特点
静态博客 / 文档站几十 MB几乎不吃
Node/Java API200–500 MB请求来了才吃
MySQL / PostgreSQL500MB–1GB持续低占用
Redis 缓存按数据量,几十到几百 MB很低

2C4G 跑”博客 + API + 数据库 + Redis”这一套是够的,前提是没有内存泄漏、数据库配了合理的缓冲池。MySQL 默认配置在小内存机器上很贪吃,记得调小 innodb_buffer_pool_size。

怎么拆:Docker 隔离优先

用容器隔离不同服务

别把所有服务裸装在系统上混跑,互相影响还难迁移。推荐:

  • 每个服务一个容器(Docker Compose 编排),资源上限写死:mem_limit 给数据库和 API 都设上。
  • 数据库的数据卷挂载到宿主机目录,重建容器不丢数据。
  • 反向代理(Nginx/Caddy)单独一个容器或直接跑在宿主机。

这样某个服务内存泄漏,最多拖死自己,不会把整台机器拖进 swap。

数据库放哪:同机还是托管

  • 同机:省钱、延迟低,个人项目首选。但备份必须做异地一份,机器挂了数据不能跟着没。
  • 托管数据库(云厂商的 RDS):省心、有自动备份,贵。小项目没必要,等数据真值钱了再迁。

什么时候该升级:看这三个信号

  1. 内存长期超过 80%:先查是谁吃的(docker stats),是泄漏就修,是真不够就加。
  2. CPU 持续跑满:偶发尖刺没关系,看 15 分钟均值。
  3. 磁盘只剩 10%:日志和备份先清,df -h 每周看一眼。

三个信号出现两个,再考虑加配置。先纵向升级(加内存),再横向拆分(加机器)——个人项目阶段,一台 4C8G 往往比两台 2C4G 好管得多。

下一步