79 lines
2.1 KiB
Markdown
79 lines
2.1 KiB
Markdown
|
---
|
||
|
layout: post
|
||
|
title: "Easy NixOS remote deployments"
|
||
|
date: 2023-11-14
|
||
|
comments: true
|
||
|
tags: nixos, nix, flakes
|
||
|
---
|
||
|
|
||
|
There exists a [mutitude](https://github.com/NixOS/nixops)
|
||
|
[of](https://github.com/DBCDK/morph) [tooling](https://github.com/krebs/krops)
|
||
|
to remotely manage nixos machines, each with its own features and compromises.
|
||
|
|
||
|
In my experience, for a simple deployment of few hosts
|
||
|
`nixos-rebuild --target-host` is pretty powerful.
|
||
|
|
||
|
This is the workflow I've been using to manage my personal systems:
|
||
|
|
||
|
I bootstrap the machines manually by following the [nixos install
|
||
|
guide](https://nixos.org/manual/nixos/stable/#sec-installation), and copy over
|
||
|
the generated configuration to `config/<hostname>/configuration.nix`.
|
||
|
|
||
|
On the root directory create `flake.nix`:
|
||
|
|
||
|
```nix
|
||
|
{
|
||
|
description = "systems needed";
|
||
|
inputs = {
|
||
|
# extra inputs go here
|
||
|
};
|
||
|
|
||
|
outputs = { self, nixpkgs }@attrs: {
|
||
|
# this is where we add new machines
|
||
|
nixosConfigurations = {
|
||
|
# host fancyHostname
|
||
|
fancyHostname = nixpkgs.lib.nixosSystem {
|
||
|
system = "x86_64-linux";
|
||
|
specialArgs = attrs;
|
||
|
modules = [
|
||
|
# This points to the actual machine configuration
|
||
|
(import ./config/nixmachine/configuration.nix)
|
||
|
];
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
}
|
||
|
```
|
||
|
|
||
|
From there, hosts can deployed over SSH!
|
||
|
|
||
|
```
|
||
|
nixos-rebuild switch --target-host root@fancyHostname --flake '.#fancyHostname'
|
||
|
```
|
||
|
|
||
|
|
||
|
More hosts can be added by adding them to the `nixosConfigurations` attribute set.
|
||
|
|
||
|
```
|
||
|
nixosConfigurations = {
|
||
|
fancySecondHost = { ... }
|
||
|
...
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Should I do this?
|
||
|
|
||
|
I think this is an easier workflow for me to manage and debug, However a lot of
|
||
|
things in this space has non-linear learning curves and has sparse documentation
|
||
|
at best.
|
||
|
|
||
|
So maybe a tool with better documentation might work well for you?
|
||
|
|
||
|
This also relies heavily on `flakes`, which is "experimental". In my experience,
|
||
|
ground reality is everyone uses flakes, but good documentation is hard to come by
|
||
|
|
||
|
I've herd good things about Nix [Flakes Book](https://nixos-and-flakes.thiscute.world/), but
|
||
|
haven't read it
|
||
|
|
||
|
*This was first published at <https://pencil.lalalala.in/dbalan/easy-nixos-remote-deployments>*
|