من اخیراً سیستم بک‌آپ سرور خانگی NixOS خود را تغییر دادم و به جای یک اسکریپت ساده روزانه، آن را به حالت ساعتی تنظیم کردم. این راهکار به اندازه نمونه مستودونی (Mastodon) که دوستم مدیریت می‌کند ظریف نیست – آنجا هر ۲۰ دقیقه یک اسنپ‌شات ZFS داریم – اما از این راهکار هم راضی هستم. و باید بگویم که NixOS هر روز بیشتر از قبل نظرم را جلب می‌کند. البته بدون هوش مصنوعی، درک آن بسیار پیچیده می‌شد، اما حالا حداقل می‌توانم فایل‌های آماده Nix را بخوانم. زمانی به فکر تغییر سرور به یک لینوکس معمولی بودم، اما تا زمانی که این‌قدر خوب کار می‌کند...

  1. /etc/nixos: کل پیکربندی NixOS (تمام فایل‌های .nix).

  2. /opt/minecraft: تمام جهان‌ها و داده‌های سرور ماینکرفت.

  3. /opt/satisfactory: فایل‌های ذخیره بازی و پیکربندی سرور Satisfactory.

  4. /opt/Blog: کد منبع و محتوای وبلاگ.

  5. /opt/ui: فایل‌های رابط کاربری مستودون.

  6. /opt/audiobookshelf: کتاب‌های صوتی و پایگاه داده مربوطه.

تمام این‌ها در یک فضای ذخیره‌سازی S3 که از طریق RClone مانت (mount) شده است، قرار می‌گیرند.

پیکربندی 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
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}