Ik heb onlangs de back-up van mijn NixOS-homeserver aangepast en ben overgestapt van een eenvoudig dagelijks script naar een back-up per uur. Niet zo elegant als op de Mastodon-instantie die mijn vriend beheert – daar maken we elke 20 minuten een ZFS-snapshot – maar ik ben ook tevreden met deze oplossing. En ik moet zeggen dat NixOS me steeds beter bevalt. Zonder AI zou het echter veel te ingewikkeld zijn om te begrijpen, maar inmiddels kan ik de voltooide Nix-bestanden tenminste lezen. Ik heb erover nagedacht om de server naar een normale Linux-distributie om te zetten, maar zolang dit zo goed werkt...
-
/etc/nixos: De volledige NixOS-configuratie (alle .nix-bestanden). -
/opt/minecraft: Alle werelden en data van de Minecraft-server. -
/opt/satisfactory: Savegames en configuratie van de Satisfactory-server. -
/opt/Blog: De broncode en de inhoud van de blog. -
/opt/ui: De Mastodon-UI-bestanden. -
/opt/audiobookshelf: De luisterboeken en de bijbehorende database.
Dit alles komt terecht op een S3-storage die via RClone is gemount.
De NixOS-configuratie
{ config, pkgs, ... }:
{
# BorgBackup-configuratie
services.borgbackup.jobs.hourly = {
# Pad naar de repository in de S3-mount
repo = "/opt/S3/Backup/NixOSHomeServer_Borg";
# Geen wachtwoord vereist
encryption.mode = "none";
# Compressie voor nog meer ruimtebesparing
compression = "auto,zstd";
# De te back-uppen paden
paths = [
"/etc/nixos"
"/opt/minecraft"
"/opt/satisfactory"
"/opt/Blog"
"/opt/ui"
"/opt/audiobookshelf"
];
# Elk uur uitvoeren
startAt = "hourly";
# Repository automatisch initialiseren als deze ontbreekt
doInit = true;
# Bewaarregels (Pruning)
prune.keep = {
within = "1d"; # Alle snapshots van de afgelopen 24 uur
daily = 7;
weekly = 4;
monthly = 12;
};
};
# Zorg ervoor dat de S3-mount gereed is voordat Borg start
systemd.services.borgbackup-job-hourly = {
requires = [ "rclone-s3-mount.service" ];
after = [ "rclone-s3-mount.service" ];
};
}