爱意满满的作品展示区。
ihciah
0.2D
0.03D

写了个跑在 Cloudflare Worker 上的私有 Nix Cache

  •  
  •   ihciah ·
    ihciah · 10h 55m ago · 262 views

    最近写了个 nix-cache-worker,用 Cloudflare Worker + R2 + D1 搭一个私有的 Nix binary cache 。

    主要是因为我自己用 NixOS 管理所有私人机器,deploy 的时候就要现场构建其中部署的私有项目,要花挺久的。更好的办法是在这些项目中配置 CI 触发的构建。一来构建挂了能马上知道,二来构建完成 push 到私有 cache 基本就不用现场编译了。

    找了一圈现成的方案,大概有两类:

    一类是 Cachix 这类服务,用起来省事,但价格并不便宜,最便宜套餐 50 USD/月。

    另一类就是 Attic 、niks3 这些开源方案。功能都挺全,但还是得找地方把服务跑起来,数据库、存储这些也得自己管。

    这时就有一个比较尴尬的问题:我的基础设施本身就是用 NixOS 管的。我在 NixOS 机器上部署构建 NixOS 需要的依赖,就出现循环依赖了。

    所以我更想要一个完全独立在 NixOS 基础设施之外的东西,不需要我再自己运维一台机器。

    正好 Cloudflare Worker 、R2 、D1 都有免费额度,我自己的用量基本碰不到收费线,于是就有了这个项目。

    目前支持:

    • 标准的 nix copy --to / nix copy --from
    • cache 可以公开读,写入走 Token
    • R2 存实际的 cache ,D1 存索引和版本信息
    • 可以按 package / version 管理,也可以打 tag
    • retention / pin / GC ,支持较复杂的 retention 策略
    • 一个简单的 Web 管理页面

    我自己现在的流程基本就是:

    git master push/merge → CI build → nix copy 到 cache → deploy 直接拉

    这样私有项目能不能构建,在 CI 的时候就知道了。deploy 的时候也不用再等它们一个个编译。

    整个 cache 跑在 Cloudflare 上,不依赖我的任何一台 NixOS 机器。哪怕机器全挂了,重新装系统的时候 cache 也还在。

    部署也比较简单,建个 R2 和 D1 ,把 Worker 部署上去就行。

    项目是纯 vibe 的,我用了三周了,目前工作良好(对于纯 vibe 这个问题也不用担心,因为 nix 有签名校验,即便 write token 被绕过仍旧无法注入恶意包)。

    项目地址: https://github.com/cross-io/nix-cache-worker 欢迎部署体验!

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   934 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:03 · PVG 05:03 · LAX 14:03 · JFK 17:03
    ♥ Do have faith in what you're doing.