圭木o 2026-11-10 16:17:13
自托管 · 轻量服务
上次那篇《如何榨干NAS的性能,物尽其用》,后台数据有点出乎我意料。也欠了大家一篇 Docker 专题,今天补上——但换个角度写。
上一篇讲的是怎么让硬件别闲着。
这一篇讲的是反过来的事:怎么让服务别把硬件吃掉。
先说个结论。我见过太多人的 NAS 死法,不是硬盘坏,是内存先炸的。
有人一口气装了十几个容器,什么火装什么。第三天 NAS 风扇不转了——不是坏了,是 CPU 长期满载,热到降频。第四天他重装了系统,五个 G 的相册还没备份。
所以这篇不推荐"最强"的服务,只推荐最不占资源的。10 个全部是纯 Go / Rust / 单二进制的轻量货,加起来的内存占用还不到一个 Jellyfin 转码任务。
先把三条红线画出来
下面这些东西,跑之前先确认三件事,不然装完就是给自己找事:
一、NAS 不是服务器。它的散热是按"待机+偶尔读写"设计的。常年满载会让硬盘和主板都提前报废。下面十项加起来的常态负载,实测在 1 核 / 1G 内存以内,这是安全的量级。
二、别碰转码和 AI。凡是带 ffmpeg 实时转码、带 OCR、带机器学习的,都不属于"轻量"。群晖 DS220+ 这种机器跑一个 Immich 的机器学习任务,能让你连 DSM 后台都点不动。
三、默认全关在局域网里。下面除了第一个,其余都不要直接映射到公网。要出门访问,就套一层反代加认证,或者干脆走第 1 条。
第 1 组:先把门看住
01 Tailscale:没有公网 IP,也进得来
内存约 30MB · 难度 ★★ · 组网工具
上次我讲的是公网 IP + 二级域名 + 反代 + DDNS。这套很稳,但它有个前提:你得有公网 IP。现在大量家宽是 CGNAT,拿不到。
Tailscale 用 WireGuard 打洞,让 NAS 和你的手机、笔记本组成一张虚拟内网。装完以后你在外面就是"在家":不用开端口,不用买域名,攻击面为零——因为在公网扫不到你的任何端口。
部署就一句。拿到 tailscale 后台的 auth key 填进环境变量,容器起来自动拉进你的内网。
为什么轻:WireGuard 在内核态处理加密,用户态几乎不占 CPU。这是十项里唯一值得长期常驻的"外网通道"。
02 AdGuard Home:全屋的广告在 DNS 层就死了
内存约 40MB · 难度 ★★ · 网络过滤
它是个 DNS 服务器,内置几百万条广告和追踪域名。路由器把 DHCP 的 DNS 指向它,家里所有设备——手机 App、电视盒子、小孩的平板——的开屏广告和追踪请求会在解析阶段就被丢掉。
效果是整屋生效,不用一台台设备装插件;副作用是那些 App 确实变干净了,也确实是靠"解析失败"实现的,所以偶尔要放行一两个域名。
一个必踩的坑:NAS 本机自己的 53 端口通常已被系统 DNS 占着。不要硬抢,把容器端口映射成 5353:53,再把路由器指过来就行。
为什么轻:纯 Go 写的单二进制,没有数据库,规则走内存。日常 CPU 占用基本是 0。
03 Uptime Kuma:谁先挂,你先知道
内存约 90MB · 难度 ★ · 监控告警
给你所有的服务加探针,HTTP、TCP、Ping、证书到期都行。挂了就推。推送通道能接 Telegram、邮件、Bark,也能接你已有的 Gotify。
听着像自娱自乐,但它是自托管的必需品:你装了十个服务,总有更新把某个弄坏的一天。没有监控,你会在"发现某张重要照片打不开"的时候才意识到。
为什么轻:Node 写的,90MB 在十项里算高的,但只在检测时唤醒,平时近乎休眠。别开太密的检测间隔,5 分钟一次够用。
第 2 组:把付费服务换回自己手里
04 Navidrome:Roon 的免费平替
内存约 60MB · 难度 ★★ · 音乐串流
我用 Roon,体验确实好,但它贵,而且订阅一停就什么都没有。Navidrome 是开源的 Subsonic 兼容服务端,把 NAS 上的歌扫成曲库,手机装任意 Subsonic 客户端就能听。
它做的一件事很讨巧:自动读取专辑封面、按标签整理、生成"最近添加"和随机播放。对绝大多数人不发烧的听歌需求,够用到不再想 Roon。
为什么轻:Go 写的,扫库时才吃 CPU。转码是可选项,关掉就完全不碰 ffmpeg。曲库十万首以内,内存都在 100MB 以下。
05 Linkding:书签不该长在浏览器里
内存约 50MB · 难度 ★ · 书签管理
浏览器收藏夹的问题不是难用,是换台设备就断,换个浏览器就重来,而且哪天你忘了导出,几千条就没了。
Linkding 是个自建的书签库,装个浏览器插件一键存,自动抓标题和描述,支持标签和全文搜索。所有浏览器、所有设备访问同一个库。
为什么轻:Python 的小框架加 SQLite,日常内存 50MB 上下。它不做全文抓取正文,只存元数据,所以不会像稍后读工具那样越用越肿。
06 Actual Budget:记账数据在自己机器上
内存约 55MB · 难度 ★★ · 记账
记账 App 的通病是:数据在人家服务器上,说停服就停服,说收费就收费,导出还得求。Actual 是开源的预算工具,服务端跑自己机器,手机装客户端同步。
功能上它是正经的零基预算:每月给每个分类分配额度,流水进来实时看到剩余。国内记账软件很少有做这个模型的。
为什么轻:Node 服务端,SQLite 存数据,55MB 左右。它不在服务端算任何图,报表都在客户端算。
07 Memos:顺手记一句的地方
内存约 35MB · 难度 ★ · 碎片笔记
Obsidian 适合写整篇,但不适合"刚想到一句话"。Memos 就是那个缺口:打开就写,写完就归档,支持标签和搜索,也可以设公开可见当微博用。
它和 Obsidian 不冲突——把 Memos 的导出目录挂进笔记库,碎片最后还是会汇到同一个地方。
为什么轻:单个 Go 二进制加 SQLite,35MB。十项里最轻的一个。
第 3 组:跑起来之后的事
08 Dozzle:不用 SSH 也能看日志
内存约 20MB · 难度 ★ · 日志查看
容器起不来的时候,你要的是日志。但很多人不会 SSH,也不会 docker logs,于是就在群里问"这个镜像怎么跑不起来"。
Dozzle 是个网页版的日志查看器,点容器名就能实时看输出,能搜索、能高亮错误行。只读,改不了东西,很安全。
为什么轻:Go 写的,20MB。它只订阅容器日志流,不索引、不落盘。
09 Restic:备份不是复制
内存约 40MB(增量时)· 难度 ★★★ · 备份
把文件夹复制到另一块盘,不叫备份。勒索软件会一起加密,误删会一起没,硬盘会一起坏。
Restic 做的是内容寻址的增量快照:每次都是加密的、去重的,只存变化的部分。第一次全量之后,后面每次可能只占几十兆。它支持本地、SFTP、S3、WebDAV 各种后端,也能只读挂载任意历史版本回来。
记住 3-2-1:三份数据、两种介质、一份在异地。NAS 上跑 Restic 到另一块盘只是一份,异地那份交给对象存储。
为什么轻:单二进制,跑完就退,不常驻。真正的开销在磁盘 IO,不在内存。
10 Healthchecks:备份到底跑了没有
内存约 45MB · 难度 ★★ · 任务看门狗
第 9 条最容易翻车的地方在这里:定时任务失败是静默的,你会在三个月后需要恢复的时候才发现它早就没跑了。
Healthchecks 是反向监控——不是等它报错,而是要求任务每次成功后 ping 它一下。超过你设的周期没 ping,它就告警。任务"没跑"和"跑失败",两种都能抓到。
为什么轻:Python 加 SQLite,45MB。只处理 ping 请求。
资源预算:别凭感觉装
上面十项的内存是 docker stats 稳定跑了一小时之后的常态值,不是峰值。放在一起看是这样(所有镜像我都在 Docker Hub 上核对过,名字直接搜就能拿到):
465MB / 单核。这是这台机器还敢当 NAS 用的前提下能接受的上限。如果你只有 1G 内存,就只装第 1 组和第 3 组,跳过第 2 组。
顺便记一份黑名单:这些别放 NAS
Immich(机器学习做人脸识别)、Jellyfin / Plex(实时转码)、Paperless-ngx(OCR)、任何本地大模型、n8n 的高频工作流。它们不是不好,是重——一台 2 核 NAS 跑其中任意一个,其他服务都会开始变卡。
最后一条:能收回来,才算自己的
写完这十项,我最大的感受不是"NAS 能干的真多",而是这些东西只要一天不回公网、只用 Tailscale 进来,你就一直在自己的安全边界里。
上次那篇的安全章节我写过:攻击者不是扫你端口多不多,是找你哪个服务有漏洞、哪个密码是不是重用了同一个密码。这十项全部关在虚拟内网里,他连敲门的入口都找不到。
如果你已经有一个跑满一堆容器的 NAS,建议先做一件事:把 CPU 和内存占比最高的三个容器找出来,看看是不是都在黑名单里。
我是老黑,一个 AI 老炮。
下一篇写:怎么把这一整套服务,在三分钟内全部还原到另一台机器上。
【版权声明】本文内容来源于圭木o,版权归原作者及原媒体所有。本站仅作信息分享,不构成任何商业用途;如涉版权问题,请联系本站删除。
发布时间:2026-11-08 21:40:39
(第1/1页/共9340字/8阅)