This repository has no description
2.5 kB
85 lines
1{ config, pkgs, ... }:
2{
3 systemd.services.borgbackup-job-hetzner.serviceConfig.ReadWritePaths = [
4 "/var/log/telegraf"
5 ];
6
7 clan.core.vars.generators.borgbackup = {
8 files."borgbackup.ssh.id25519" = { };
9 files."borgbackup.ssh.id25519.pub".secret = false;
10 runtimeInputs = with pkgs; [
11 coreutils
12 openssh
13 ];
14 script = ''
15 ssh-keygen -t ed25519 -N "" -f $out/borgbackup.ssh.id25519
16 '';
17 };
18
19 # Ensure backup directory exists for pg_dump
20 systemd.tmpfiles.rules = [
21 "d /var/backup 0700 root root -"
22 "d /var/backup/postgresql 0700 root root -"
23 ];
24
25 services.borgbackup.jobs.hetzner = {
26 paths = [
27 "/var/backup"
28 "/var/lib/bitwarden_rs"
29 "/var/lib/htgen-cyberlocker"
30 "/var/lib/htgen-paste"
31 "/var/lib/matrix-synapse/media_store/local_content"
32 "/var/lib/radicale"
33 "/home/bot"
34 "/var/vmail"
35 "/var/dkim"
36 ];
37 exclude = [
38 "*.pyc"
39 "/home/bot/.cache"
40 "/home/bot/.nix-defexpr"
41 "/home/bot/.nix-profile"
42 ];
43 repo = "u550643@u550643.your-storagebox.de:/./neoprism";
44 encryption.mode = "none";
45 compression = "auto,zstd";
46 startAt = "*-*-* 03:00:00";
47 environment.BORG_RSH =
48 let
49 knownHostsFile = pkgs.writeText "storagebox-known-hosts" ''
50 [u550643.your-storagebox.de]:23 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIICf9svRenC/PLKIL9nk6K/pxQgoiFC41wTNvoIncOxs
51 '';
52 in
53 "ssh -oPort=23 -oUserKnownHostsFile=${knownHostsFile} -i ${
54 config.clan.core.vars.generators.borgbackup.files."borgbackup.ssh.id25519".path
55 }";
56
57 readWritePaths = [
58 "/var/backup"
59 "/var/lib/hedgedoc"
60 ];
61
62 preHook = ''
63 set -x
64 # Dump matrix-synapse PostgreSQL database (14GB, compresses well)
65 ${pkgs.sudo}/bin/sudo -u postgres ${config.services.postgresql.package}/bin/pg_dump \
66 matrix-synapse | ${pkgs.gzip}/bin/gzip > /var/backup/postgresql/matrix-synapse.sql.gz
67
68 # Dump hedgedoc SQLite database (172MB) safely
69 ${pkgs.sqlite}/bin/sqlite3 /var/lib/hedgedoc/db.sqlite ".backup /var/backup/hedgedoc.sqlite"
70 '';
71
72 postHook = ''
73 cat > /var/log/telegraf/borgbackup-job-hetzner.service <<EOF
74 task,frequency=daily last_run=$(date +%s)i,state="$([[ $exitStatus == 0 ]] && echo ok || echo fail)"
75 EOF
76 '';
77
78 prune.keep = {
79 within = "1d";
80 daily = 7;
81 weekly = 4;
82 monthly = 0;
83 };
84 };
85}