Pakeičiau savo NixOS namų serverio atsarginio kopijavimo strategiją: vietoj paprasto kasdienio skripto dabar kopijos daromos kas valandą. Tai nėra taip elegantiška, kaip mano draugo valdomoje „Mastodon“ instancijoje – ten kas 20 minučių daromos ZFS momentinės kopijos (snapshots) – tačiau šiuo sprendimu aš taip pat esu patenkintas. Ir turiu pasakyti, kad NixOS man patinka vis labiau. Be dirbtinio intelekto tai būtų per daug sudėtinga, kad suprasčiau, tačiau dabar bent jau galiu perskaityti paruoštus „Nix“ failus. Svarsčiau galimybę serveryje įdiegti įprastą „Linux“ distribuciją, bet kol viskas taip gerai veikia...

  1. /etc/nixos: Visa NixOS konfigūracija (visi .nix failai).

  2. /opt/minecraft: Visi „Minecraft“ serverio pasauliai ir duomenys.

  3. /opt/satisfactory: „Satisfactory“ serverio išsaugojimai ir konfigūracija.

  4. /opt/Blog: Tinklaraščio pirminis kodas ir turinys.

  5. /opt/ui: „Mastodon“ vartotojo sąsajos (UI) failai.

  6. /opt/audiobookshelf: Audio knygos ir susijusi duomenų bazė.

Visa tai keliauja į S3 saugyklą, prijungtą per „RClone“.

NixOS konfigūracija


{ config, pkgs, ... }:

{
  # BorgBackup konfigūracija
  services.borgbackup.jobs.hourly = {
    # Kelias iki saugyklos (repository) S3 prijungimo taške
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Slaptažodis nereikalingas
    encryption.mode = "none";

    # Suspaudimas dar didesniam vietos taupymui
    compression = "auto,zstd";

    # Keliai, kurių atsarginės kopijos bus daromos
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Vykdymas kas valandą
    startAt = "hourly";

    # Automatiškai inicijuoti saugyklą, jei jos nėra
    doInit = true;

    # Saugojimo taisyklės (pruning)
    prune.keep = {
      within = "1d"; # Visos momentinės kopijos per paskutines 24 val.
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Užtikrinti, kad S3 saugykla būtų prijungta prieš paleidžiant „Borg“
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}