எனது வலைப்பதிவு // டிஜிட்டல் காப்பகம்

சிந்தனைகள், திட்டங்கள் மற்றும் தொழில்நுட்ப குறிப்புகள்

இந்தக் குறியீட்டுடன் உள்ள பதிவுகளைக் காட்டு: #nixos அனைத்தையும் காட்டு ×

நான் இப்போது எனது NixOS ஹோம் சர்வரின் பேக்கப்பை மாற்றியுள்ளேன், ஒரு எளிய தினசரி ஸ்கிரிப்ட்டிற்குப் பதிலாக மணிநேர பேக்கப்பிற்கு மாற்றியுள்ளேன். எனது நண்பர் நிர்வகிக்கும் Mastodon இன்ஸ்டன்ஸைப் போல இது அவ்வளவு நேர்த்தியாக இல்லை – அங்கு ஒவ்வொரு 20 நிமிடங்களுக்கும் ஒரு ZFS ஸ்னாப்ஷாட் (Snapshot) எடுக்கப்படுகிறது – ஆனால் இந்தத் தீர்வில் நான் திருப்தி அடைகிறேன். மேலும் 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" ];
  };
}

நான் எனது சொந்த வலைப்பதிவை (Blog) நிறுவியுள்ளேன் — முக்கியமாக #NixOS பற்றி நன்றாகத் தெரிந்துகொள்வதற்காக. ஆச்சரியப்படும் விதமாக, இது மிகவும் எளிதாக முடிந்தது.

இதற்கு WriteFreely மிகவும் பொருத்தமானது: எளிமையானது, விரைவாக அமைக்கக்கூடியது மற்றும் தேவையற்ற சுமை இல்லாதது. எளிய முறையில் தொடங்கி, அதே நேரத்தில் புதிய விஷயங்களைக் கற்றுக்கொள்ள இது சிறந்தது. இதன் கட்டமைப்பு (Configuration) மிகவும் தெளிவாக உள்ளது. சில விருப்பங்களை அமைத்து, கோப்பகத்தைத் (Directory) தயார் செய்து, ஒரு Reverse Proxy-ஐ இணைத்தால் போதும் — வேலை முடிந்தது.

இதற்கான எனது தற்போதைய NixOS கட்டமைப்பு (Configuration) இதோ:

{ 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 மிகவும் எளிதாக்குகிறது.