Moj blog // Digitalni arhiv

Misli, projekti in tehnični zapiski

Prikaži objave z oznako: #nixos Prikaži vse ×

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

Namestil sem si lasten blog — predvsem zato, da bi bolje spoznal #NixOS. Presenetljivo je bilo vse skupaj precej preprosto.

WriteFreely je za to odlična izbira: minimalističen, hitro nastavljiv in brez odvečne navlake. Popoln za hiter začetek in sprotno učenje. Konfiguracija je prijetno pregledna. Nastaviš nekaj možnosti, pripraviš imenik, postaviš obratni posredniški strežnik (reverse proxy) — in to je to.

Tako izgleda moja trenutna konfiguracija NixOS za ta namen:

{ 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";
  };

  # Popravek za generiranje ključev ActivityPub: federacija zahteva openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Samodejno ustvarjanje podatkovnega imenika z ustreznimi dovoljenji
  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}
    }
  '';
}

To je v bistvu vse. NixOS resnično olajša čisto konfiguracijo in zagotavljanje ponovljivosti takšnih storitev.