Meu Blog // Arquivo Digital

Pensamentos, projetos e notas técnicas

Mostrar entradas com a tag: #nixos Mostrar tudo ×

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

Instalei o meu próprio blog — principalmente para conhecer melhor o #NixOS. Surpreendentemente, tudo correu de forma bastante simples.

O WriteFreely é ideal para isso: minimalista, rápido de configurar e sem excessos. Perfeito para começar logo e aprender algo pelo caminho. A configuração é agradavelmente clara. Definir algumas opções, preparar o diretório, colocar um reverse proxy à frente — e já está.

Aqui está a minha configuração atual do NixOS para o efeito:

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

  # Correção para a geração de chaves ActivityPub: a federação requer openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Criação automática do diretório de dados com as permissões corretas
  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}
    }
  '';
}

No essencial, é isto. O NixOS torna realmente fácil configurar este tipo de serviços de forma limpa e mantê-los reproduzíveis.