Mans blogs // Digitālais arhīvs

Domas, projekti un tehniskas piezīmes

Rādīt ierakstus ar tagu: #nixos Rādīt visus ×

Esmu nomainījis sava NixOS mājas servera dublēšanas sistēmu un vienkārša ikdienas skripta vietā pārgājis uz stundas dublējumiem. Nav gluži tik eleganti kā Mastodon instancē, kuru pārvalda mans draugs – tur mums ir ZFS momentuzņēmumi ik pēc 20 minūtēm – bet ar šo risinājumu esmu apmierināts. Un jāsaka, ka NixOS man patīk arvien labāk. Bez mākslīgā intelekta tas gan būtu pārāk sarežģīti, lai es to saprastu, bet tagad es vismaz spēju izlasīt gatavos Nix failus. Biju domājis pārcelt serveri uz parastu Linux, bet, kamēr tas tik labi darbojas...

  1. /etc/nixos: Visa NixOS konfigurācija (visi .nix faili).

  2. /opt/minecraft: Visas Minecraft servera pasaules un dati.

  3. /opt/satisfactory: Satisfactory servera saglabātie dati un konfigurācija.

  4. /opt/Blog: Bloga pirmkods un saturs.

  5. /opt/ui: Mastodon UI faili.

  6. /opt/audiobookshelf: Audiogrāmatas un saistītā datubāze.

Tas viss nonāk S3 krātuvē, kas ir piemontēta, izmantojot RClone.

Die NixOS Konfiguration


{ config, pkgs, ... }:

{
  # BorgBackup konfigurācija
  services.borgbackup.jobs.hourly = {
    # Ceļš uz repozitoriju S3 montējumā
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Parole nav nepieciešama
    encryption.mode = "none";

    # Saspiešana vēl lielākai vietas taupīšanai
    compression = "auto,zstd";

    # Dublējamie ceļi
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Izpilde reizi stundā
    startAt = "hourly";

    # Automātiski inicializēt repozitoriju, ja tā trūkst
    doInit = true;

    # Saglabāšanas noteikumi (Pruning)
    prune.keep = {
      within = "1d"; # Visi momentuzņēmumi pēdējo 24h laikā
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Pārliecināties, ka S3 montējums ir gatavs, pirms Borg sāk darbu
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Esmu uzstādījis savu personīgo blogu — galvenokārt tāpēc, lai labāk iepazītu #NixOS. Pārsteidzoši, bet tas viss izdevās diezgan vienkārši.

WriteFreely tam ir ļoti piemērots: minimālistisks, ātri uzstādāms un bez lieka balasta. Ideāli, lai vienkārši sāktu un paralēli kaut ko iemācītos. Konfigurācija ir patīkami pārskatāma. Dažas iestatītas opcijas, sagatavota direktorija, reversais prokijs priekšā — un gatavs.

Šādi izskatās mana pašreizējā NixOS konfigurācija šim nolūkam:

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

  # ActivityPub atslēgu ģenerēšanas labojums: federācijai nepieciešams openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automātiska datu direktorijas izveide ar pareizām atļaujām
  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}
    }
  '';
}

Būtībā tas arī viss. NixOS patiešām atvieglo šādu pakalpojumu tīru konfigurēšanu un to uzturēšanu reproducējamā veidā.