আমি এখন আমার NixOS হোম সার্ভারের ব্যাকআপ সিস্টেম পরিবর্তন করেছি এবং একটি সাধারণ দৈনিক স্ক্রিপ্টের পরিবর্তে এটিকে প্রতি ঘণ্টার ব্যাকআপে রূপান্তর করেছি। আমার বন্ধুর পরিচালিত মাস্টোডন (Mastodon) ইনস্ট্যান্সের মতো এটি অতটা মার্জিত নয় – সেখানে প্রতি ২০ মিনিটে একটি ZFS স্ন্যাপশট নেওয়া হয় – তবে আমি এই সমাধানটি নিয়েও সন্তুষ্ট। এবং আমাকে বলতেই হবে যে NixOS আমার দিন দিন আরও ভালো লাগছে। এআই (AI) ছাড়া এটি বোঝা আমার জন্য অনেক বেশি জটিল হতো, তবে এখন আমি অন্তত তৈরি করা Nix ফাইলগুলো পড়তে পারি। একবার সার্ভারটিকে সাধারণ লিনাক্সে পরিবর্তন করার কথা ভেবেছিলাম, কিন্তু যতক্ষণ এটি এত ভালো কাজ করছে...
-
/etc/nixos: সম্পূর্ণ NixOS কনফিগারেশন (সবগুলো .nix ফাইল)। -
/opt/minecraft: মাইনক্রাফ্ট (Minecraft) সার্ভারের সমস্ত ওয়ার্ল্ড এবং ডেটা। -
/opt/satisfactory: স্যাটিসফ্যাক্টরি (Satisfactory) সার্ভারের গেম সেভ এবং কনফিগারেশন। -
/opt/Blog: ব্লগের সোর্স কোড এবং কন্টেন্ট। -
/opt/ui: মাস্টোডন (Mastodon) UI ফাইলগুলো। -
/opt/audiobookshelf: অডিওবুক এবং সংশ্লিষ্ট ডাটাবেস।
এই সবকিছু একটি S3 স্টোরেজে জমা হয় যা 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"; # গত ২৪ ঘণ্টার সব স্ন্যাপশট
daily = 7;
weekly = 4;
monthly = 12;
};
};
# Borg শুরু করার আগে S3-মাউন্ট প্রস্তুত আছে কিনা তা নিশ্চিত করা
systemd.services.borgbackup-job-hourly = {
requires = [ "rclone-s3-mount.service" ];
after = [ "rclone-s3-mount.service" ];
};
}