博客跑起来之后,我 free -h 一看:2G 内存用了不到 600M,剩下 1.4G 在那儿躺平。我交着钱让它闲着,这感觉比后院空着一块地不种菜还让我难受。于是开始琢磨:2核2G 还能塞点啥?

这台 2核2G 的小机器当初是怎么选出来的,价格配置对比记在另一篇里,结论是:博客这点活儿,2核2G 不是将就,是性能过剩。

下面这份清单,全是我亲自试过、了解内存占用的轻量服务。分两类:在跑的,和试过又删了的。诚实标注,绝不把"我听说不错"的东西塞进来。

在跑的:已经安家落户

Uptime Kuma —— 网站监控,内存占用约 100M

干的事:每分钟检查我的博客能不能打开,挂了就推送告警。界面好看,Docker 一行命令起服务。我之前有篇文章写过半夜被告警叫醒的事,报信的就是它。就我这台机器实测,跑起来内存一百来 M,2核2G 毫无压力。个人站长人手一个,不夸张。

Uptime Kuma 半夜把我叫醒过,靠的就是它每分钟检查一次;至于监控本身怎么做,我后来写了一篇从 free、top 到告警脚本的入门记录。

Uptime Kuma 跑在 3001 端口,我不想让访客记端口号,就用 Nginx 反向代理给了它一个体面的域名,配置笔记在另一篇。

FreshRSS —— RSS 订阅器,内存占用约 50M

干的事:把我关注的博客、新闻源聚到一起,每天早上花十分钟刷完,不用挨个网站跑。PHP 写的,轻得像片叶子,内存几十 M。我这种"早上喝咖啡看 RSS"的中年人,离不开它。装完第一件事是把之前收藏夹里二十多个博客源导进去,世界清净了。

ntfy —— 推送通知,内存占用约 20M

干的事:给手机发推送。我的用法很专一:服务器监控脚本告警、备份完成通知,全走它。Go 写的单二进制,内存占用二三十 M,轻到可以忽略。手机上装个 ntfy App,订阅自己的 topic 就行。半夜被告警叫醒虽然痛苦,但总比早上发现网站挂了一整夜强。

这三个加起来不到 200M 内存,博客本身 600M,整机用了 800M 出头,2G 还剩一大半。这就是轻量服务的魅力:各司其职,谁也不抢谁的饭。看着 free -h 里那一栏富余的内存,强迫症表示很舒适。

试过又删了的:好东西,但跟我不合

AdGuard Home —— 去广告 DNS,内存占用约 50M

干的事:在家里的网络层面挡广告,全家设备受益。我试跑了两周,效果确实好,手机 App 开屏广告少了一大半。为什么删了?因为我把 DNS 指过去之后,有次它自己挂了,全家断网半小时,被太太"约谈"了。DNS 这种基础设施,稳定性要求比博客高得多,我这台小机器还是别揽这个瓷器活。等以后有富余机器再说。

Gitea —— 自建 Git 仓库,内存占用约 150M

干的事:放自己的代码、私有笔记。Go 写的,功能全,内存一百多 M,2核2G 跑得动。我试用了一个月,最后删了,原因很简单:我的代码量配不上一个 Git 服务器,博客源文件直接放 GitHub 私有仓库更省心。杀鸡用牛刀,牛也尴尬,这个道理买 VPS 时就悟过一次,这里又悟了一次。

没碰的:知道很火,但超出我的需求

像 Nextcloud(网盘)、Jellyfin(影音)这种,功能强大,但内存和硬盘开销都大。Nextcloud 跑起来加上数据库,轻松吃掉 1G 内存;Jellyfin 转码更是 CPU 杀手。我这台 2核2G 是博客专用机,定位是"轻",重型服务不在考虑范围。不是它们不好,是不合适——跟买车一样,家里就三口人,不买七座。

差点安家的:Wallos 订阅管理

今年整理信用卡账单,发现订阅多到离谱:流媒体、云存储、域名、各种 App,一个月小几百美元,但到底订了啥、啥时候续、哪个在烧钱,完全没数。差点装上 Wallos——开源订阅管理服务,Docker 一把梭:

services:
  wallos:
    image: bellamy/wallos:latest
    ports:
      - "8282:80"
    volumes:
      - ./data:/var/www/html/db
      - ./logos:/var/www/html/images/uploads/logos

内存占用 100M 出头,2核2G 吃得下,界面也好看。为什么最后没装?因为我先拿电子表格手动盘了一遍订阅,砍掉了 4 个僵尸订阅,一个月省 40 多美元——问题已经解决了,就不需要再为它养个服务。

这个决定让我很得意:“没装"比"装了又删"进了一步。工具是手段,不是目的。先拿纸笔把问题搞清楚,搞不清楚再上工具——顺序反了,就是为了折腾而折腾。

内存账本:整机盘点

服务内存占用状态
博客(Hugo + Nginx)约 600M在跑
Uptime Kuma约 100M在跑
FreshRSS约 50M在跑
ntfy约 20M在跑
系统及其他约 200M—
合计约 970M2G 还剩一半多

970M,富余 1G。这就是我敢琢磨 Wallos 的底气——账本清楚,才敢花钱。反过来,账本不清楚的时候,一个服务都不敢加。先 free -h,再谈梦想,顺序不能反。

Docker 还是单二进制:我的选择逻辑

这几个服务,Kuma 和 Wallos 是 Docker,ntfy 是单二进制。选择逻辑很简单:

  • 用 Docker:依赖复杂的(Kuma 要 Node 环境),或者官方只给 Docker 镜像的。隔离性好,重建方便。
  • 用单二进制:Go、Rust 写的单个文件(ntfy),下载就跑,升级就是换个文件,备份都不用停服务。

没有高下,只有合适。唯一一条铁律:数据卷必须映射到宿主机目录。容器删了重建是常事,数据要是跟着容器一起没了,哭都找不到调——别问我怎么知道的。

加服务的三条规矩

折腾几个月,我给自己定了三条规矩,分享出来:

  1. 一次只加一个。新服务上线后观察三五天,看内存曲线稳不稳,再考虑下一个。一口气塞三个,出问题都不知道是谁的锅。
  2. 博客优先。任何新服务不能影响博客的稳定和速度。博客是正房,其他都是偏房,这个主次不能乱。
  3. 能删就删。试过不合适就删,别留着"万一以后用”。服务器跟车库一样,堆的杂物越多,越难受。

一句话总结

2核2G 跑博客之余,塞两三个轻量服务绰绰有余:Uptime Kuma 看站、FreshRSS 读订阅、ntfy 收告警,加起来不到 200M 内存。一次加一个,观察几天再加下一个,博客的稳定永远排第一。