Mia Blogo // Digita arkivo

Pensoj, projektoj kaj teknikaj notoj

Montri afiŝojn kun etikedo: #nixos Montri ĉiujn ×

Mi ĵus ŝanĝis la sekurkopian sistemon de mia NixOS hejma servilo kaj anstataŭigis simplan ĉiutagan skripton per hora sekurkopio. Ne tute tiel eleganta kiel ĉe la Mastodon-instanco, kiun mia amiko administras – tie ni havas ZFS-momentkopion ĉiun 20-an minuton – sed mi estas kontenta ankaŭ pri ĉi tiu solvo. Kaj mi devas diri, ke NixOS plaĉas al mi pli kaj pli. Sen AI ĝi tamen estus tro komplika por ke mi povu kompreni ĝin, sed intertempe mi almenaŭ povas legi la finitajn Nix-dosierojn. Mi iam pripensis reŝanĝi la servilon al kutima Linukso, sed tiel longe kiel tio tiel bone funkcias...

  1. /etc/nixos: La tuta NixOS-agordo (ĉiuj .nix-dosieroj).

  2. /opt/minecraft: Ĉiuj mondoj kaj datumoj de la Minecraft-servilo.

  3. /opt/satisfactory: Ludostatoj kaj agordo de la Satisfactory-servilo.

  4. /opt/Blog: La fontkodo kaj la enhavoj de la blogo.

  5. /opt/ui: La Mastodon-UI-dosieroj.

  6. /opt/audiobookshelf: La aŭdlibroj kaj la rilata datumbazo.

La tuto finiĝas en S3-stokrejo, kiu estis muntita per RClone.

La NixOS-agordo


{ config, pkgs, ... }:

{
  # BorgBackup-agordo
  services.borgbackup.jobs.hourly = {
    # Vojo al la deponejo en la S3-munto
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Neniu pasvorto necesa
    encryption.mode = "none";

    # Kunpremo por eĉ pli da spacŝparo
    compression = "auto,zstd";

    # La sekurkopiotaj vojoj
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Hora plenumo
    startAt = "hourly";

    # Aŭtomate pravalorizi la deponejon, se ĝi mankas
    doInit = true;

    # Konservreguloj (Pruning)
    prune.keep = {
      within = "1d"; # Ĉiuj momentkopioj de la lastaj 24h
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Certigi, ke la S3-munto estas preta antaŭ ol Borg startas
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Mi instalis mian propran blogon — ĉefe por pli bone konatiĝi kun #NixOS. Surprize, ĉio okazis sufiĉe senprobleme.

WriteFreely tre bone taŭgas por tio: minimumisma, rapide agordebla kaj sen troa balasto. Perfekte por simple komenci kaj samtempe lerni ion. La agordo estas agrable klara. Kelkaj opcioj fiksitaj, dosierujo preparita, inversa prokurilo antaŭe — pretas.

Jen kiel aspektas mia aktuala NixOS-agordo por tio:

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

  # Riparo por la generado de ActivityPub-ŝlosiloj: Federacio postulas openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Aŭtomata kreado de la datuma dosierujo kun la ĝustaj permesoj
  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}
    }
  '';
}

Tio estis esence ĉio. NixOS vere faciligas agordi tiajn servojn pure kaj konservi ilin reprodukteblaj.