βοΈ NixOS: Declaratieve Infrastructuur in het Lab
NixOS is een unieke, Linux-distributie die volledig declaratief is opgebouwd. In tegenstelling tot traditionele Linux-systemen (zoals Debian of Ubuntu) waar je handmatig configuraties aanpast en pakketten installeert, wordt een NixOS VM volledig gedefinieerd vanuit één enkel tekstbestand: configuration.nix. Dit sluit perfect aan bij de geavanceerde GitOps-filosofie van mijn homelab.
π‘οΈ Waarom NixOS Cruciaal is
| Logo / App | Feature | Functie binnen het Netwerk |
|---|---|---|
| π | Declaratief Beheer | De complete staat van de OS en alle apps staat beschreven in één config-bestand |
| π | Atomic Rollbacks | Updates mislukt? Bij het opstarten kies je simpelweg de vorige werkende generatie |
| π§ͺ | Reproduceerbaar | Kopieer de configuratie naar een nieuwe VM, en je hebt exact hetzelfde systeem binnen 1 minuut |
| π§Ό | Geen Systeemvervuiling | Pakketten worden geΓ―soleerd opgeslagen; geen rondslingerende configuratierommel |
βοΈ Inrichting & GitOps (Workflow)
NixOS draait als een lichtgewicht VM binnen Proxmox en wordt beheerd via Git-repositories.
- Configuration.nix: Dit centrale bestand definieert de netwerkinstellingen, gebruikers, SSH-sleutels en actieve services.
- Nix-Channel: Gekoppeld aan de stabiele of onstabiele NixOS-pakketbronnen voor de allernieuwste software.
- Git Integratie: De OS-configuratie wordt beheerd in een Gitea repository, vergelijkbaar met onze MkDocs website.
- Generaties: Elke systeemwijziging bouwt een nieuwe 'generatie'. Oude generaties blijven bewaard in het boot-menu.
βοΈ NixOS Basisconfiguratie
Hierbij eenonderstaande, geoptimaliseerde configuration.nix voor de uitrol van je NixOS VM binnen je Proxmox-cluster. Deze configuratie bevat de Proxmox QEMU-guest-agent, Docker-ondersteuning en configureert de hoofdgebruiker spruitmans. uiteraard is dit aan te passen natuurlijk
# /etc/nixos/configuration.nix
{ config, pkgs, ... }:
{
imports = [
./hardware-configuration.nix
];
# --- Bootloader & Systeem ---
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda"; # Pas aan naar jouw juiste disk (bijv. /dev/vda voor VirtIO)
networking.hostName = "nixos-homelab";
networking.networkmanager.enable = true;
# Tijdzone en Lokalisatie
time.timeZone = "Europe/Amsterdam";
i18n.defaultLocale = "nl_NL.UTF-8";
# --- Virtuele Omgeving (Proxmox KVM) ---
services.qemuGuest.enable = true; # Activeert de nodige Proxmox agent
# --- Gebruikersbeheer (`spruitmans`) ---
users.users.spruitmans = {
isNormalUser = true;
description = "spruitmans";
extraGroups = [ "networkmanager" "wheel" "docker" ]; # wheel geeft sudo-rechten
shell = pkgs.zsh; # Moderne ZSH shell (optioneel, anders weglaten)
# Vervang onderstaande string met je eigen publieke SSH-key voor wachtwoordloze login
openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQD..."
];
};
# --- Systeempakketten ---
environment.systemPackages = with pkgs; [
vim
wget
curl
git
htop
tmux
unzip
];
# Activeer benodigde programma's / shells
programs.zsh.enable = true;
# --- Systeemdiensten (Services) ---
# SSH Toegang (Beveiligd)
services.openssh = {
enable = true;
ports = [ 22 ];
settings = {
PasswordAuthentication = false; # Alleen SSH-keys toestaan voor maximale homelab veiligheid
PermitRootLogin = "no";
};
};
# Docker Virtualisatie Containerization
virtualisation.docker.enable = true;
# --- Nix Pakketbeheer Instellingen ---
nix.settings.experimental-features = [ "nix-command" "flakes" ]; # Bereid de overstap naar Flakes voor
nixpkgs.config.allowUnfree = true; # Staat non-FOSS software toe indien nodig
# --- Firewall ---
networking.firewall.enable = true;
networking.firewall.allowedTCPPorts = [ 22 ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Dit mag je NOOIT zomaar veranderen na installatie!
system.stateVersion = "24.11";
}
π οΈ Dagelijks Beheer & Onderhoud
- Nix-Env Garbage: Draai periodiek de garbage collector om oude, ongebruikte systeemgeneraties fysiek op te ruimen.
- Systeem Herbouwen: Voer wijzigingen uitsluitend door via
nixos-rebuild switchna het aanpassen van de config. - Channel Updates: Update de Nix-pakketbronnen om de VM te voorzien van de nieuwste beveiligingspatches.