os/doc/integrations/deploy.md

83 lines
2.3 KiB
Markdown
Raw Normal View History

2021-02-15 18:08:17 +00:00
# deploy-rs
2022-11-20 22:28:23 +00:00
2021-02-15 18:08:17 +00:00
[Deploy-rs][d-rs] is a tool for managing NixOS remote machines. It was
2021-02-18 01:31:33 +00:00
chosen for devos after the author experienced some frustrations with the
2021-02-15 18:08:17 +00:00
stateful nature of nixops' db. It was also designed from scratch to support
flake based deployments, and so is an excellent tool for the job.
2021-04-19 02:26:27 +00:00
By default, all the [hosts](../concepts/hosts.md) are also available as deploy-rs nodes,
2021-02-15 18:08:17 +00:00
configured with the hostname set to `networking.hostName`; overridable via
the command line.
## Usage
Just add your ssh key to the host:
2022-11-20 22:28:23 +00:00
2021-02-15 18:08:17 +00:00
```nix
{ ... }:
{
users.users.${sshUser}.openssh.authorizedKeys.keyFiles = [
../secrets/path/to/key.pub
];
}
```
And the private key to your user:
2022-11-20 22:28:23 +00:00
2021-02-15 18:08:17 +00:00
```nix
{ ... }:
{
home-manager.users.${sshUser}.programs.ssh = {
enable = true;
matchBlocks = {
${host} = {
host = hostName;
identityFile = ../secrets/path/to/key;
extraOptions = { AddKeysToAgent = "yes"; };
};
};
}
}
```
And run the deployment:
2022-11-20 22:28:23 +00:00
2021-02-15 18:08:17 +00:00
```sh
deploy '.#hostName' --hostname host.example.com
2021-02-15 18:08:17 +00:00
```
> ##### _Note:_
2022-11-20 22:28:23 +00:00
>
> Your user will need **passwordless** sudo access
2022-11-20 22:28:23 +00:00
### Home Manager
Digga's `lib.mkDeployNodes` provides only `system` profile.
In order to deploy your `home-manager` configuration you should provide additional profile(s) to deploy-rs config:
2022-11-20 22:28:23 +00:00
```nix
# Initially, this line looks like this: deploy.nodes = digga.lib.mkDeployNodes self.nixosConfigurations { };
deploy.nodes = digga.lib.mkDeployNodes self.nixosConfigurations
{
<HOSTNAME> = {
profilesOrder = [ "system" "<HM_PROFILE>" "<ANOTHER_HM_PROFILE>"];
profiles.<HM_PROFILE> = {
user = "<YOUR_USERNAME>";
path = deploy.lib.x86_64-linux.activate.home-manager self.homeConfigurationsPortable.x86_64-linux.<YOUR_USERNAME>;
};
profiles.<ANOTHER_HM_PROFILE> = {
user = "<ANOTHER_USERNAME>";
path = deploy.lib.x86_64-linux.activate.home-manager self.homeConfigurationsPortable.x86_64-linux.<ANOTHER_USERNAME>;
};
};
};
```
2022-11-20 22:28:23 +00:00
Substitute `<HOSTNAME>`, `<HM_PROFILE>` and `<YOUR_USERNAME>` placeholders (omitting the `<>`).
`<ANOTHER_HM_PROFILE>` is there to illustrate deploying multiple `home-manager` configurations. Either substitute those as well,
or remove them altogether. Don't forget the `profileOrder` variable.
2021-02-15 18:08:17 +00:00
[d-rs]: https://github.com/serokell/deploy-rs