{ config, self, ... }: { imports = [ self.inputs.clan-core.clanModules.borgbackup ]; # 100GB storagebox is under the nix-community hetzner account clan.borgbackup.destinations.${config.networking.hostName} = { repo = "u366395@u366395.your-storagebox.de:/./borgbackup"; rsh = "ssh -oPort=23 -i ${config.clan.core.facts.services.borgbackup.secret."borgbackup.ssh".path}"; }; clan.core.state.system.folders = [ "/home" "/etc" "/var" "/root" ]; services.borgbackup.jobs.${config.networking.hostName} = { exclude = [ "*.pyc" "/home/*/.direnv" "/home/*/.cache" "/home/*/.cargo" "/home/*/.npm" "/home/*/.m2" "/home/*/.gradle" "/home/*/.opam" "/home/*/.clangd" "/var/lib/containerd" # already included in database backup "/var/lib/postgresql" # not so important "/var/lib/docker/" "/var/log/journal" "/var/cache" "/var/tmp" "/var/log" ]; # Disaster recovery: # get the backup passphrase and ssh key from the sops and store them in /tmp # $ export BORG_PASSCOMMAND='cat /tmp/hetzner-borgbackup-passphrase' # $ export BORG_REPO='u359378@u359378.your-storagebox.de:/./borgbackup' # $ export BORG_RSH='ssh -oPort=23 -i /tmp/hetzner-borgbackup-ssh' # $ borg list # web01-clan-lol-2023-07-21T14:12:22 Fri, 2023-07-21 14:12:27 [539b1037669ffd0d3f50020f439bbe2881b7234910e405eafc333125383351bc] # $ borg mount u359378@u359378.your-storagebox.de:/./borgbackup::web01-clan-lol-2023-07-21T14:12:22 /tmp/backup # Also enable ssh support in the storagebox web interface. # By default the storage box is only accessible from the hetzner network. # $ clan facts generate # $ clan facts list web01 | jq .borgbackup.ssh.pub | ssh -p23 u359378@u359378.your-storagebox.de install-ssh-key preHook = '' set -x ''; postHook = '' cat > /var/log/telegraf/borgbackup-clan-lol <