Min blogg // Digitalt arkiv

Tanker, prosjekter og tekniske notater

Vis innlegg med emneknagg: #nixos Vis alle ×

Jeg har nå lagt om backupen av min NixOS-hjemmeserver og gått fra et enkelt daglig skript til timesvise sikkerhetskopier. Ikke fullt så elegant som på Mastodon-instansen som vennen min administrerer – der har vi en ZFS-snapshot hvert 20. minutt – men jeg er fornøyd med denne løsningen også. Og jeg må si at jeg liker NixOS bedre og bedre. Uten KI ville det imidlertid vært altfor komplisert til at jeg kunne forstått det, men nå kan jeg i det minste lese de ferdige Nix-filene. Jeg vurderte på et tidspunkt å bytte serveren til en vanlig Linux-distribusjon, men så lenge dette fungerer så bra...

  1. /etc/nixos: Hele NixOS-konfigurasjonen (alle .nix-filer).

  2. /opt/minecraft: Alle verdener og data for Minecraft-serveren.

  3. /opt/satisfactory: Lagrede spill og konfigurasjon for Satisfactory-serveren.

  4. /opt/Blog: Kildekoden og innholdet i bloggen.

  5. /opt/ui: Mastodon-UI-filene.

  6. /opt/audiobookshelf: Lydbøkene og den tilhørende databasen.

Det hele havner på en S3-lagring som er montert via RClone.

NixOS-konfigurasjonen


{ config, pkgs, ... }:

{
  # BorgBackup-konfigurasjon
  services.borgbackup.jobs.hourly = {
    # Sti til repositoriet i S3-monteringen
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Ingen passord kreves
    encryption.mode = "none";

    # Komprimering for enda mer plassbesparelse
    compression = "auto,zstd";

    # Stiene som skal sikkerhetskopieres
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Utførelse hver time
    startAt = "hourly";

    # Initialiser repositoriet automatisk hvis det mangler
    doInit = true;

    # Oppbevaringsregler (Pruning)
    prune.keep = {
      within = "1d"; # Alle snapshots fra de siste 24 timene
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Sikre at S3-monteringen er klar før Borg starter
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Jeg har installert min egen blogg – hovedsakelig for å bli bedre kjent med #NixOS. Overraskende nok gikk det hele ganske ukomplisert.

WriteFreely passer veldig bra til dette: minimalistisk, raskt å sette opp og uten mye unødvendig fyll. Perfekt for å bare komme i gang og lære noe underveis. Konfigurasjonen er behagelig oversiktlig. Noen få alternativer satt, mappe forberedt, reverse proxy foran – ferdig.

Slik ser min nåværende NixOS-konfigurasjon ut:

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

  # Fiks for generering av ActivityPub-nøkler: Føderasjon krever openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatisk opprettelse av datamappen med riktige rettigheter
  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}
    }
  '';
}

Det var i det store og hele det hele. NixOS gjør det virkelig enkelt å konfigurere slike tjenester på en ryddig måte og holde dem reproduserbare.