Můj blog // Digitální archiv

Myšlenky, projekty a technické poznámky

Zobrazit příspěvky se štítkem: #nixos Zobrazit vše ×

Právě jsem změnil zálohování svého domácího serveru s NixOS a místo jednoduchého denního skriptu jsem přešel na hodinové zálohy. Není to sice tak elegantní jako na instanci Mastodonu, kterou spravuje můj kamarád – tam máme ZFS snapshot každých 20 minut – ale i s tímto řešením jsem spokojený. A musím říct, že NixOS se mi líbí čím dál víc. Bez AI by to sice bylo příliš složité na to, abych to pochopil, ale teď už dokážu hotové Nix soubory alespoň číst. Uvažoval jsem o tom, že server převedu na běžný Linux, ale dokud to takhle dobře funguje...

  1. /etc/nixos: Celá konfigurace NixOS (všechny soubory .nix).

  2. /opt/minecraft: Všechny světy a data Minecraft serveru.

  3. /opt/satisfactory: Uložené pozice a konfigurace Satisfactory serveru.

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

  5. /opt/ui: Soubory Mastodon UI.

  6. /opt/audiobookshelf: Audioknihy a příslušná databáze.

To vše se ukládá na S3 úložiště, které je připojeno přes RClone.

Konfigurace NixOS


{ config, pkgs, ... }:

{
  # Konfigurace BorgBackup
  services.borgbackup.jobs.hourly = {
    # Cesta k repozitáři v S3 mountu
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Není vyžadováno heslo
    encryption.mode = "none";

    # Komprese pro ještě větší úsporu místa
    compression = "auto,zstd";

    # Cesty k zálohování
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Hodinové spouštění
    startAt = "hourly";

    # Automaticky inicializovat repozitář, pokud chybí
    doInit = true;

    # Pravidla pro uchovávání (Pruning)
    prune.keep = {
      within = "1d"; # Všechny snapshoty za posledních 24h
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Zajištění, že je S3 mount připraven před spuštěním Borgu
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Nainstaloval jsem si vlastní blog – hlavně proto, abych lépe poznal #NixOS. Překvapivě to všechno šlo docela snadno.

WriteFreely se k tomu skvěle hodí: je minimalistické, rychle se nastavuje a neobsahuje žádný zbytečný balast. Ideální pro rychlý začátek a učení se za pochodu. Konfigurace je příjemně přehledná. Stačí nastavit pár voleb, připravit adresář, přidat reverse proxy – a hotovo.

Takto vypadá moje aktuální konfigurace NixOS:

{ 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 pro generování klíčů ActivityPub: federace vyžaduje openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatické vytvoření datového adresáře se správnými oprávněními
  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 podstatě všechno. NixOS opravdu usnadňuje čistou konfiguraci a udržování takových služeb v reprodukovatelném stavu.