Spremenil sem način varnostnega kopiranja svojega domačega strežnika NixOS in namesto preprostega dnevnega skripta prešel na urno kopiranje. Ni tako elegantno kot na instanci Mastodon, ki jo upravlja moj prijatelj – tam imamo posnetke ZFS vsakih 20 minut – vendar sem s to rešitvijo prav tako zadovoljan. In moram reči, da mi je NixOS vedno bolj všeč. Brez umetne inteligence bi bilo vse skupaj preveč zapleteno, da bi razumel, zdaj pa lahko končane datoteke Nix vsaj preberem. Razmišljal sem o tem, da bi strežnik prestavil na običajen Linux, a dokler to deluje tako dobro...

  1. /etc/nixos: Celotna konfiguracija NixOS (vse datoteke .nix).

  2. /opt/minecraft: Vsi svetovi in podatki strežnika Minecraft.

  3. /opt/satisfactory: Shranitve iger in konfiguracija strežnika Satisfactory.

  4. /opt/Blog: Izvorna koda in vsebina bloga.

  5. /opt/ui: Datoteke uporabniškega vmesnika Mastodon.

  6. /opt/audiobookshelf: Zvočne knjige in pripadajoča zbirka podatkov.

Vse skupaj se shrani v shrambo S3, ki je bila priklopljena prek RClone.

Die NixOS Konfiguration


{ config, pkgs, ... }:

{
  # Konfiguracija BorgBackup
  services.borgbackup.jobs.hourly = {
    # Pot do repozitorija v priklopu S3
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Geslo ni potrebno
    encryption.mode = "none";

    # Stiskanje za še večji prihranek prostora
    compression = "auto,zstd";

    # Poti za varnostno kopiranje
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Urno izvajanje
    startAt = "hourly";

    # Samodejna inicializacija repozitorija, če manjka
    doInit = true;

    # Pravila hrambe (čiščenje)
    prune.keep = {
      within = "1d"; # Vsi posnetki zadnjih 24 ur
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Zagotavljanje, da je priklop S3 pripravljen, preden se zažene Borg
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}