ตอนนี้ผมได้เปลี่ยนระบบสำรองข้อมูล (Backup) ของโฮมเซิร์ฟเวอร์ NixOS จากเดิมที่ใช้สคริปต์ง่ายๆ รายวัน มาเป็นแบบรายชั่วโมงแล้ว อาจจะไม่หรูหราเท่ากับอินสแตนซ์ Mastodon ที่เพื่อนของผมดูแล ซึ่งที่นั่นมีการทำ ZFS Snapshot ทุกๆ 20 นาที แต่สำหรับโซลูชันนี้ผมก็พอใจแล้ว และต้องบอกเลยว่าผมเริ่มชอบ NixOS มากขึ้นเรื่อยๆ ถ้าไม่มี AI มันคงจะซับซ้อนเกินกว่าที่ผมจะเข้าใจได้ แต่ตอนนี้อย่างน้อยผมก็สามารถอ่านไฟล์ Nix ที่เสร็จสมบูรณ์ได้แล้ว เคยคิดจะเปลี่ยนเซิร์ฟเวอร์ไปใช้ Linux ทั่วไปอยู่เหมือนกัน แต่ตราบใดที่มันยังทำงานได้ดีขนาดนี้...

  1. /etc/nixos: การตั้งค่า NixOS ทั้งหมด (ไฟล์ .nix ทั้งหมด)

  2. /opt/minecraft: โลกและข้อมูลทั้งหมดของเซิร์ฟเวอร์ Minecraft

  3. /opt/satisfactory: ไฟล์เซฟเกมและการตั้งค่าของเซิร์ฟเวอร์ Satisfactory

  4. /opt/Blog: ซอร์สโค้ดและเนื้อหาของบล็อก

  5. /opt/ui: ไฟล์ Mastodon-UI

  6. /opt/audiobookshelf: หนังสือเสียงและฐานข้อมูลที่เกี่ยวข้อง

ข้อมูลทั้งหมดจะถูกเก็บไว้ใน S3 Storage ที่เมานต์ผ่าน RClone

การตั้งค่า NixOS


{ config, pkgs, ... }:

{
  # การตั้งค่า BorgBackup
  services.borgbackup.jobs.hourly = {
    # พาธไปยัง Repository ใน S3-mount
    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";

    # เริ่มต้น Repository โดยอัตโนมัติหากยังไม่มี
    doInit = true;

    # กฎการเก็บรักษาข้อมูล (Pruning)
    prune.keep = {
      within = "1d"; # Snapshot ทั้งหมดในช่วง 24 ชั่วโมงที่ผ่านมา
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # ตรวจสอบให้แน่ใจว่า S3-mount พร้อมใช้งานก่อนที่ Borg จะเริ่มทำงาน
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}