Minu blogi // Digitaalne arhiiv

Mõtted, projektid ja tehnilised märkmed

Kuva sildiga postitused: #nixos Kuva kõik ×

Muutsin nüüd oma NixOS koduserveri varundust ja asendasin lihtsa igapäevase skripti tunnise varundusega. Mitte küll nii elegantne kui Mastodoni instantsis, mida mu sõber haldab – seal teeme iga 20 minuti järel ZFS snapshot'i – aga olen ka selle lahendusega rahul. Ja pean ütlema, et NixOS meeldib mulle üha enam. Ilma tehisintellektita oleks see aga liiga keeruline, et ma sellest aru saaksin, kuid nüüdseks suudan valmis Nix-faile vähemalt lugeda. Kaalusid korraks serveri üleviimist tavalisele Linuxile, aga seni kuni see nii hästi töötab...

  1. /etc/nixos: Kogu NixOS-i konfiguratsioon (kõik .nix failid).

  2. /opt/minecraft: Kõik Minecrafti serveri maailmad ja andmed.

  3. /opt/satisfactory: Satisfactory serveri salvestused ja konfiguratsioon.

  4. /opt/Blog: Blogi lähtekood ja sisu.

  5. /opt/ui: Mastodoni kasutajaliidese (UI) failid.

  6. /opt/audiobookshelf: Audioraamatud ja nendega seotud andmebaas.

Kõik see maandub S3-salvestusruumis, mis on ühendatud RClone'i kaudu.

NixOS-i konfiguratsioon


{ config, pkgs, ... }:

{
  # BorgBackupi konfiguratsioon
  services.borgbackup.jobs.hourly = {
    # Tee repositooriumini S3-mountis
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Parooli pole vaja
    encryption.mode = "none";

    # Pakkimine veelgi suurema ruumisäästu saavutamiseks
    compression = "auto,zstd";

    # Varundatavad asukohad
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Käivitamine kord tunnis
    startAt = "hourly";

    # Repositooriumi automaatne lähtestamine, kui see puudub
    doInit = true;

    # Säilitamisreeglid (Pruning)
    prune.keep = {
      within = "1d"; # Kõik viimase 24 tunni snapshotid
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Veendumine, et S3-mount on valmis enne Borgi käivitamist
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Paigaldasin endale oma blogi — eelkõige selleks, et #NixOS-i paremini tundma õppida. Üllataval kombel sujus see kõik üsna lihtsalt.

WriteFreely sobib selleks väga hästi: minimalistlik, kiiresti seadistatav ja ilma liigse pagasita. Ideaalne, et lihtsalt alustada ja samal ajal midagi juurde õppida. Konfiguratsioon on meeldivalt selge. Mõned valikud paika pandud, kataloog ette valmistatud, pöördproksi (reverse proxy) ette — valmis.

Selline näeb välja minu praegune NixOS-i konfiguratsioon:

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

  # ActivityPubi võtmete genereerimise parandus: föderatsioon nõuab openssl-i
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Andmekataloogi automaatne loomine korrektsete õigustega
  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}
    }
  '';
}

See ongi sisuliselt kõik. NixOS teeb selliste teenuste puhta seadistamise ja reprodutseeritavuse hoidmise tõesti lihtsaks.