Blog Saya // Arsip Digital

Pikiran, proyek, dan catatan teknis

Tampilkan entri dengan tag: #nixos Tampilkan semua ร—

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" ];
  };
}

Saya baru saja menginstal blog pribadi โ€” terutama untuk mengenal #NixOS lebih jauh. Mengejutkannya, semuanya berjalan dengan cukup mudah.

WriteFreely sangat cocok untuk ini: minimalis, cepat disiapkan, dan tanpa banyak beban. Sempurna untuk langsung memulai sambil belajar hal baru. Konfigurasinya sangat rapi. Cukup atur beberapa opsi, siapkan direktori, pasang reverse proxy di depannya โ€” selesai.

Berikut adalah konfigurasi NixOS saya saat ini:

{ config, pkgs, ... }:

{
  services.writefreely = {
    enable = true;
    host = "blog.burningboard.org"; 
    settings = {
      server = {
        port = 8080;
        min_log_level = "debug";
      };
      app = {
        host = "https://blog.burningboard.org";
        single_user = true;
        landing = "/read";
        wf_modesty = true;
        federation = true;
        public_stats = true;
        theme = "write";
      };
    };
    stateDir = "/opt/writefreely";
  };

  # Perbaikan untuk pembuatan kunci ActivityPub: Federasi membutuhkan openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Pembuatan direktori data secara otomatis dengan izin yang benar
  systemd.tmpfiles.rules = [
    "d /opt/writefreely 0700 writefreely writefreely -"
  ];

  services.caddy.virtualHosts."blog.burningboard.org".extraConfig = ''
    reverse_proxy 127.0.0.1:8080 {
      header_up Host {host}
      header_up X-Real-IP {remote_host}
      header_up X-Forwarded-For {remote_host}
      header_up X-Forwarded-Proto {scheme}
    }
  '';
}

Itu saja intinya. NixOS benar-benar memudahkan konfigurasi layanan seperti ini secara bersih dan menjaganya tetap reproduksibel.