ตอนนี้ผมได้เปลี่ยนระบบสำรองข้อมูล (Backup) ของโฮมเซิร์ฟเวอร์ NixOS จากเดิมที่ใช้สคริปต์ง่ายๆ รายวัน มาเป็นแบบรายชั่วโมงแล้ว อาจจะไม่หรูหราเท่ากับอินสแตนซ์ Mastodon ที่เพื่อนของผมดูแล ซึ่งที่นั่นมีการทำ ZFS Snapshot ทุกๆ 20 นาที แต่สำหรับโซลูชันนี้ผมก็พอใจแล้ว และต้องบอกเลยว่าผมเริ่มชอบ NixOS มากขึ้นเรื่อยๆ ถ้าไม่มี AI มันคงจะซับซ้อนเกินกว่าที่ผมจะเข้าใจได้ แต่ตอนนี้อย่างน้อยผมก็สามารถอ่านไฟล์ Nix ที่เสร็จสมบูรณ์ได้แล้ว เคยคิดจะเปลี่ยนเซิร์ฟเวอร์ไปใช้ Linux ทั่วไปอยู่เหมือนกัน แต่ตราบใดที่มันยังทำงานได้ดีขนาดนี้...
-
/etc/nixos: การตั้งค่า NixOS ทั้งหมด (ไฟล์ .nix ทั้งหมด) -
/opt/minecraft: โลกและข้อมูลทั้งหมดของเซิร์ฟเวอร์ Minecraft -
/opt/satisfactory: ไฟล์เซฟเกมและการตั้งค่าของเซิร์ฟเวอร์ Satisfactory -
/opt/Blog: ซอร์สโค้ดและเนื้อหาของบล็อก -
/opt/ui: ไฟล์ Mastodon-UI -
/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" ];
};
}