Môj blog // Digitálny archív

Myšlienky, projekty a technické poznámky

Zobraziť príspevky so značkou: #nixos Zobraziť všetko ×

Práve som zmenil zálohovanie svojho NixOS domáceho servera a namiesto jednoduchého denného skriptu som prešiel na hodinové zálohovanie. Nie je to také elegantné ako na inštancii Mastodonu, ktorú spravuje môj kamarát – tam máme ZFS snapshot každých 20 minút – ale s týmto riešením som tiež spokojný. A musím povedať, že NixOS sa mi páči čoraz viac. Bez umelej inteligencie by to však bolo príliš komplikované na to, aby som to pochopil, ale medzitým už dokážem hotové Nix súbory aspoň čítať. Uvažoval som o tom, že server prehodím na bežný Linux, ale kým to takto dobre funguje...

  1. /etc/nixos: Celá konfigurácia NixOS (všetky .nix súbory).

  2. /opt/minecraft: Všetky svety a dáta Minecraft servera.

  3. /opt/satisfactory: Uložené pozície a konfigurácia Satisfactory servera.

  4. /opt/Blog: Zdrojový kód a obsah blogu.

  5. /opt/ui: Súbory Mastodon UI.

  6. /opt/audiobookshelf: Audioknihy a príslušná databáza.

Celé to končí na S3 úložisku, ktoré bolo pripojené cez RClone.

Konfigurácia NixOS


{ config, pkgs, ... }:

{
  # Konfigurácia BorgBackup
  services.borgbackup.jobs.hourly = {
    # Cesta k repozitáru v S3 mounte
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Nevyžaduje sa žiadne heslo
    encryption.mode = "none";

    # Kompresia pre ešte väčšiu úsporu miesta
    compression = "auto,zstd";

    # Cesty, ktoré sa majú zálohovať
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Hodinové spúšťanie
    startAt = "hourly";

    # Automaticky inicializovať repozitár, ak chýba
    doInit = true;

    # Pravidlá uchovávania (Pruning)
    prune.keep = {
      within = "1d"; # Všetky snapshoty za posledných 24 h
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Zabezpečenie, aby bol S3 mount pripravený pred spustením Borgu
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Nainštaloval som si vlastný blog — hlavne preto, aby som lepšie spoznal #NixOS. Prekvapivo to celé išlo celkom jednoducho.

WriteFreely sa na to skvele hodí: je minimalistický, rýchlo sa nastavuje a je bez zbytočnej záťaže. Ideálne na to, aby ste mohli jednoducho začať a popritom sa niečo naučiť. Konfigurácia je príjemne prehľadná. Nastavených pár možností, pripravený adresár, reverzný proxy pred ním — a hotovo.

Takto vyzerá moja aktuálna konfigurácia NixOS pre tento účel:

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

  # Oprava pre generovanie kľúčov ActivityPub: Federácia vyžaduje openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatické vytvorenie dátového adresára so správnymi oprávneniami
  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 podstate všetko. NixOS skutočne uľahčuje čistú konfiguráciu takýchto služieb a ich udržiavanie v reprodukovateľnom stave.