Mudei agora o backup do meu servidor doméstico NixOS e, em vez de um simples script diário, passei para uma frequência horária. Não é tão elegante quanto na instância de Mastodon que o meu amigo administra – lá temos um snapshot ZFS a cada 20 minutos – mas estou satisfeito com esta solução. E devo dizer que o NixOS me agrada cada vez mais. Sem IA, no entanto, seria muito complicado para eu entender, mas agora já consigo, pelo menos, ler os arquivos Nix prontos. Cheguei a pensar em mudar o servidor para um Linux normal, mas enquanto isso funcionar tão bem...

  1. /etc/nixos: Toda a configuração do NixOS (todos os arquivos .nix).

  2. /opt/minecraft: Todos os mundos e dados do servidor de Minecraft.

  3. /opt/satisfactory: Jogos salvos e configuração do servidor de Satisfactory.

  4. /opt/Blog: O código-fonte e os conteúdos do blog.

  5. /opt/ui: Os arquivos da interface (UI) do Mastodon.

  6. /opt/audiobookshelf: Os audiolivros e o banco de dados correspondente.

Tudo isso vai parar em um armazenamento S3 montado via RClone.

A configuração do NixOS


{ config, pkgs, ... }:

{
  # Configuração do BorgBackup
  services.borgbackup.jobs.hourly = {
    # Caminho para o repositório no mount S3
    repo = "/opt/S3/Backup/NixOSHomeServer_Borg";

    # Nenhuma senha necessária
    encryption.mode = "none";

    # Compressão para economizar ainda mais espaço
    compression = "auto,zstd";

    # Os caminhos para backup
    paths = [
      "/etc/nixos"
      "/opt/minecraft"
      "/opt/satisfactory"
      "/opt/Blog"
      "/opt/ui"
      "/opt/audiobookshelf"
    ];

    # Execução horária
    startAt = "hourly";

    # Inicializar o repositório automaticamente, caso falte
    doInit = true;

    # Regras de retenção (Pruning)
    prune.keep = {
      within = "1d"; # Todos os snapshots das últimas 24h
      daily = 7;
      weekly = 4;
      monthly = 12;
    };
  };

  # Garantir que o mount S3 esteja pronto antes do Borg iniciar
  systemd.services.borgbackup-job-hourly = {
    requires = [ "rclone-s3-mount.service" ];
    after = [ "rclone-s3-mount.service" ];
  };
}