feat: droppie backups for all nachtigall services

This commit is contained in:
Benjamin Bädorf 2023-11-05 22:54:09 +01:00 committed by b12f
parent e7c70c6cd0
commit 42fbde31e5
Signed by: pub.solar gitea
GPG key ID: F0332B04B7054873
11 changed files with 116 additions and 4 deletions

View file

@ -107,4 +107,17 @@
environment.variables = { environment.variables = {
GPG_TTY = "$(tty)"; GPG_TTY = "$(tty)";
}; };
services.restic.backups.forgejo = flake.self.lib.droppieBackup {
paths = [
"/var/lib/forgejo"
"/tmp/forgejo-backup.sql"
];
backupPrepareCommand = ''
${pkgs.sudo}/bin/sudo -iu postgres ${pkgs.postgresql}/bin/pg_dump -d gitea > /tmp/forgejo-backup.sql
'';
backupCleanupCommand = ''
rm /tmp/forgejo-backup.sql
'';
};
} }

View file

@ -46,4 +46,16 @@
"pub.solar" = flake.inputs.keycloak-theme-pub-solar.legacyPackages.${pkgs.system}.keycloak-theme-pub-solar; "pub.solar" = flake.inputs.keycloak-theme-pub-solar.legacyPackages.${pkgs.system}.keycloak-theme-pub-solar;
}; };
}; };
services.restic.backups.keycloak = flake.self.lib.droppieBackup {
paths = [
"/tmp/keycloak-backup.sql"
];
backupPrepareCommand = ''
${pkgs.sudo}/bin/sudo -iu postgres ${pkgs.postgresql}/bin/pg_dump -d keycloak > /tmp/keycloak-backup.sql
'';
backupCleanupCommand = ''
rm /tmp/keycloak-backup.sql
'';
};
} }

View file

@ -79,4 +79,12 @@
# "allauth.socialaccount.providers.gitlab" # "allauth.socialaccount.providers.gitlab"
# ]) # ])
#''; #'';
services.restic.backups.mailman = flake.self.lib.droppieBackup {
paths = [
"/var/lib/mailman"
"/var/lib/mailman-web/mailman-web.db"
"/var/lib/postfix/conf/aliases.db"
];
};
} }

View file

@ -1,6 +1,10 @@
{ config, pkgs, flake, inputs, ... }:
{ {
config,
pkgs,
flake,
inputs,
...
}: {
age.secrets."mastodon-secret-key-base" = { age.secrets."mastodon-secret-key-base" = {
file = "${flake.self}/secrets/mastodon-secret-key-base.age"; file = "${flake.self}/secrets/mastodon-secret-key-base.age";
mode = "400"; mode = "400";
@ -93,4 +97,16 @@
OMNIAUTH_ONLY = "true"; OMNIAUTH_ONLY = "true";
}; };
}; };
services.restic.backups.mastodon = flake.self.lib.droppieBackup {
paths = [
"/tmp/mastodon-backup.sql"
];
backupPrepareCommand = ''
${pkgs.sudo}/bin/sudo -iu postgres ${pkgs.postgresql}/bin/pg_dump -d gitea > /tmp/mastodon-backup.sql
'';
backupCleanupCommand = ''
rm /tmp/mastodon-backup.sql
'';
};
} }

View file

@ -3,8 +3,7 @@
pkgs, pkgs,
flake, flake,
... ...
}: }: {
{
age.secrets."nextcloud-secrets" = { age.secrets."nextcloud-secrets" = {
file = "${flake.self}/secrets/nextcloud-secrets.age"; file = "${flake.self}/secrets/nextcloud-secrets.age";
mode = "400"; mode = "400";
@ -130,4 +129,17 @@
autoUpdateApps.enable = true; autoUpdateApps.enable = true;
database.createLocally = true; database.createLocally = true;
}; };
services.restic.backups.nextcloud = flake.self.lib.droppieBackup {
paths = [
"/var/lib/nextcloud/data"
"/tmp/nextcloud-backup.sql"
];
backupPrepareCommand = ''
${pkgs.sudo}/bin/sudo -iu postgres ${pkgs.postgresql}/bin/pg_dump -d nextcloud > /tmp/nextcloud-backup.sql
'';
backupCleanupCommand = ''
rm /tmp/nextcloud-backup.sql
'';
};
} }

View file

@ -0,0 +1,7 @@
{ flake, ... }: {
age.secrets."restic-repo-droppie" = {
file = "${flake.self}/secrets/restic-repo-droppie.age";
mode = "400";
owner = "root";
};
}

View file

@ -7,6 +7,7 @@
./configuration.nix ./configuration.nix
./networking.nix ./networking.nix
./backups.nix
./apps/nginx.nix ./apps/nginx.nix
./apps/collabora.nix ./apps/collabora.nix

View file

@ -11,6 +11,10 @@
## In configs, they can be used under "lib.our" ## In configs, they can be used under "lib.our"
deploy = import ./deploy.nix { inherit inputs lib; }; deploy = import ./deploy.nix { inherit inputs lib; };
linux = {
unlockZFSOnBoot = import ./unlock-zfs-on-boot.nix {publicKeys = self.publicKeys.allAdmins;};
};
}; };
}; };
} }

10
lib/droppie-backup.nix Normal file
View file

@ -0,0 +1,10 @@
{ config, ... }: extraOptions: {
timerConfig = {
OnCalendar = "*-*-* 02:00:00 Etc/UTC";
# droppie will be offline if nachtigall misses the timer
Persistent = false;
};
initialize = true;
passwordFile = config.age.secrets."restic-repo-droppie".path;
repository = "yule@droppie.b12f.io:/media/internal/backups-pub-solar";
} // extraOptions

View file

@ -0,0 +1,27 @@
age-encryption.org/v1
-> ssh-ed25519 iDKjwg T5uxRdAUm+mxC5VdLsJcvA7BolM8l0cofI8V6fEUEBE
dCpeg4SheN/krKGe72jHNbdul3Lvy/AwG3dq4pY/AkM
-> ssh-ed25519 uYcDNw PGHCygBqKuORMouxi/JHzzRPeM2ON+YMOYV9E1vX+Vo
F7yp4gLrEEj4BCYwsDl2LPCCRUtbDfZ/AzAAhah4+dA
-> ssh-rsa kFDS0A
lQLfw3v75CzhrS7WyHPwU+Cm+vwrlCg7hhfKGb7J67elxh21GG/6qaZfRwWL11zc
P6G3Gt//92qBwrRuWN+G7fuhThTuEsHsqqpA8JOnNIgwfk8rNN2kTj8XbkIE7Uq8
R5ZQplV7QTtWZ0CGBl4lu4d6cf3zdFZJw6VaDoqNmC6WjwEGw4T6maZqlEmtsEra
i1LYssPXAFbeYxa1wsD/B9pI05WrGbgpBuEpybb+9v3O+u57bLAFAC1NCsj0OKNz
+7HJe5jaC5yntOjitrIrG7hIemOR5oPn5rX4+gyhEOzGud4IyMmMRKw8+1lsSqEJ
88BLgtO1LZ+K7XA4T4uhMNzJNlibo8uhPZVcpuOHAM2mb77kyOEEnGBTewT17Wyg
pJUIigTd8RHQmhQoyRM/EwbX15fSHmjrqwppCpQmTCNDdj+BhdfjaE8nRSJzBWDa
1C4tzxEoCAwCdowdS5Dh8Ho73JCbZr0GGpZgEoKhZJtPW/is9LCYKUIn/RQCfWvS
J9rQIGBJt3e0zNz2l+/cab0Z7z5nrfN8WJUYRWe/LJ4w2UbhTp8Qo9c5kKmP0qJg
cej2+H/v3o1KNdXdumUgmL9XeKTJeFQ1XIAbNzWa2eziLAigeg1fPraPpxLm6vfm
JBOB7xuATiOegs1KxnZh3GI6tO9GRaN1GOGMj6Vw/yc
-> ssh-ed25519 YFSOsg fO1nyrzWiiDBKUsi5WVZs6gj0oj8AnCDgzT45RuTaEI
zLBD5W/Ab8afsUGjBk2DHGYnwYca11FWRubaHPQqu0w
-> ssh-ed25519 iHV63A LEq9h44BkYmAt3ABHka7EdfZVQ7VGbU81SApWQ4O0TA
kqOs+WIAQKQdCEyDSHF0+1TU6W0d9Nk5uMzpw1X9tE8
-> ssh-ed25519 BVsyTA 15QuQEzMBnFLOQ1VXYc/bhXPClbNY27WUxVi/PKdrg4
k5J8BnC0ltep+Unjvc9rbsTAERAAwHVBx3Le1Uw3i7k
-> fz6"|e\K-grease ~A 1vo}k)X ;M<?)N(
Vk3qpd1xFZX7MJ9C7gYW
--- 7AC9JN+pNedtCrkbAxsME8f/pDqsGJf9a6hA5YvILhU
ËeÉ#&8áäÞ çgNȺœ9è·ìEùÄhItDq&§j06nðË1ÇF/&Â6(óH|B<>¥ù^Y}Œ;8š·fHaVc_¢Ä~^_ÛÇ Ø†m9sŽ-

View file

@ -43,4 +43,6 @@ in {
"nextcloud-admin-pass.age".publicKeys = nachtigallKeys ++ baseKeys; "nextcloud-admin-pass.age".publicKeys = nachtigallKeys ++ baseKeys;
"searx-environment.age".publicKeys = nachtigallKeys ++ baseKeys; "searx-environment.age".publicKeys = nachtigallKeys ++ baseKeys;
"restic-repo-droppie.age".publicKeys = nachtigallKeys ++ baseKeys;
} }