Cloud in a Bottle:让自托管对所有人都触手可及

查看原文 HN 讨论

文章摘要

这是 Zack Polizzi 于 2026 年 9 月 5 日发布的项目启动文章,帖子在 HN 拿到 652 分、313 条评论。项目 Cloud in a Bottle 由作者所在的公司 Imbue 开源发布,采用 AGPL-3.0 许可。

作者的问题诊断:云把开源经济学弄坏了

文章开篇是一段对当下数字世界的不满:我们用的软件与我们自身的利益严重错位——刻意让人上瘾、塞满广告、追踪并出售你的数据、不断变质(enshittification)。作者的解释是:软件搬进云端这件事,是根因之一。

云端交付的软件体验确实好(对比 Google Docs 和 Microsoft Word):不用安装、所有设备都能访问、即时分享协作。但在云上提供服务是要花钱的,于是现代网络上几乎所有东西背后都站着一家公司——开源作者本来就不愿意自掏腰包把免费软件服务给全世界——而这些公司的财务动机与用户的动机根本上是错位的。

作者把这个对比讲得很干脆:前云时代开源是行得通的——作者分发软件,每个人为自己「托管」(也就是在自己的 PC 上跑)。而现在的云软件是中心化的,一份实例服务全世界,成本由创造者承担。原因很简单:个人没有一条可行的路径把软件放到云上供自己使用。

为什么现有的自托管方案都不够

文章逐一点评了既有选项,也正是这段点评在 HN 引发了最大争议:

Cloud in a Bottle 是什么

核心其实很朴素:一台 Ubuntu 机器,上面跑一个 Web 服务器,托管一个仪表盘并把 HTTP(s) 请求路由到各个容器化应用。应用是 rootless、加固过的容器,因此可以在改动极小的前提下跑现有软件,同时获得一个相当安全的沙箱。

但作者强调,它的差异不在「托管容器」这一层,而在容器之上的可选平台能力。他给出的类比是「你的云端智能手机」——一个你拥有的东西,在上面发现和安装好应用是件轻而易举的事,用户体验要好到能和它想取代的那些闭源产品相提并论。最基础的例子:只要你登录了你的实例,你就自动登录了所有应用,不需要在每个应用里单独开账号。此外还有一套接口,允许不同应用之间按权限访问彼此的数据和能力。作者说他们花了大量时间思考「Android 或 iOS 为应用提供的那些 API(传感器访问、通知、健康数据共享等),在个人云的语境下对应物应该长什么样」。

项目开源、可自托管、零遥测,并力求「尽可能简单、没有魔法」。Imbue 同时提供托管版本,作者认为这对普及至关重要,同时也给了项目一个直白的商业模式来支撑;但开源/自托管路径跑的是完全相同的代码,并且永远是一等公民。

现状与坦诚的困境

项目在私下构建测试了 6 个多月后才发布,作者说自己一直在慢慢把数字生活搬进自己的 Bottle 实例,感觉很好。但他也直说了一个先有鸡还是先有蛋的问题:没有一个广泛可及的自托管开源 Web 软件的方式,这类软件的受众就很小,可选软件也就很少。他们的一大目标正是催化更多优秀开源 Web 软件的诞生——那种你能推荐给朋友和父母、而不只是推荐给其他软件极客的东西。精选的应用目录是朝这个方向的第一步,他们刻意维持高标准、只收录真正提供良好用户体验的东西,所以目录现在还很小,但每周都在加。作者承认,现阶段早期用户仍然需要一点技术背景(或者一个编码 agent)来找到/创建/适配想在实例上跑的东西。

获取方式包括:免费试用托管实例(送 10 美元额度)、在云 VPS 上自托管、在自己的硬件上(虚拟机或裸机)安装。

HN 评论精华

这是本组讨论最激烈、信息密度最高的一条。批评集中在四个方向:对既有项目的点评是否公允、存储与备份的缺失、安全模型的措辞、以及项目本身的推广手法。同时也有相当多真诚的鼓励和替代方案推荐。

一、Sandstorm 的原作者本人出现了

文章把 sandstorm.io 形容为「long abandoned(早已被弃)」,引发了一场关于「批评开源项目该怎么措辞」的争论。

ferfumarma 先发难:「你还把另一个已开源、并且仍在积极开发的项目(sandstorm)描述成『早已被弃』。开源很难,需要相当多的鼓劲才能吸引用户、让他们成为社区的一部分。因此很难对你的项目产生好感。」有人贴出 Sandstorm 的代码提交频率图佐证「开发确实几乎停滞了两年」,ocdtrekkie(Sandstorm 社区成员)则回应「我们目前的工作在 dev 分支,很快会准备一个新版本」。

然后 kentonv——Sandstorm 的原作者 Kenton Varda 本人——亲自下场,用最简洁的方式结束了这场争论:

「早已被弃」对 Sandstorm 是一个公允的描述。

有一群忠诚的爱好者社区在努力维持它的生命,但现实地说进展不多。(不过 AI 最近确实帮他们推进了一些。)

但 Sandstorm 的原作者(也就是我)确实很久以前就抛弃了它(抱歉)。

ferfumarma 仍然坚持措辞问题:「你不需要为打造了一个超越时代的出色工具而道歉。但『abandoned』在这个语境下听起来像是它死了。……我不赞成基于误导性框架去贬低开源项目。」

crabmusket 则给出了本帖关于技术路线最有洞察力的一条评论:

Sandstorm 有一个激进得多的托管模型:它不是帮你托管应用,而是每一份文档都是它自己的实例。这非常有意思,但正如文章指出的,它需要与应用做深度集成。

我很好奇你这个更务实的路子会走出什么结果。能先把应用基本不加修改地「现成拿来」用,然后通过标准的代理特性逐步添加集成,这看起来是明智的。

无论如何,先做应用之间的单点登录,是一个非常合理且值得的起点。

二、存储与备份:作者最常被追问的点

jerf 的提问最系统,也拿到了作者的正面回应:

看你的托管页面,我没看到任何关于备份的说明。……你绝对应该提供某种一键式、定价合理的备份方案。配置难度是自托管在前期的杀手,更新是长期的杀手,但当一切都挂了、而我没有备份的时候,才是我彻底放弃的时刻。

我在任何地方都找不到磁盘容量限制的说明。我能在上面托管 Immich 吗?能托管我的媒体服务器吗?要花多少钱?肯定不会是 10 美元一个月就能存下我的媒体库。我不是囤积癖,大部分是从我自己拥有的实体媒体上抓取的,这已经限制了体积,但你还是不可能用 10 美元一个月托管这些。

作者 zplizzi 回复:

(作者本人)感谢指出,我应该把这点说得更清楚。我们的托管实例磁盘挺小(约 50GB),但有一种方式可以把一个 S3 存储桶链接到你的实例用作大容量数据存储。存储大量数据的应用(比如 immich/jellyfin)应该会自动把数据放进「归档数据层」,可以配置成写入这个 S3 桶而不是本地存储。我们打算把这个(以及备份)做成托管实例自动配置的一部分——单独计费(所以你只为多用的存储付费;Cloudflare R2(S3 兼容)的成本价大约是 15 美元/TB/月,所以应该在这个量级)。

globular-toast 把这个问题提到了更高的层面:「它怎么处理存储?存储永远是自托管最薄弱的一环。一堆无状态容器最终只是一个花哨的 docker compose 文件。仍然有价值,但你需要一个正经的存储故事。理想情况下所有存储都在每个应用独立的卷上,并且全部有备份。」

djohnmustard 从自己的 podman quadlet 实践出发,总结了自托管的三大难点,并直接问作者怎么解决:「第一是备份,或者更准确地说是恢复数据。我的理解是,直接打快照未必能给你一个可用的恢复点,因为应用可能正处在数据库迁移之类的中间状态。第二是更新,第三是从网络外部访问。」samhclark 则从架构角度提了个具体疑问:「我有点意外只有一个备份应用,而不是每个应用自带一个备份 sidecar。比如要备份 Immich,需要在它的四个不同程序之间协调。」

三、「这真的对所有人都触手可及吗?」

标题里的「accessible to everyone」被反复拿来对照现实。

charcircuit 最直接:「无意冒犯,但这对所有人并不触手可及。认真看一眼你的安装说明,然后板着脸告诉我一个四岁小孩能搭好这个。没有任何理由做不到双击一个 .exe 然后整套东西就装好了。」

Panzerschrek 指出了更根本的障碍,而且这是软件层面解决不了的:「即使服务器机器本身容易搭建,真正让自托管可及也不容易。你需要让你的服务器能被所有人访问,而这通常做不到——网络的工作方式决定了你需要一个白名单 IP,还要确保运营商不拒绝入站连接。另外你需要一个域名,获取它需要一些官僚手续、要花钱、定价也不总是透明。这些门槛高到普通人无法创建/托管自己的站点,只有熟练的爱好者或专业人士才负担得起拥有自己的站点。」

yoz-y 补了另一个维度:「要真正对普通公众可及,它需要一个手机 App(大多数人没有电脑),并且能从手机上完成部署(包括设置域名)。而支付会是个问题,因为各家应用商店的规则。」

silver92bullet 把矛头指向硬件:「现在关键问题是硬件能不能对所有人可及。让自托管软件更容易当然是进步,但对一个有兴趣的普通消费者来说,光是配一台树莓派仍然是门槛。他们大概能靠 YouTube 和一些 Reddit 帖子摸索出来,但应该有更简单的流程。」

zplizzi 对此给了一个明确的路线图:

(作者本人)我非常想做那种预配置好的树莓派,人们在家里插上电就能开箱即用。要做到无缝还需要更多工作,但我们确实在朝那个方向努力。可惜最近因为内存短缺,树莓派变得这么贵。

eastbound 提了一条关于设计语言的意见,指向的是同一个「可及性」问题:「开源/开放互联网项目的设计总是很笨拙,这很遗憾。这里顶部的主截图用的是等宽系统字体。你干脆放个终端截图算了。要吸引更广泛的受众,你既需要触发潜在的开源贡献者(提到 Debian、也许 Ubuntu),也需要一套能触动大众的设计——非常『交钥匙』、非常包装化、非常『点赞关注订阅』、在你的 NAS 上一键安装等等。隐私是一个特性,但服务才是真正的卖点。」

四、安全模型与「vibe coded」指控

websap 抓住了文章里的一句措辞:

「应用是(rootless、加固过的)容器,所以它能在改动极小的前提下跑现有软件——并且在一个相当安全的沙箱里。」

什么鬼?我卖给你一辆没有刹车的车,但它减速起来相当快?

jasongi 用自己十几年的自托管经历给出了一份更冷静的风险评估。他讲了从 Netgear ReadyNAS(插件总是过时)到 FreeNAS(FreeBSD jail 里的插件同样过时且易坏、升级 OS 会搞垮所有插件)的一路踩坑,最后总结出两条铁律:把网络存储和应用托管分开(虽然 NFS 配置会麻烦一点,但这是一个强制走向更有韧性架构的约束);用维护者官方提供的 docker 容器或 LinuxServer.io 的(厂商维护的包装层一开始有帮助,但当它们被放弃或阉割时就变成了技术债,尤其当它们是 freemium、公司开始想榨钱的时候)。他随后点出了关键:

自托管里没人明说的那部分是,它把安全责任转移给了用户。我相信 cloudinabottle 的默认值比自己拿 docker 容器更合理,或者内置了反向代理之类的,但我很怀疑他们会为数据丢失或泄露承担责任。

Jnr 提出了对容器方案本身的质疑,并给出了一套完全不同的建议:「在 LLM agent 的时代,除了本地开发机之外的任何地方还选 Docker/Podman,感觉是个奇怪的选择。Docker 在容器之间的网络级安全工具很差,不同容器的运行时也有问题。如果你想在同一台服务器上把多个服务暴露到互联网,它就有点原始了——其中一个应用会被攻破,然后其他的会跟着倒。」他的替代方案是让前沿 LLM agent 配置 k3s(强制 userns 映射,确保没有东西以宿主 root 运行)、默认拒绝的防火墙、VLAN 隔离、backrest 备份、alertmanager + Grafana 监控、Keel 自动更新、公开与内部入口分离并用 Tailscale split DNS 访问内部入口、Crowdsec 作为 WAF——「全部用 Ansible 搭,这样可维护。手工做这些极其耗时,但 agent 几小时就能搭好并测完。」

而 rckt(「没想到 HN 上的人会认真讨论一个明显是 vibe code 出来的东西」)、0c3ca83(「看到有人一边推广自托管,一边全用 Claude 构建,感觉很怪」)和 malomalsky(「贡献者里有 claude;Python。不了,谢谢」)代表了另一种反应。ravenstine 对第二条的回应很简短但有力:「自托管非得是全有或全无吗?」

五、一个小丑闻:GitHub issue 推广

KomoD 贴出了一条实锤:「这些人一直在各个仓库里刷 issue 推广这个项目,完全没有披露他们与项目有关联。」并附上了 GitHub 搜索链接。

zplizzi 的回应是道歉但也做了限定:

(作者本人)我在跟团队确认这些是不是我们发的,如果是的话我为此道歉——这类帖子应该来自一个真实账号并做适当披露,而且对我们这样一个还没有可观用户基础的项目来说,提这种请求本身也为时过早。

KomoD 随即把马甲的身份关联挖了出来(发 issue 的账号叫 adl-collab,它 fork 仓库时建的分支叫 “andrew”,而项目近三个月最大的贡献者是 andrewlaack)。zplizzi 回复:「是的,我会确保这不再继续。需要说明的是,总共发了 11 个 issue;这是一个失误,不是什么大规模刷屏行动。」但 TiredOfLife 并不买账:「『这类帖子应该来自一个真实账号并做适当披露』这句话让我觉得你在跑一个刷屏活动,只是 andrew 不是其中一员。」

顺带一提,sureglymop 从这些 issue 里发现了一个架构疑问:「看那些 issue,我理解得对吗——你们有某种方式可以直接从包含 cloudinabottle.toml 文件的仓库安装?如果是的话,不管 issue 是谁发的,那看起来都是很糟糕的架构/设计……」另外 rgun 注意到文档里写的是 cloudinabottle.toml,但应用仓库里都是 openhost.toml,问是不是改过平台名字。

六、「这跟 X 有什么区别?」——被点名最多的替代品

评论区几乎变成了个人云项目的大集合。被反复提到的有:Cloudron(educar 说它「大概是这个领域最大的玩家」,作者没有把它列进对比让很多人意外)、Umbrel、CapRover、Cosmos Cloud、FreedomBox(aperrien 指出它甚至已经进了 Debian)、SelfPrivacy、OpenCloud、PikaPods、Proxmox + community-scripts.org、Magic Cloud(jens_tlb 说这个标语从 2019 年就是他们的)。

Eji1700(Cosmos Cloud 用户)说出了这个群体的普遍心声:「我很高兴看到这个领域有更多东西,因为我正处在『我是继续用 cosmos 还是开始自己全部手搓』的节点上,而一旦你考虑暴露到互联网,这一跃真的很吓人。我理解,但同时感觉你永远只差一个配置失误就可能酿成噩梦——而且那还是在解决了『得了,这成了我的第二份工作』这个问题之后。」

tamimio 对文章批评 coolify 的那一点表示不同意:「那不是问题啊,我就想要每个应用有独立的登录,这样我可以把它们指向不同的子域名或域名,而不是全塞在一个登录和一个位置里。」cynicalsecurity 对 nextcloud 的评价只回了三个字:「一派胡言。」

七、AI 时代,还需要这样的抽象层吗?

这是评论区一条很有意思的分歧。

skybrian:「这个宣传有点意思,但和 Sandstorm 一样,浏览它那个预构建应用库让我没什么感觉。太像在逛一个相当小的手机应用商店了,可能只有三个应用我会有兴趣。既然我们现在有了 AI,我觉得 exe.dev 的路子更好:他们提供 Linux 虚拟机、一个 web 代理和一堆集成,你可以让 AI 构建任何你想要的 web 应用。我很想要 exe.dev,但跑在我自己的 Mac Mini 上。」(dbmikus 随即表示自己正在做这件事。)

yoz-y:「LLM 有一个我觉得真有用的地方就是 devops。我用 agent 搭建和部署自己的云、Jellyfin 之类的体验相当不错。我还试过租个 VPS,直接把 ssh 密钥给 LLM 让它自己搞,效果相当好。如果 AI 能撑下去,我觉得未来大概在那个方向。安全方面就不太确定了……」tobi_bsf 说得更绝:「可及的自托管已经到了,它叫『claude』或者『codex』——你启动它然后告诉它你需要什么,你甚至不需要知道任何软件的名字。」

八、最根本的质疑:人们真的想要自托管吗?

bob1029 给出了本帖最扫兴也最难反驳的一段:

在自托管这件事上,人们的声称偏好和显示偏好之间似乎存在很大的差异。

经常给人的感觉是,在同侪面前呈现出「我是自主的」这个形象,比真的实现自主更重要。

一旦把时间流逝和熵这些因素算进去,要复制 AWS 之流做到的事需要大量精力。我从来没能让一台媒体/NAS 设备活过三四年——不可避免地会发生某种灾难性事件,然后我得换一批供应商从头再来。即使没有数据丢失,这件事也会让人厌倦。我保证你做久了也会厌倦。看起来好像永远不会发生,然后有一天它就发生了。

如果你真能负担得起用云,你能做成的事多得多。我很难相信有多少人在总拥有成本上真的靠自托管赢了。

cube00 对开篇那句「离开订阅制、不再把个人数据借给广告/AI 公司的意愿前所未有地强烈」的回应同样冷静:「这只在 HN 上成立,普罗大众不在乎,他们连自己浏览器叫什么名字都不知道。」myaccountonhn 试图反驳:「『普罗大众』很奇怪,因为每个人都是、又没有人是普罗大众。就我参与的很多非技术圈子而言,我已经开始看到转变了——尤其是当你花时间解释清楚问题之后。很多人是在乎的,他们只是没有被告知这些问题。」noman-land 的看法更现实:「普罗大众会做他们朋友做的事。如果有一个 iPhone 充电器大小的盒子,插哪儿都能有自己的个人云、还能和别人的个人云互联,再有个名人说这玩意很酷,那大众连想都不会想就用上了。」

九、也有真心的掌声

pietz 的评论被顶得很高:「以防有人问:这就是一篇启动文章应该有的样子。10/10。」

drunner:「我觉得这个领域的时机到了。离开订阅制、不再把个人数据借给广告/AI 公司的意愿前所未有地强烈。目前这个领域大量是基于 docker compose 的,对很多本来可能感兴趣的人来说完全不可及。不管是这个项目还是别的,我希望很快能有什么东西攒够势头,真正打破入门门槛。」

redrix 代表了目标用户:「如果这能在很大程度上自动化备份和更新那一块,那对我这样的人来说就是一个很好的中间地带:我在尽量自托管我所有的东西,但没有以前那么多时间折腾了。于是更新、备份之类的事就为了『设好就不管』而被搁置了。」

Kushvinth 精准点出了差异化到底在哪:「统一认证 + 应用间权限才是相对 Coolify/CapRover 这类容器托管的真正差异点。数据分层(本地数据库 vs S3/R2 归档)看起来也是让 Immich/Jellyfin 在不需要巨大托管磁盘的情况下变得可行的务实做法。」

而 jiaosdjf 的一段话,大概最能解释为什么这条帖子能拿到 652 分:

云这个领域很荒谬,我们眼睁睁看着 AWS 之流在二十年里定义了部署、认证乃至容器化的每一个方面。

容器化本该意味着「到哪都能跑」——随时把一整套复杂的服务及其连接重新部署到任何云供应商上。这才是一个该死的航运集装箱的意义:你开到世界上任何一个港口,同一个集装箱能被任何吊车吊到任何船或卡车上。

亚马逊、谷歌、微软——这些人把厂商锁定卖给了本该拼死抵抗它的那部分技术人群。20 年前你 ftp 上传几个 PHP 文件,它就跑起来了;现在你得搞明白 20 个 IAM 配置,把文件撒进各种存储桶里,因为一切都必须开箱即用地可扩展 100 万倍。

是的,我们 100% 需要修好托管这件事,一切都应该是可移植的、简单的、通用的。