నా బ్లాగ్ // డిజిటల్ ఆర్కైవ్

ఆలోచనలు, ప్రాజెక్టులు మరియు సాంకేతిక గమనికలు

ట్యాగ్‌తో ఎంట్రీలను చూపించు: #nixos అన్నీ చూపించు ×

నేను ఇప్పుడు నా NixOS హోమ్ సర్వర్ బ్యాకప్‌ను మార్చాను మరియు సాధారణ రోజువారీ స్క్రిప్ట్‌కు బదులుగా గంటవారీ బ్యాకప్‌కు మార్చాను. నా స్నేహితుడు నిర్వహించే మాస్టోడాన్ (Mastodon) ఇన్‌స్టన్స్‌లో ఉన్నంత అద్భుతంగా ఇది లేదు – అక్కడ ప్రతి 20 నిమిషాలకు ఒక ZFS స్నాప్‌షాట్ ఉంటుంది – కానీ ఈ పరిష్కారంతో కూడా నేను సంతృప్తిగా ఉన్నాను. మరియు నేను చెప్పాలి, NixOS నాకు రోజురోజుకూ మరింత నచ్చుతోంది. AI (కృత్రిమ మేధస్సు) లేకుండా, నేను అర్థం చేసుకోలేనంత క్లిష్టంగా ఇది ఉండేది, కానీ ఇప్పుడు నేను కనీసం సిద్ధంగా ఉన్న Nix ఫైల్‌లను చదవగలుగుతున్నాను. సర్వర్‌ను సాధారణ లైనక్స్‌కు మార్చాలని ఒకప్పుడు అనుకున్నాను, కానీ ఇది ఇంత బాగా పనిచేస్తున్నంత కాలం...

  1. /etc/nixos: మొత్తం NixOS కాన్ఫిగరేషన్ (అన్ని .nix ఫైల్‌లు).

  2. /opt/minecraft: Minecraft సర్వర్ యొక్క అన్ని ప్రపంచాలు మరియు డేటా.

  3. /opt/satisfactory: Satisfactory సర్వర్ యొక్క గేమ్ సేవ్స్ మరియు కాన్ఫిగరేషన్.

  4. /opt/Blog: బ్లాగ్ యొక్క సోర్స్ కోడ్ మరియు కంటెంట్.

  5. /opt/ui: Mastodon-UI ఫైల్‌లు.

  6. /opt/audiobookshelf: ఆడియోబుక్స్ మరియు దానికి సంబంధించిన డేటాబేస్.

ఇదంతా RClone ద్వారా మౌంట్ చేయబడిన S3 స్టోరేజ్‌లో సేవ్ చేయబడుతుంది.

NixOS కాన్ఫిగరేషన్


{ config, pkgs, ... }:

{
  # BorgBackup కాన్ఫిగరేషన్
  services.borgbackup.jobs.hourly = {
    # S3-మౌంట్‌లో రిపోజిటరీ పాత్
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # పాస్‌వర్డ్ అవసరం లేదు
    encryption.mode = "none";

    # మరింత స్థలాన్ని ఆదా చేయడానికి కంప్రెషన్
    compression = "auto,zstd";

    # బ్యాకప్ చేయవలసిన పాత్‌లు
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # గంటవారీ అమలు
    startAt = "hourly";

    # రిపోజిటరీ లేకపోతే ఆటోమేటిక్‌గా ఇనిషియలైజ్ చేయండి
    doInit = true;

    # నిలుపుదల నియమాలు (Pruning)
    prune.keep = {
      within = "1d"; # గత 24 గంటల అన్ని స్నాప్‌షాట్‌లు
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Borg ప్రారంభమయ్యే ముందు S3-మౌంట్ సిద్ధంగా ఉందని నిర్ధారించుకోండి
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

నేను నా స్వంత బ్లాగును ఇన్‌స్టాల్ చేసుకున్నాను — ప్రధానంగా #NixOS గురించి బాగా తెలుసుకోవడానికి. ఆశ్చర్యకరంగా, ఇదంతా చాలా సులభంగా జరిగిపోయింది.

దీని కోసం WriteFreely చాలా బాగా సరిపోతుంది: ఇది మినిమలిస్టిక్, త్వరగా సెటప్ చేయవచ్చు మరియు అనవసరమైన హంగులు ఏవీ ఉండవు. పనిని ప్రారంభించడానికి మరియు నేర్చుకోవడానికి ఇది సరైనది. దీని కాన్ఫిగరేషన్ చాలా స్పష్టంగా ఉంటుంది. కొన్ని ఆప్షన్లను సెట్ చేయడం, డైరెక్టరీని సిద్ధం చేయడం, రివర్స్ ప్రాక్సీని జోడించడం — అంతే, పని పూర్తయింది.

దీని కోసం నా ప్రస్తుత 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";
  };

  # Fix für die ActivityPub-Schlüsselgenerierung: Föderation erfordert openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatisches Erstellen des Datenverzeichnisses mit den korrekten Berechtigungen
  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}
    }
  '';
}

ముఖ్యంగా చెప్పాలంటే ఇంతే. ఇటువంటి సర్వీసులను చక్కగా కాన్ఫిగర్ చేయడానికి మరియు వాటిని రీప్రొడ్యూసిబుల్ (reproducible) గా ఉంచడానికి NixOS నిజంగా చాలా సులభతరం చేస్తుంది.