工作中 Nix 的最佳实践

上周,Determinate Systems 举办了首场网络研讨会工作中使用 Nix 的最佳实践,由本人主持。该研讨会很有趣,有很多很棒的问题,我们很期待继续举办更多。事实上,下周(3 月 27 日周四 GMT - 3 下午 1 点)还将举办另一场,主题为使用 FlakeHub 缓存启动并运行,将涵盖 Nix 中二进制缓存的一些概念基础、FlakeHub 缓存与其他产品的区别以及如何充分利用 FlakeHub 缓存的独特功能集。

文中分享了在首次网络研讨会中涵盖的一些最佳实践,分为三个部分:

  • 使用 flakes 的最佳实践

    • 使用 SemVer:Flakes 本身没有语义版本控制概念,但 Determinate Systems 在 FlakeHub 中添加了 SemVer,推荐使用,可使 Nix 更新更平滑,能更精细地更新且逐步处理中断问题,即使一个 flake 输出多个不同版本的东西也适用。
    • 将事物拆分成所需的多个 flakes:过去 Nix 社区倾向于少依赖模式,但 flakes 可将 Nix 事物拆分成小单元,FlakeHub 使其便捷,推荐每个版本化事物发布一个 flake,不确定时可多创建一个 flake,后期可合并。
    • 经常更新输入:保持输入新鲜可使更新更顺畅,有两个工具可帮助,Flake Checker Action 可更新 Nixpkgs 输入,update-flake-lock Action 可按指定 cron 计划自动更新输入并创建拉取请求。
    • 尽量避免使用 flake 辅助库:鼓励拆分事物为 flakes,但一般不推荐使用flake-utilsflake-parts等辅助库,它们并非必要,可通过几行 Nix 代码实现类似功能,使用时要考虑成本。
  • Nix 的安全最佳实践

    • 将机密信息排除在 Nix 存储之外:Nix 存储不是用于常规文件操作的文件系统,应避免将机密信息写入 Nix 存储,尤其是缓存中,社区常用agenixsops-nix管理机密,大型组织推荐使用Vault等替代方案。
    • 遵循最少访问原则:在大型组织中,建议将 Nix 事物设为私有,仅在必要时授予访问权限,对于 flakes 保持私有,对于缓存避免使用公共缓存,使用如 FlakeHub Cache 等私有缓存。
  • 组织采用的最佳实践

    • 传播知识:尽管已努力使 Nix 更易理解和使用,但仍需在组织内传播关于 Nix 的知识,创建Zero to Nix作为初学者的文档源,还有nix.dev等官方资源。
    • 采用渐进式方法:将 Nix 引入组织可能会造成干扰,但可通过多种方式逐步扩展使用,从一个团队开始,逐步扩展到其他团队和场景,理想情况是整个组织都使用 Nix,但可逐步实现。

最后期待本周在 FlakeHub Cache 上的下一场网络研讨会,可报名

阅读 7
0 条评论