لقد قمت الآن بتغيير نظام النسخ الاحتياطي لخادم NixOS المنزلي الخاص بي، وانتقلت من مجرد سكربت يومي بسيط إلى نسخ احتياطي كل ساعة. ليس الأمر بنفس الأناقة الموجودة في نسخة Mastodon التي يديرها صديقي - حيث يتم أخذ لقطة (ZFS Snapshot) كل 20 دقيقة - ولكنني راضٍ عن هذا الحل أيضاً. ويجب أن أقول إن NixOS يعجبني أكثر فأكثر. لولا الذكاء الاصطناعي، لكان الأمر معقداً للغاية لدرجة أنني لن أتمكن من فهمه، ولكنني الآن أستطيع على الأقل قراءة ملفات Nix الجاهزة. فكرت ذات مرة في تحويل الخادم إلى توزيعة لينكس عادية، ولكن طالما أن الأمور تسير على هذا النحو الجيد...

  1. /etc/nixos: تكوين NixOS بالكامل (جميع ملفات .nix).

  2. /opt/minecraft: جميع العوالم والبيانات الخاصة بخادم Minecraft.

  3. /opt/satisfactory: ملفات الحفظ وتكوين خادم Satisfactory.

  4. /opt/Blog: الكود المصدري ومحتويات المدونة.

  5. /opt/ui: ملفات واجهة مستخدم Mastodon.

  6. /opt/audiobookshelf: الكتب الصوتية وقاعدة البيانات المرتبطة بها.

يتم تخزين كل هذا على مساحة تخزين S3 تم وصلها (mount) عبر RClone.

تكوين 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;
    };
  };

  # التأكد من أن نقطة وصل S3 جاهزة قبل بدء Borg
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}