在自托管领域,近年来出现了不少带图形界面的管理平台,比如 Unraid、TrueNAS、CasaOS、ZimaOS 等等。它们确实降低了上手门槛,但依然有一批人选择最“原始”的方式:在普通 Linux 服务器上直接安装 Docker,然后用一个文件夹加一个 docker-compose.yml 管理每个服务。这个选择并不反主流,反而是一种值得认真考虑的运维思路。
为什么还要坚持 Linux + Compose
一位长期这样使用的用户总结了几个很实际的点:
- 一切配置都是显式的。每个服务有独立的文件夹和 Compose 文件,出问题时知道去哪看配置、看日志,改完直接重建容器。
- 层数更少,更容易调试。少了一层 UI 抽象,遇到网络或权限问题,从 Docker 和系统层面直接排查,反而更快。
- 有 AI 辅助后学习成本降低。当遇到不理解的 Docker 或者 Compose 概念时,能很快得到说明,边修边学,慢慢就理解整个栈的结构。
这种风格在备份上也很有优势。有用户分享,自己用一个简单的 cron 任务,遍历存放 Compose 文件的目录,先把容器停掉,用 rsync 同步到远端,再重新启动服务。整个流程简单直接,也没有依赖某个特殊平台的功能。
具体怎么组织 Compose 文件
最常见的组织方式是:每个服务一个目录,目录里有对应的 docker-compose.yml,以及该服务运行时需要的配置文件或数据目录。多个互相依赖的服务也可以放在同一个 Compose 文件里。这样既保持了隔离,又让服务之间的关系一目了然。
有用户表示,自己甚至装了 Portainer,但几乎不用,只在快速清理旧镜像或卷时偶尔打开一下。对于长期稳定运行的服务器来说,命令行加 Compose 文件已经足够顺手。
一个有意思的分歧:Caddy 是否该归 Docker 管
在反向代理这个环节,有人坚持用 Docker Compose 跑 Caddy,也有人选择让 Caddy 直接运行在宿主机上。选择裸金属运行的一方给出的理由可能包括:减少一层容器网络转发、方便直接管理证书文件、或者对 Docker 网络模式不太放心。不过这并没有标准答案,纯粹看个人对资源占用和运维习惯的偏好。
也有向更底层演进的玩法
除了 Linux + Compose,还有用户分享了另一条路线:用非特权 Podman 容器,并通过 systemd unit 文件来管理,也就是 Podman Quadlets。这种方式比 Compose 更贴近系统原生服务,希望把容器生命周期的管理完全交给 systemd。如果你本来就很熟悉 systemd,这会是另一种可控性更高的选择。
如果你也在犹豫要不要换平台
如果你喜欢打开界面点点就能创建服务,那这些平台依然值得尝试。但如果你希望在出问题时能快速定位到具体配置、不想被 UI 隐藏细节,或者希望通过折腾 Docker 加深对服务器和网络的理解,那么直接 Linux + Compose 带来的“踏实感”是很有价值的。选择哪个方案,其实取决于你更愿意把时间花在学习还是花在操作上。