Migrate to rsnapshot for backups

This commit is contained in:
Greg Hellings
2024-11-23 00:48:32 -06:00
parent d02bb990dd
commit fc1ec06120
5 changed files with 31 additions and 28 deletions
+2 -2
View File
@@ -132,12 +132,12 @@
greg.backup.jobs.zwave = { greg.backup.jobs.zwave = {
src = "/var/lib/zwave"; src = "/var/lib/zwave";
dest = "zwave"; dest = "zwave";
id = "zwave-asdf"; id = "zwave-rsnap";
}; };
greg.backup.jobs.hass-backup = { greg.backup.jobs.hass-backup = {
src = "/var/lib/hass"; src = "/var/lib/hass";
dest = "hass"; dest = "hass";
id = "hass-asdf"; id = "hass-rsnap";
}; };
} }
+1 -9
View File
@@ -66,18 +66,10 @@ in
virtualisation.docker.enable = true; virtualisation.docker.enable = true;
programs.ssh.extraConfig = lib.strings.concatStringsSep "\n" [
"Host nas"
" User backup"
" IdentityFile /etc/ssh/duplicity_ed25519"
" StrictHostKeyChecking no"
" UserKnownHostsFile /dev/null"
];
greg.backup.jobs.nas-backup = { greg.backup.jobs.nas-backup = {
src = "/var/gitlab/state/backup/"; src = "/var/gitlab/state/backup/";
dest = "gitlab"; dest = "gitlab";
id = "yha^-s45h"; id = "container-gitlab";
}; };
services = { services = {
+1 -1
View File
@@ -33,6 +33,6 @@
greg.backup.jobs.nextcloud-bkup = { greg.backup.jobs.nextcloud-bkup = {
src = "/var/lib/nextcloud"; src = "/var/lib/nextcloud";
dest = "nextcloud-backup"; dest = "nextcloud-backup";
id = "rbfco-rvmis"; id = "nextcloud-backup";
}; };
} }
+1 -1
View File
@@ -54,6 +54,6 @@
greg.backup.jobs.greg-postgresql-backup = { greg.backup.jobs.greg-postgresql-backup = {
src = config.services.postgresqlBackup.location; src = config.services.postgresqlBackup.location;
dest = "linode-postgres"; dest = "linode-postgres";
id = "9pwvg-s257a"; id = "linode-postgres";
}; };
} }
+26 -15
View File
@@ -8,7 +8,15 @@
let let
cfg = config.greg.backup; cfg = config.greg.backup;
where = j: "${config.services.syncthing.dataDir}/${j.dest}"; where = j: "${config.services.syncthing.dataDir}/daily.0/${j.dest}";
postexec = pkgs.writeShellApplication {
name = "postexec";
runtimeInputs = [ pkgs.coreutils ];
text = ''
chown -R ${config.services.syncthing.user} ${config.services.syncthing.dataDir}
'';
};
makeSyncFolders = _: job: { makeSyncFolders = _: job: {
devices = [ "chronicles" ]; devices = [ "chronicles" ];
@@ -19,19 +27,7 @@ let
type = "sendonly"; type = "sendonly";
}; };
makeRestic = makeRsnapshot = _: job: "backup ${job.src}/ ${job.dest}/";
_: job:
let
who = "${config.services.syncthing.user}:${config.services.syncthing.group}";
in
rec {
initialize = true;
passwordFile = config.age.secrets.restic-pw.path;
paths = [ job.src ];
repository = where job;
backupCleanupCommand = ''${pkgs.coreutils}/bin/chown -R ${who} "${repository}"'';
};
in in
with lib; with lib;
{ {
@@ -76,7 +72,22 @@ with lib;
}; };
services = { services = {
syncthing.settings.folders = mapAttrs makeSyncFolders cfg.jobs; syncthing.settings.folders = mapAttrs makeSyncFolders cfg.jobs;
restic.backups = mapAttrs makeRestic cfg.jobs; rsnapshot = {
enable = true;
enableManualRsnapshot = true;
extraConfig =
''
snapshot_root ${config.services.syncthing.dataDir}/
retain daily 7
retain weekly 2
cmd_postexec ${lib.getExe postexec}
''
+ (builtins.concatStringsSep "\n" (mapAttrsToList makeRsnapshot cfg.jobs));
cronIntervals = {
daily = "19 02 * * *"; # At 2:19 am every day
weekly = "19 01 * * 1"; # At 1:19 am every Monday
};
};
}; };
}; };
} }