egirls-nixos/backup.nix

66 lines
1.7 KiB
Nix
Raw Normal View History

2024-12-20 03:09:51 +00:00
{ config, pkgs, ... }:
2024-12-20 03:40:52 +00:00
#necessary prep work:
# GRANT CONNECT ON DATABASE misskey TO "misskey-backup";
# GRANT SELECT ON ALL TABLES IN SCHEMA public TO "misskey-backup";
# GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO "misskey-backup";
#
# TODO: automate this cause it needs to be done whenever db schema changes
2024-12-20 03:09:51 +00:00
let
user = "misskey-backup";
group = user;
# shell script file to be sourced. must have values "MISSKEY_BACKUP_BUCKET" "MISSKEY_BACKUP_PREFIX" and "S3CFG"
2024-12-20 03:40:52 +00:00
# $S3CFG must be a path to a .s3cfg file compatible with s3cmd
backupConfigFile = "/etc/misskey-backup/conf";
2024-12-20 03:09:51 +00:00
backupScript = pkgs.writeShellApplication {
name = "misskey-backup";
runtimeInputs = with pkgs; [
gzip
config.services.postgresql.package
s3cmd
coreutils
2024-12-25 05:40:17 +00:00
mktemp
2024-12-20 03:09:51 +00:00
];
2024-12-20 03:33:47 +00:00
excludeShellChecks = [ "SC1091" ];
2024-12-20 03:09:51 +00:00
text = ''
source "${backupConfigFile}"
2024-12-25 05:40:17 +00:00
dir="$(mktemp --directory)"
echo "Using temp dir '$dir'"
trap EXIT "rm -rf '$dir'"
echo "Copying config"
cp /srv/misskey/.config "$dir/config" -r
echo "Dumping postgres database..."
pg_dump misskey | gzip > "$dir/postgres.sql.gz"
echo "Copying redis database..."
cp /var/lib/redis-misskey "$dir/redis" -r
tar -cz -C "$dir" . | \
s3cmd put --config "$S3CFG" - "s3://$MISSKEY_BACKUP_BUCKET/\$\{MISSKEY_BACKUP_PREFIX}misskey-$(date --iso-8601).tar.gz"
2024-12-20 03:09:51 +00:00
'';
};
in {
users.users."${user}" = {
isSystemUser = true;
inherit group;
};
users.groups."${group}" = { };
services.postgresql.ensureUsers = [{ name = user; }];
services.cron = {
enable = true;
systemCronJobs = [
# run every monday at ass in the morning, EST"
"0 8 0 0 1 ${user} ${backupScript}"
];
};
}