Mijn Blog // Digitaal archief

Gedachten, projecten en technische notities

Toon berichten met tag: #nixos Alles weergeven ×

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...

  1. /etc/nixos: De volledige NixOS-configuratie (alle .nix-bestanden).

  2. /opt/minecraft: Alle werelden en data van de Minecraft-server.

  3. /opt/satisfactory: Savegames en configuratie van de Satisfactory-server.

  4. /opt/Blog: De broncode en de inhoud van de blog.

  5. /opt/ui: De Mastodon-UI-bestanden.

  6. /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" ];
  };
}

Ik heb een eigen blog geïnstalleerd — vooral om #NixOS beter te leren kennen. Verrassend genoeg ging dat allemaal vrij ongecompliceerd.

WriteFreely past daar erg goed bij: minimalistisch, snel opgezet en zonder veel ballast. Perfect om gewoon aan de slag te gaan en gaandeweg wat bij te leren. De configuratie is prettig overzichtelijk. Een paar opties instellen, map voorbereiden, reverse proxy ervoor — klaar.

Zo ziet mijn huidige NixOS-configuratie hiervoor eruit:

{ config, pkgs, ... }:

{
  services.writefreely = {
    enable = true;
    host = "blog.burningboard.org"; 
    settings = {
      server = {
        port = 8080;
        min_log_level = "debug";
      };
      app = {
        host = "https://blog.burningboard.org";
        single_user = true;
        landing = "/read";
        wf_modesty = true;
        federation = true;
        public_stats = true;
        theme = "write";
      };
    };
    stateDir = "/opt/writefreely";
  };

  # Fix voor de ActivityPub-sleutelgeneratie: federatie vereist openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatisch aanmaken van de datamap met de juiste rechten
  systemd.tmpfiles.rules = [
    "d /opt/writefreely 0700 writefreely writefreely -"
  ];

  services.caddy.virtualHosts."blog.burningboard.org".extraConfig = ''
    reverse_proxy 127.0.0.1:8080 {
      header_up Host {host}
      header_up X-Real-IP {remote_host}
      header_up X-Forwarded-For {remote_host}
      header_up X-Forwarded-Proto {scheme}
    }
  '';
}

Dat was het in essentie. NixOS maakt het echt eenvoudig om dit soort diensten netjes te configureren en reproduceerbaar te houden.