add offsite backup support to borg
This commit is contained in:
@@ -31,6 +31,21 @@ in {
|
|||||||
default = "/holocron/archives/homelab";
|
default = "/holocron/archives/homelab";
|
||||||
description = "path to take daily backups to with borg!";
|
description = "path to take daily backups to with borg!";
|
||||||
};
|
};
|
||||||
|
offsite_user = lib.mkOption {
|
||||||
|
type = lib.types.path;
|
||||||
|
default = "lifeboat";
|
||||||
|
description = "user to connect to offsite host with";
|
||||||
|
};
|
||||||
|
offsite_target = lib.mkOption {
|
||||||
|
type = lib.types.path;
|
||||||
|
default = "/holocron/archives/homelab";
|
||||||
|
description = "ip or domain for offsite backups";
|
||||||
|
};
|
||||||
|
offsite_dir = lib.mkOption {
|
||||||
|
type = lib.types.path;
|
||||||
|
default = "blake/archives/homelab";
|
||||||
|
description = "path to rsync offsite backups to";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = lib.mkIf cfg.enable {
|
config = lib.mkIf cfg.enable {
|
||||||
@@ -48,6 +63,13 @@ in {
|
|||||||
systemctl start mysql-backup.service
|
systemctl start mysql-backup.service
|
||||||
systemctl start $(systemctl list-unit-files 'postgresqlBackup-*.service' --no-legend --no-pager | cut -d' ' -f1)
|
systemctl start $(systemctl list-unit-files 'postgresqlBackup-*.service' --no-legend --no-pager | cut -d' ' -f1)
|
||||||
'';
|
'';
|
||||||
|
postHook = ''
|
||||||
|
sshpass -f ${sec."lifeboat_rsync".path} \
|
||||||
|
rsync -aHAX --partial --numeric-ids --info=progress2,name1,stats2 \
|
||||||
|
-e ssh \
|
||||||
|
${cfg.backup_repo} \
|
||||||
|
${cfg.offsite_user}@${cfg.offsite_taget}::${cfg.offsite_dir}
|
||||||
|
'';
|
||||||
extraArgs = ["--verbose" "--show-rc" "--umask" "0007"];
|
extraArgs = ["--verbose" "--show-rc" "--umask" "0007"];
|
||||||
extraCreateArgs = ["--list" "--stats" "--filter" "AME"];
|
extraCreateArgs = ["--list" "--stats" "--filter" "AME"];
|
||||||
prune.keep = {
|
prune.keep = {
|
||||||
@@ -77,13 +99,17 @@ in {
|
|||||||
};
|
};
|
||||||
|
|
||||||
# helpful and for scripts
|
# helpful and for scripts
|
||||||
environment.systemPackages = with pkgs; [borgbackup tree];
|
environment.systemPackages = with pkgs; [borgbackup sshpass tree];
|
||||||
|
|
||||||
sops.secrets = {
|
sops.secrets = {
|
||||||
"borg_passwd" = {
|
"borg_passwd" = {
|
||||||
owner = "root";
|
owner = "root";
|
||||||
group = "root";
|
group = "root";
|
||||||
};
|
};
|
||||||
|
"lifeboat_rsync" = {
|
||||||
|
owner = "root";
|
||||||
|
group = "archives";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ klefki_auth_map: ENC[AES256_GCM,data:u8OBLtT/,iv:THW21BDyhyFIjcwixsAnaAODofxbuQZ
|
|||||||
tailscale_authkey: ENC[AES256_GCM,data:SqBbzV43arnLJZX0bnCZZGqO3jAKXBPZvIe6lqtf8L8RtqVNPvhxzeHR3Nki5LoSd7f3Za01puBAwpZY2QQ=,iv:f3jNCmrQrWsD2cvB6Ji8H0Ez/kpZ+4K9NIEhGfKU/N4=,tag:ej1gW8fBhAd9j53G7g8/HA==,type:str]
|
tailscale_authkey: ENC[AES256_GCM,data:SqBbzV43arnLJZX0bnCZZGqO3jAKXBPZvIe6lqtf8L8RtqVNPvhxzeHR3Nki5LoSd7f3Za01puBAwpZY2QQ=,iv:f3jNCmrQrWsD2cvB6Ji8H0Ez/kpZ+4K9NIEhGfKU/N4=,tag:ej1gW8fBhAd9j53G7g8/HA==,type:str]
|
||||||
#ENC[AES256_GCM,data:bEbCic+ZDAA5ieNedCbiVbJrse17,iv:UwRYlis6NPB/RUcv+YnPxrGdbIcF4hrNiZt19YvWZNQ=,tag:m6PVlzPNnahX7X7KzMUj7A==,type:comment]
|
#ENC[AES256_GCM,data:bEbCic+ZDAA5ieNedCbiVbJrse17,iv:UwRYlis6NPB/RUcv+YnPxrGdbIcF4hrNiZt19YvWZNQ=,tag:m6PVlzPNnahX7X7KzMUj7A==,type:comment]
|
||||||
borg_passwd: ENC[AES256_GCM,data:XOMJtr+DRs7xn5Iclc49iTzK9cFJyc/fSXJjhdKa9jdN,iv:YB8z7zNYjh6NpSxQb1TfPxAYUdzThdVfNZIe6tO5grA=,tag:bO6kZ3cLJDL4IQoWmGvRdg==,type:str]
|
borg_passwd: ENC[AES256_GCM,data:XOMJtr+DRs7xn5Iclc49iTzK9cFJyc/fSXJjhdKa9jdN,iv:YB8z7zNYjh6NpSxQb1TfPxAYUdzThdVfNZIe6tO5grA=,tag:bO6kZ3cLJDL4IQoWmGvRdg==,type:str]
|
||||||
|
#ENC[AES256_GCM,data:b75Jb5eEKZQlzC6zYJhDNhOOwA4oetNp52J7kE7eCpA=,iv:yNq/pYLtzVfqItBG9peGd0NtL7PkVkaKI8jpzAbWUo0=,tag:suibUsiuNkxrQqWumHTbXA==,type:comment]
|
||||||
|
lifeboat_rsync: ENC[AES256_GCM,data:70R6bKLh21x9LjLE76o=,iv:jqAPg0TJ/CqxaCf8fqt8u+YN3JEzxhjJ+zb41Um7qF4=,tag:riDGORM6q0qXRHzB0JbXPg==,type:str]
|
||||||
#ENC[AES256_GCM,data:NbXyRroLF2uxHjROnBg9OLQ=,iv:W9Nse9yamov3rflDKBeISO+miQkjH7QfBUZdsDmDM4I=,tag:/RmH3JyriXFxf0hEh9/iRQ==,type:comment]
|
#ENC[AES256_GCM,data:NbXyRroLF2uxHjROnBg9OLQ=,iv:W9Nse9yamov3rflDKBeISO+miQkjH7QfBUZdsDmDM4I=,tag:/RmH3JyriXFxf0hEh9/iRQ==,type:comment]
|
||||||
cloudflare:
|
cloudflare:
|
||||||
api_token: ENC[AES256_GCM,data:VuRwfZe1cdnQLvxlp9GCDOt9Ijhz4fh2yOev2wLOdLV+zw91blA3Zis2BRyI/ZwN4y+IhiqlpBzXCsoFqw==,iv:6Bt11zz1/slvszh9ZGQ0ov5ts0jAZIAMx3G2AimKIs4=,tag:tyEVhsKCGrJWm6yn+GUlUQ==,type:str]
|
api_token: ENC[AES256_GCM,data:VuRwfZe1cdnQLvxlp9GCDOt9Ijhz4fh2yOev2wLOdLV+zw91blA3Zis2BRyI/ZwN4y+IhiqlpBzXCsoFqw==,iv:6Bt11zz1/slvszh9ZGQ0ov5ts0jAZIAMx3G2AimKIs4=,tag:tyEVhsKCGrJWm6yn+GUlUQ==,type:str]
|
||||||
@@ -81,7 +83,7 @@ sops:
|
|||||||
PRu+itNolpPTHm96pe+P93g2iP0wgekG0cX21wkiU2xaLF3dY2FEIA==
|
PRu+itNolpPTHm96pe+P93g2iP0wgekG0cX21wkiU2xaLF3dY2FEIA==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age14gfh682a7m7jfp3qrulql03x5rs7yedwmxwksxrrmgjsunstyuksqx93pz
|
recipient: age14gfh682a7m7jfp3qrulql03x5rs7yedwmxwksxrrmgjsunstyuksqx93pz
|
||||||
lastmodified: "2026-06-13T02:51:58Z"
|
lastmodified: "2026-06-19T23:50:30Z"
|
||||||
mac: ENC[AES256_GCM,data:0UOZP1Tm52GgZsi7wUowoYKtno6tSTj2AK0lyB4ZzfpFq2RRloAxaMDVtykm/VLtHEm1sQKe7il0oyvPoiQ4ZFcOCX+rr+C0lSTdtw55X029H1dndL+wCeRo9P/qrDlq1scYt/RABspMwB6ZXPRdGD/oaWtAnj9aAOMad0Bz9SI=,iv:QDobOe+JGN5RJpRz1+9z1WEfd1Ph4C19QfR4z611Kn0=,tag:ULYYshFR8MronGNE3wxT0A==,type:str]
|
mac: ENC[AES256_GCM,data:SchZtSlesZv0ee/peEXq5dTA0/DsSP9RxBAq/N9QHgqzHr/kj71vvGmZ+cM6QzX0UL/wOXwlNQHt0ougk3mZ21/+gHid5PDFz8uDxLPAxxNg0jXhqTFEJYcPn77CS6RiRgbzWV8KaktcNENTdSTSoNHKNNaJVSexh19WlWZSAI0=,iv:wzNECxd5L26CChou6bCQ+sZCVtKAuCWtsE9BeWf9cNA=,tag:JtdnZsHa0wWrxSUfmFaD5Q==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.13.1
|
version: 3.13.1
|
||||||
|
|||||||
Reference in New Issue
Block a user