Mein Blog // Digitales Archiv

Gedanken, Projekte und technische Notizen

Zeige Einträge mit Tag: #nixos Alle anzeigen ×

Ich habe jetzt mal das Backup meines NixOS Homeservers umgestellt und statt einem einfachen täglichen Script auf stündlich umgestellt. Nicht ganz so elegant wie auf der Mastodon Instanz, die mein Freund verwaltet – hier haben wir alle 20 Minuten einen ZFS Snapshot – aber mit der Lösung bin ich auch zufrieden. Und ich muss sagen NixOS gefällt mir immer besser. Ohne KI wäre es allerdings viel zu kompliziert, als dass ich es verstehen könnte, aber mittlerweile kann ich die fertigen Nix-Dateien zumindest lesen. Hatte mal überlegt den Server auf ein normales Linux umzustellen, aber solange das so gut funktioniert...

  1. /etc/nixos: Die gesamte NixOS-Konfiguration (alle .nix Dateien).

  2. /opt/minecraft: Alle Welten und Daten des Minecraft-Servers.

  3. /opt/satisfactory: Spielstände und Konfiguration des Satisfactory-Servers.

  4. /opt/Blog: Der Quellcode und die Inhalte des Blogs.

  5. /opt/ui: Die Mastodon-UI Dateien.

  6. /opt/audiobookshelf: Die Hörbücher und die zugehörige Datenbank.

Das ganze landet auf einem S3 Storage der via RClone gemoundet wurde.

Die NixOS Konfiguration

{ config, pkgs, ... }:

{
  # BorgBackup Konfiguration
  services.borgbackup.jobs.hourly = {
    # Pfad zum Repository im S3-Mount
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Kein Passwort erforderlich
    encryption.mode = "none";

    # Kompression für noch mehr Platzersparnis
    compression = "auto,zstd";

    # Die zu sichernden Pfade
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Stündliche Ausführung
    startAt = "hourly";

    # Repository automatisch initialisieren, falls es fehlt
    doInit = true;

    # Aufbewahrungsregeln (Pruning)
    prune.keep = {
      within = "1d"; # Alle Snapshots der letzten 24h
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Sicherstellen, dass der S3-Mount bereit ist, bevor Borg startet
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Ich habe mir einen eigenen Blog installiert — vor allem, um #NixOS besser kennenzulernen. Überraschenderweise ging das alles ziemlich unkompliziert.

WriteFreely passt dafür richtig gut: minimalistisch, schnell eingerichtet und ohne viel Ballast. Perfekt, um einfach loszulegen und nebenbei etwas zu lernen. Die Konfiguration ist angenehm übersichtlich. Ein paar Optionen gesetzt, Verzeichnis vorbereitet, Reverse Proxy davor — fertig.

So sieht meine aktuelle NixOS-Konfiguration dafür aus:

{ 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 für die ActivityPub-Schlüsselgenerierung: Föderation erfordert openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatisches Erstellen des Datenverzeichnisses mit den korrekten Berechtigungen
  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}
    }
  '';
}

Das war's schon im Wesentlichen. NixOS macht es wirklich einfach, solche Dienste sauber zu konfigurieren und reproduzierbar zu halten.