️ 为什么需要远程部署?#
当你有多个 NixOS 节点(比如主力机、服务器、树莓派)时,如果你在每个节点上都跑一遍 nixos-rebuild switch,非常麻烦且容易版本不同步。
Colmena 允许你从主力机统一推送配置到所有节点。
️ 第一阶段:配置 Colmena#
下面是传统 hive.nix 示例,使用本机选定的 Nixpkgs;正式项目应固定 Nixpkgs 修订。使用 Flake 时,应按所用 Colmena 版本导出 colmena / colmenaHive,不要把未绑定的 inputs 直接放进独立文件。
{
meta = {
nixpkgs = import <nixpkgs> {
system = "x86_64-linux";
};
};
server = { name, nodes, ... }: {
deployment.targetHost = "server.example.com";
deployment.targetUser = "root";
imports = [ ./hosts/server/configuration.nix ];
# 由节点硬件配置决定引导器和磁盘,不套用 /dev/sda
};
}第二阶段:部署命令#
- 检查配置:
colmena build - 预览差异:
colmena apply dry-activate --on server - 正式推送并激活:
colmena apply switch --on server(省略节点筛选可能部署多个节点)
远程部署的好处#
- 本地构建,远程安装:构建完成后可以复制系统闭包;x86_64 构建 ARM 系统需要正确的交叉编译、仿真或远程构建器,不能只靠把二进制复制过去。也可使用
deployment.buildOnTarget在目标节点构建。 - 并行部署:可以同时给 10 台服务器升级,版本完全一致。
- 容错性:NixOS 旧世代提供恢复路径,但 Colmena 不保证自动恢复网络或自动回滚每次失败;部署前准备 SSH 连通性检查、控制台通道与人工恢复步骤。
给 Arch 用户的建议#
如果你之前习惯了用 Ansible 管理多台 Arch 机器,可以把 Colmena 理解为在 NixOS 声明式系统配置之上组织构建、复制与激活的工具;对可变应用状态仍需单独管理。
总结#
- Hive:配置的集合。
- Apply:部署并激活。
- Build:只编译不安装。
构建、预览和激活的边界
build 通常仅构建;启用 buildOnTarget 时结果会存在目标机上。dry-activate 可能先构建、传输闭包并运行目标的预览脚本,并非纯本地只读检查。test 即时激活但不设为启动默认,boot 修改启动默认但不即时激活,switch 两者都做。示例主机域名是占位;只有确认目标、授权账户与硬件配置后才执行部署。
参考与延伸
根据技术笔记重新整理,示例使用通用名称。