2核4G的小水管云机器,我跑了这些服务,496天没重启

导读:一台年付不到 199 块的小机器,替掉了 Trello、剪藏工具、远程开发环境,还顺手给我手机推通知。这篇把它上面常驻的 5 个服务一个个摊开讲,再补几个我试过、按需开的,附一张真实的内存账本和我踩过的坑。

早上登上机器,顺手敲了个uptime。

11:08:33 up 496 days, 22:47, 1 user, load average: 0.02, 0.06, 0.01

496 天。这中间我换过项目、搬过工位、手机都换了两台,这台机器一次没重启。

负载 0.02,基本等于在睡觉。

很多人对云服务器的想象是「跑业务、扛流量」,我这台刚好反过来——它是我个人的工具间。写代码、记东西、管任务、收通知,全塞在里面。

先报配置,省得猜。

一、Nginx:API 的中转层
打开网易新闻 查看精彩图片
一、Nginx:API 的中转层

最不起眼的一个服务,用得最多。

我拿它干一件事:把国内不好直连的 API,收拢到一个自己的域名下。

https://util.xxx.com/v1  →  https://api.openai.com/v1
https://notion.xxx.com/v1 → https://api.notion.com/v1

好处不是「能连上」这么简单。是所有脚本、快捷指令、客户端里只填一个地址,哪天要换线路、换账号、加限速,改一处 nginx 就全生效。

配置文件不用整段抄,记住三行就够:

location /v1 {
proxy_pass https://api.openai.com/v1;
proxy_ssl_server_name on; # 不加这句,上游直接 403
proxy_set_header Host api.openai.com; # Host 头必须改成上游域名
}

再加一句proxy_buffering off;,流式输出才会一个字一个字地吐,不会憋到最后一次性刷出来。

说句实在的:这种中转只给自己用。加个 IP 白名单或者 basic auth,别裸着挂公网,不然你的 key 就是别人的 key。

二、code-server:浏览器里的 VS Code

coder/code-server,GitHub 上快 8 万 star,MIT 协议。

装完就一个端口,浏览器打开就是熟悉的 VS Code:插件、终端、Git、多文件搜索,全都一样。

我用它的场景很具体——临时在别人电脑上、在公司、在手机上,想改一个文件、跑一条命令。以前只能干着急,现在开个网页就行。

几个真实体会:

  • • 插件能装,但不要装重型的。4G 内存的机器,语言服务器开两个就开始卡

  • • 在files.watcherExclude里把大目录排掉,别让它监听整个工作区,不然 CPU 会被吃满

  • • 一定要套 HTTPS,前面用 nginx 反代,别直连 8080 端口

它不是让你放弃本地 IDE。它是那种「一年用二十次,但每次都很救命」的东西。

三、Planka:任务看板放自己手里
打开网易新闻 查看精彩图片
三、Planka:任务看板放自己手里

plankanban/planka,12.6k star。自托管的看板,长得像 Trello,逻辑也一样。

起因很朴素:任务都扔进 Things 里,列表是列表,看不出一件事卡在哪个阶段。以前公司用 Trello,那套「待办 / 进行中 / 等确认 / 已完成」的泳道,确实比 GTD 直观。

但我不想把项目进度交给别人的服务器。Planka 一套 Docker Compose 起来,数据躺在我自己的 Postgres 里,导出、备份、随时搬走。

用了一年多,它在跑什么状态?Up 12 months (healthy)。

有个细节值得说:它默认要一个 Postgres。小机器上这是最吃内存的一个组件,后面「账本」那节会讲怎么压。
四、Bark:一条 curl 推到 iPhone

Finb/Bark,9.3k star,MIT,两端全开源。iOS 上一个 App,服务端一个容器。

它解决的是「我要让脚本主动告诉我」。

监控脚本发现站点挂了、定时任务跑完、服务器磁盘过 80%——一条 POST 就推到手机锁屏:

curl -X POST "https://bark.xxx.com/你的Key" \
-H 'Content-Type: application/json' \
-d '{"title":"磁盘告警","body":"根分区已用 82%","group":"server"}'

返回{"code":200,"message":"success"}就完事。

为什么不用微信/钉钉机器人?因为 Bark 是系统级通知,能响、能震动、能进通知中心历史。机器人消息你不点开就等于没看见——告警这事上,这个区别很大。

五、Memos:碎片扔进去,博客自己来取

usememos/memos,6.3 万 star,Go 写的单文件服务。

定位是「碎片笔记」,交互像发微博:写一句、加个标签、发出去。

我不在它的网页里看这些字。我的博客直接调它的 API,把「只言片语」那一栏渲染出来。想到什么写进 Memos,博客自动就有了动态,不用登后台、不用重建站。

顺带说个我一直没升级的原因:我机器上跑的还是比较老的版本,而现在官方已经更到 0.31 了(今年 9 月发的),中间加了网页剪藏插件、重写了 Markdown 编辑器。

不升不是懒,是这套东西能跑就别动。真要升,先在快照上试一遍。

还能往上加:三个我试过、按需开的服务

上面 5 个是常驻的,装完基本不用再管。

下面这三个我也装过、跑过挺长一段时间,现在是按需启动。不是不好用,是 4G 内存得算账。

六、Uptime Kuma:把「它有没有一直在」变成看得见的

louislam/uptime-kuma,9.2 万 star,MIT。

一句话说清它干什么:定时去敲你所有服务的门,敲不开就喊人。

HTTP、TCP、Ping、DNS、证书到期、关键字匹配,都能当探针。默认 60 秒一轮,我调到 20 秒。它还自带一个漂亮的状态页,能公开挂出去——别人问你「你这站点稳不稳」,给个链接就行。

最舒服的是它和 Bark 的联动:Kuma 发现服务挂了,webhook 推一条给 Bark,手机立刻响。监控 + 推送,这才是闭环,光有其中一个都是半成品。

内存大概 120MB(Node + 内置 SQLite)。装的时候一定选 SQLite,别给它配 MySQL,那个组合在小机器上纯属自找麻烦。

七、Vaultwarden:40MB 跑一个密码库
打开网易新闻 查看精彩图片
七、Vaultwarden:40MB 跑一个密码库

dani-garcia/vaultwarden,6.9 万 star,AGPL-3.0,Rust 写的。

它是 Bitwarden 服务端的非官方轻量实现。官方全套要跑一堆容器,它一个容器 40MB 就顶下来了,而且 Bitwarden 的官方客户端全都能连——浏览器扩展、iOS、安卓、桌面版,一个不用换。

我用了大半年,体验上和官方服务没区别:自动填充、TOTP、附件、组织共享都在。

两句提醒,都是要紧的:

  • •必须走 HTTPS,admin token 设长一点。这东西装的是你所有密码,不是博客,裸奔等于把家底挂公网

  • •备份就两样:SQLite 单文件 +attachments目录。定时 rsync 到 NAS,齐活

八、IT-Tools:一个 nginx 就能托管的小工具集

CorentinTh/it-tools,4 万 star,GPL-3.0。

JSON 格式化、时间戳转换、Base64、UUID 生成、正则测试、JWT 解析、crontab 表达式、哈希计算……几十个小工具,全在一个页面里。

这东西的价值不在功能多,在于你不需要把内网地址、JWT、密钥粘到别人的网站上。这类网站有多少在偷偷记你输入的东西,谁也说不准。

它是纯静态的,连 Docker 都不用,扔进 nginx 的目录就完事,内存占用基本可以忽略。

有几种东西,别硬塞

顺手劝一句:看到「热门自建服务榜」就照着装,小机器迟早要还债。

  • •Immich / Nextcloud 这类,官方自己都说 4G 起步。4G 上去的结果不是「慢」,是系统三天两头被 OOM Killer 杀进程,你还找不到原因

  • •Gitea(5.8 万 star)确实能在 4G 上跑,但一次git gc、或者 clone 一个大仓库,CPU 会瞬间拉满,整个机器跟着卡。想稳就升配置,别指望它跟静态页一样听话

判断方法很简单:看官方文档写的最低内存,然后往上加 50%。那是「能启动」的线,不是「能天天用」的线。

4G 内存的账本

这是最多人问的部分。5 个服务,4G 内存,够吗?

看真实数字(docker stats常驻值,非峰值):

服务

常驻内存

端口

Nginx(宿主直装)

~15 MB

443

反代,几乎不占

code-server

~180 MB

8090

不开语言服务器时

Planka

~150 MB

3000

Node 应用本体

Planka 依赖的 Postgres

~120 MB

内部

调过 shared_buffers

Bark

~30 MB

Go,轻得离谱

Memos

~60 MB

5230

同 Go 系

加起来不到 600 MB。剩下一个多 G,是 Docker 守护进程、系统本身,还有我留给编译和临时任务的余量。

前面说的那三个按需服务如果全开,再加 170MB 左右,总共 750MB 上下——4G 还撑得住,但就没余量了。这也是我为什么让它们按需启动,而不是开机自启。

能塞下,靠的是三条纪律:

  1. 1.全部 Docker +restart: unless-stopped,重启机器不用手动拉服务

  2. 2.能 SQLite 就别上数据库。只有 Planka 非它不可,才带了个 Postgres

  3. 3.日志必须限大小,不然迟早撑爆 40G 硬盘

星哥的云上小店

买机器走官方渠道就行,别去第三方代购,出问题没人管:

  • • 阿里云:y.xgss.net/a

  • • 腾讯云:y.xgss.net/tx

打开网易新闻 查看精彩图片

复制到浏览器打开,走的是官方活动页,价格和我这里一样,不会多收你一分钱。

最后:什么该上云,什么别上

跑了这么久,我有个很朴素的判断标准:

要「一直在」的,上云。要「存东西」的,放 NAS。

推送服务、API 中转、看板、代码环境、密码库——这些的价值在于随时随地能访问,机器一关就废,所以值得花钱让它一直活着。

照片、影视、备份——这些是容量生意,放云上就是按月交租,放 NAS 一次买断。

我这台机器每月不到 60 块。同样的功能,如果全用订阅制:看板 10 刀、笔记 10 刀、远程开发环境 20 刀起……一个月就是两百多。

不是自建省钱,是自建只需要付一次「电费」。

如果你也想搞一台这样的机器,有句话得先说:别一上来就冲高配。2 核 4G 完全够跑这一套,等你真的跑出瓶颈了再升级,那时候你才知道自己缺的是内存还是 CPU。

国内的话,我一般走阿里云或者腾讯云的轻量,年付活动机 2 核 4G 百来块就能拿下,续费价记得提前看清楚,别被首年价忽悠。