माझा ब्लॉग // डिजिटल संग्रहण

विचार, प्रकल्प आणि तांत्रिक नोट्स

या टॅगसह नोंदी दाखवा: #nixos सर्व दाखवा ×

मी आता माझ्या NixOS होम सर्व्हरचा बॅकअप बदलला आहे आणि साध्या दररोजच्या स्क्रिप्टऐवजी तो तासाभराच्या बॅकअपवर सेट केला आहे. माझ्या मित्राने व्यवस्थापित केलेल्या Mastodon इन्स्टन्सइतके हे मोहक नाही – तिथे दर २० मिनिटांनी एक ZFS स्नॅपशॉट घेतला जातो – पण मी या समाधानावरही आनंदी आहे. आणि मला हे मान्य करावे लागेल की मला NixOS अधिकाधिक आवडू लागले आहे. एआय (AI) शिवाय हे समजून घेणे खूप कठीण झाले असते, पण आता मी किमान तयार Nix फाइल्स वाचू शकतो. मी एकदा सर्व्हरला सामान्य लिनक्सवर बदलण्याचा विचार केला होता, पण जोपर्यंत हे इतके चांगले काम करत आहे...

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

  2. /opt/minecraft: माइनक्राफ्ट (Minecraft) सर्व्हरचे सर्व जग (worlds) आणि डेटा.

  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"; # गेल्या २४ तासांतील सर्व स्नॅपशॉट्स
      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}
    }
  '';
}

बस, इतकेच होते. NixOS अशा सेवा व्यवस्थित कॉन्फिगर करणे आणि त्या रिप्रोड्युसिबल (reproducible) ठेवणे खरोखर सोपे करते.