Mi Blog // Archivo digital

Pensamientos, proyectos y notas técnicas

Mostrar entradas con etiqueta: #nixos Mostrar todo ×

He cambiado la configuración del backup de mi servidor doméstico NixOS, pasando de un simple script diario a copias de seguridad cada hora. No es tan elegante como en la instancia de Mastodon que administra mi amigo —donde tenemos un snapshot de ZFS cada 20 minutos—, pero estoy satisfecho con esta solución. Y debo decir que NixOS me gusta cada vez más. Sin la IA, sería demasiado complicado para que pudiera entenderlo, pero ahora al menos puedo leer los archivos Nix terminados. Llegué a pensar en cambiar el servidor a un Linux convencional, pero mientras esto funcione tan bien...

  1. /etc/nixos: Toda la configuración de NixOS (todos los archivos .nix).

  2. /opt/minecraft: Todos los mundos y datos del servidor de Minecraft.

  3. /opt/satisfactory: Partidas guardadas y configuración del servidor de Satisfactory.

  4. /opt/Blog: El código fuente y los contenidos del blog.

  5. /opt/ui: Los archivos de la interfaz de usuario (UI) de Mastodon.

  6. /opt/audiobookshelf: Los audiolibros y la base de datos correspondiente.

Todo esto termina en un almacenamiento S3 montado a través de RClone.

La configuración de NixOS


{ config, pkgs, ... }:

{
  # Configuración de BorgBackup
  services.borgbackup.jobs.hourly = {
    # Ruta al repositorio en el montaje S3
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # No se requiere contraseña
    encryption.mode = "none";

    # Compresión para ahorrar aún más espacio
    compression = "auto,zstd";

    # Las rutas a respaldar
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Ejecución cada hora
    startAt = "hourly";

    # Inicializar el repositorio automáticamente si falta
    doInit = true;

    # Reglas de retención (Pruning)
    prune.keep = {
      within = "1d"; # Todos los snapshots de las últimas 24h
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Asegurar que el montaje S3 esté listo antes de que Borg se inicie
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}

He instalado mi propio blog, principalmente para conocer mejor #NixOS. Sorprendentemente, todo el proceso fue bastante sencillo.

WriteFreely es ideal para esto: minimalista, rápido de configurar y sin distracciones. Perfecto para empezar a escribir y aprender algo nuevo por el camino. La configuración es agradablemente clara. Un par de opciones ajustadas, el directorio preparado, un proxy inverso delante y listo.

Así es como se ve mi configuración actual de NixOS para ello:

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

  # Solución para la generación de claves ActivityPub: la federación requiere openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Creación automática del directorio de datos con los permisos correctos
  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}
    }
  '';
}

Eso es básicamente todo. NixOS hace que sea realmente fácil configurar este tipo de servicios de forma limpia y mantenerlos reproducibles.