मेरा ब्लॉग // डिजिटल आर्काइव

विचार, परियोजनाएं और तकनीकी नोट्स

टैग के साथ प्रविष्टियां दिखाएं: #nixos सभी दिखाएं ×

मैंने अब अपने NixOS होम सर्वर के बैकअप को एक साधारण दैनिक स्क्रिप्ट के बजाय प्रति घंटा बैकअप में बदल दिया है। यह उतना शानदार नहीं है जितना कि मेरे दोस्त द्वारा प्रबंधित Mastodon इंस्टेंस पर है – वहां हमारे पास हर 20 मिनट में एक ZFS स्नैपशॉट होता है – लेकिन मैं इस समाधान से भी खुश हूं। और मुझे कहना होगा कि NixOS मुझे और भी पसंद आने लगा है। एआई (AI) के बिना, यह समझने के लिए बहुत जटिल होता, लेकिन अब मैं कम से कम तैयार Nix फाइलों को पढ़ सकता हूं। मैंने एक बार सर्वर को सामान्य लिनक्स में बदलने के बारे में सोचा था, लेकिन जब तक यह इतना अच्छा काम कर रहा है...

  1. /etc/nixos: पूरी NixOS कॉन्फ़िगरेशन (सभी .nix फाइलें)।

  2. /opt/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";
  };

  # ActivityPub की जनरेशन के लिए फिक्स: फेडरेशन के लिए openssl की आवश्यकता है
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # सही अनुमतियों (permissions) के साथ डेटा डायरेक्टरी का स्वचालित निर्माण
  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}
    }
  '';
}

बस इतना ही था। NixOS ऐसी सेवाओं को सफाई से कॉन्फ़िगर करना और उन्हें प्रतिलिपि योग्य (reproducible) बनाए रखना वास्तव में आसान बनाता है।