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...
-
/etc/nixos: Toda a configuração do NixOS (todos os arquivos .nix). -
/opt/minecraft: Todos os mundos e dados do servidor de Minecraft. -
/opt/satisfactory: Jogos salvos e configuração do servidor de Satisfactory. -
/opt/Blog: O código-fonte e os conteúdos do blog. -
/opt/ui: Os arquivos da interface (UI) do Mastodon. -
/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" ];
};
}