Blogum // Dijital Arşiv

Düşünceler, projeler ve teknik notlar

Etikete göre göster: #nixos Hepsini göster ×

NixOS ev sunucumun yedekleme sistemini değiştirdim ve basit bir günlük betik yerine saatlik yedeklemeye geçtim. Arkadaşımın yönettiği Mastodon örneğindeki kadar zarif değil – orada her 20 dakikada bir ZFS anlık görüntüsü (snapshot) alıyoruz – ama bu çözümden de memnunum. Ve şunu söylemeliyim ki NixOS giderek daha çok hoşuma gidiyor. Yapay zeka olmasaydı anlamam için çok karmaşık olurdu, ancak artık en azından hazır Nix dosyalarını okuyabiliyorum. Bir ara sunucuyu normal bir Linux dağıtımına geçirmeyi düşünmüştüm ama bu kadar iyi çalıştığı sürece...

  1. /etc/nixos: Tüm NixOS yapılandırması (tüm .nix dosyaları).

  2. /opt/minecraft: Minecraft sunucusunun tüm dünyaları ve verileri.

  3. /opt/satisfactory: Satisfactory sunucusunun kayıtlı oyunları ve yapılandırması.

  4. /opt/Blog: Blogun kaynak kodu ve içerikleri.

  5. /opt/ui: Mastodon kullanıcı arayüzü (UI) dosyaları.

  6. /opt/audiobookshelf: Sesli kitaplar ve ilgili veritabanı.

Tüm bunlar, RClone aracılığıyla bağlanan (mount edilen) bir S3 depolama alanına aktarılıyor.

NixOS Yapılandırması


{ config, pkgs, ... }:

{
  # BorgBackup yapılandırması
  services.borgbackup.jobs.hourly = {
    # S3 bağlama noktasındaki depo yolu
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Şifre gerekmiyor
    encryption.mode = "none";

    # Daha fazla alan tasarrufu için sıkıştırma
    compression = "auto,zstd";

    # Yedeklenecek yollar
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Saatlik çalışma
    startAt = "hourly";

    # Eksikse depoyu otomatik olarak başlat
    doInit = true;

    # Saklama kuralları (Budama)
    prune.keep = {
      within = "1d"; # Son 24 saatteki tüm anlık görüntüler
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Borg başlamadan önce S3 bağlamasının hazır olduğundan emin olun
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

Özellikle #NixOS'u daha yakından tanımak için kendi blogumu kurdum. Şaşırtıcı bir şekilde her şey oldukça sorunsuz ilerledi.

WriteFreely bu iş için gerçekten çok uygun: minimalist, hızlı kuruluyor ve gereksiz yüklerden arınmış. Sadece işe koyulmak ve bu sırada bir şeyler öğrenmek için mükemmel. Yapılandırması ise oldukça anlaşılır. Birkaç seçenek belirlendi, dizin hazırlandı, önüne bir reverse proxy eklendi — ve bitti.

İşte bunun için kullandığım güncel NixOS yapılandırmam:

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

  # ActivityPub anahtar üretimi için düzeltme: Federasyon openssl gerektirir
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Veri dizininin doğru izinlerle otomatik olarak oluşturulması
  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}
    }
  '';
}

Temelde hepsi bu kadar. NixOS, bu tür hizmetleri temiz bir şekilde yapılandırmayı ve yeniden üretilebilir tutmayı gerçekten kolaylaştırıyor.