Upravo sam promijenio način izrade sigurnosnih kopija svog NixOS kućnog poslužitelja i prešao s jednostavne dnevne skripte na satnu. Nije baš tako elegantno kao na Mastodon instanci kojom upravlja moj prijatelj – tamo imamo ZFS snapshot svakih 20 minuta – ali i ovim sam rješenjem zadovoljan. I moram reći da mi se NixOS sve više sviđa. Bez AI-ja bi bilo previše komplicirano da bih ga razumio, ali sada barem mogu čitati gotove Nix datoteke. Razmišljao sam o prebacivanju poslužitelja na obični Linux, ali dok god ovo ovako dobro funkcionira...

  1. /etc/nixos: Cjelokupna NixOS konfiguracija (sve .nix datoteke).

  2. /opt/minecraft: Svi svjetovi i podaci Minecraft poslužitelja.

  3. /opt/satisfactory: Spremljene igre i konfiguracija Satisfactory poslužitelja.

  4. /opt/Blog: Izvorni kod i sadržaj bloga.

  5. /opt/ui: Datoteke Mastodon sučelja.

  6. /opt/audiobookshelf: Audioknjige i pripadajuća baza podataka.

Sve to završava na S3 pohrani koja je montirana putem RClone-a.

NixOS konfiguracija


{ config, pkgs, ... }:

{
  # BorgBackup konfiguracija
  services.borgbackup.jobs.hourly = {
    # Putanja do repozitorija u S3 mountu
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Lozinka nije potrebna
    encryption.mode = "none";

    # Kompresija za još veću uštedu prostora
    compression = "auto,zstd";

    # Putanje za sigurnosnu kopiju
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Izvršavanje svakog sata
    startAt = "hourly";

    # Automatska inicijalizacija repozitorija ako nedostaje
    doInit = true;

    # Pravila zadržavanja (Pruning)
    prune.keep = {
      within = "1d"; # Svi snapshotovi u zadnja 24 sata
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Osiguravanje da je S3 mount spreman prije nego što Borg krene
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}