Mon Blog // Archives numériques

Pensées, projets et notes techniques

Afficher les entrées avec le tag : #nixos Tout afficher ×

J'ai récemment modifié la sauvegarde de mon serveur domestique NixOS, passant d'un simple script quotidien à une exécution horaire. Ce n'est pas aussi élégant que sur l'instance Mastodon que gère mon ami – où nous avons un snapshot ZFS toutes les 20 minutes – mais je suis également satisfait de cette solution. Et je dois dire que NixOS me plaît de plus en plus. Sans l'IA, ce serait bien trop complexe pour que je puisse le comprendre, mais désormais, j'arrive au moins à lire les fichiers Nix terminés. J'avais envisagé de passer le serveur sur une distribution Linux classique, mais tant que cela fonctionne aussi bien...

  1. /etc/nixos : Toute la configuration NixOS (tous les fichiers .nix).

  2. /opt/minecraft : Tous les mondes et données du serveur Minecraft.

  3. /opt/satisfactory : Sauvegardes et configuration du serveur Satisfactory.

  4. /opt/Blog : Le code source et le contenu du blog.

  5. /opt/ui : Les fichiers de l'interface utilisateur (UI) de Mastodon.

  6. /opt/audiobookshelf : Les livres audio et la base de données associée.

Le tout est stocké sur un stockage S3 monté via RClone.

La configuration NixOS


{ config, pkgs, ... }:

{
  # Configuration de BorgBackup
  services.borgbackup.jobs.hourly = {
    # Chemin vers le dépôt dans le montage S3
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Aucun mot de passe requis
    encryption.mode = "none";

    # Compression pour encore plus d'économie d'espace
    compression = "auto,zstd";

    # Les chemins à sauvegarder
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Exécution horaire
    startAt = "hourly";

    # Initialiser automatiquement le dépôt s'il est manquant
    doInit = true;

    # Règles de rétention (élagage)
    prune.keep = {
      within = "1d"; # Tous les snapshots des dernières 24h
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # S'assurer que le montage S3 est prêt avant que Borg ne démarre
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

J'ai installé mon propre blog — principalement pour mieux découvrir #NixOS. À ma grande surprise, tout s'est déroulé de manière assez simple.

WriteFreely s'y prête particulièrement bien : minimaliste, rapide à mettre en place et sans fioritures. C'est l'outil idéal pour se lancer tout en apprenant. La configuration est agréablement claire. Quelques options définies, un répertoire préparé, un reverse proxy devant — et le tour est joué.

Voici à quoi ressemble ma configuration NixOS actuelle pour ce service :

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

  # Correctif pour la génération de clés ActivityPub : la fédération nécessite openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Création automatique du répertoire de données avec les permissions appropriées
  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}
    }
  '';
}

C'est essentiellement tout. NixOS rend vraiment facile la configuration propre et reproductible de tels services.