Saya baru saja mengubah sistem cadangan (backup) pada homeserver NixOS saya, dari yang sebelumnya hanya skrip harian sederhana menjadi per jam. Memang tidak seanggun instansi Mastodon yang dikelola teman saya – di sana kami melakukan snapshot ZFS setiap 20 menit – tapi saya cukup puas dengan solusi ini. Dan harus saya akui, saya semakin menyukai NixOS. Tanpa bantuan AI, sistem ini mungkin akan terlalu rumit untuk saya pahami, tetapi sekarang setidaknya saya sudah bisa membaca file Nix yang sudah jadi. Sempat terpikir untuk memindahkan server ke distro Linux biasa, tapi selama ini berfungsi dengan baik...

  1. /etc/nixos: Seluruh konfigurasi NixOS (semua file .nix).

  2. /opt/minecraft: Semua world dan data dari server Minecraft.

  3. /opt/satisfactory: Save game dan konfigurasi dari server Satisfactory.

  4. /opt/Blog: Kode sumber dan konten blog.

  5. /opt/ui: File UI Mastodon.

  6. /opt/audiobookshelf: Buku audio (audiobook) dan database terkait.

Semuanya disimpan di penyimpanan S3 yang dipasang (mount) melalui RClone.

Konfigurasi NixOS


{ config, pkgs, ... }:

{
  # Konfigurasi BorgBackup
  services.borgbackup.jobs.hourly = {
    # Jalur ke repositori di mount S3
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Tidak memerlukan kata sandi
    encryption.mode = "none";

    # Kompresi untuk penghematan ruang yang lebih besar
    compression = "auto,zstd";

    # Jalur yang akan dicadangkan
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Eksekusi setiap jam
    startAt = "hourly";

    # Inisialisasi repositori secara otomatis jika belum ada
    doInit = true;

    # Aturan retensi (Pruning)
    prune.keep = {
      within = "1d"; # Semua snapshot dalam 24 jam terakhir
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Memastikan mount S3 siap sebelum Borg dimulai
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}