mirror of
https://github.com/ryan4yin/nixos-and-flakes-book.git
synced 2024-12-11 09:21:39 +01:00
2.5 KiB
2.5 KiB
远程部署
社区的一些工具,比如 NixOps, deploy-rs, 跟 colmena,都可以用来部署 NixOS 配置到远程主机,但是都太复杂了,所以先全部跳过。
实际上我们前面使用了多次的 NixOS 本机部署命令 nixos-rebuild
,这个工具也支持通过 ssh 协议进行远程部署,非常方便。
美中不足的是,nixos-rebuild
不支持使用密码认证进行部署,所以要想使用它进行远程部署,我们需要:
- 为远程主机配置 ssh 公钥认证。
- 为了避免 sudo 密码认证失败,需要使用
root
用户进行部署,或者给用户授予 sudo 权限不需要密码认证。
在搞定上面两点后,我们就可以使用 nixos-rebuild
进行远程部署了:
# 1. 首先将本地的 ssh 私钥加载到 ssh-agent 中,以便后续使用
ssh-add ~/.ssh/ai-idols
# 2. 将 NixOS 配置部署到远程主机,使用第一步添加的 ssh key 进行认证,用户名默认为 `$USER`
nixos-rebuild --flake .#aquamarine --target-host 192.168.4.1 --build-host 192.168.4.1 switch --use-remote-sudo --verbose
上面的命令会将 NixOS 配置部署到 aquamarine
这台主机上,参数解释如下:
--target-host
: 设置远程主机的 ip 地址--build-host
指定了构建 NixOS 配置的主机,这里设置为跟--target-host
相同,表示在远程主机上构建配置。--use-remote-sudo
表示部署需要用到远程主机的 sudo 权限,如果不设置这个参数,部署会失败。
如果你希望在本地构建配置,然后再部署到远程主机,可以命令中的 --build-host aquamarinr
替换为 --build-host localhost
。
另外如果你不想直接使用 ip 地址,可以在 ~/.ssh/config
或者 /etc/ssh/ssh_config
中定义一些主机别名,比如:
当然如下这份配置也完全可以通过 Nix 来管理,这个就留给读者自己去实现了。
› cat ~/.ssh/config
# ......
Host ai
HostName 192.168.5.100
Port 22
Host aquamarine
HostName 192.168.5.101
Port 22
Host ruby
HostName 192.168.5.102
Port 22
Host kana
HostName 192.168.5.103
Port 22
这样我们就可以使用主机别名进行部署了:
nixos-rebuild --flake .#aquamarine --target-host aquamarine --build-host aquamarine switch --use-remote-sudo --verbose