From 50ce3e9d8eaf96975952cda8052500138b2d2796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Gro=C3=9Fmann?= Date: Mon, 22 Jan 2024 01:15:50 +0100 Subject: [PATCH] feat: immich backups --- .../immich/generated/immichHetznerSsh.age | 18 ++++++++ .../secrets/immich/generated/resticpasswd.age | 15 +++++++ modules/services/immich.nix | 39 ++++++++++++++++++ secrets/secrets.nix.age | Bin 5036 -> 5169 bytes 4 files changed, 72 insertions(+) create mode 100644 hosts/elisabeth/secrets/immich/generated/immichHetznerSsh.age create mode 100644 hosts/elisabeth/secrets/immich/generated/resticpasswd.age diff --git a/hosts/elisabeth/secrets/immich/generated/immichHetznerSsh.age b/hosts/elisabeth/secrets/immich/generated/immichHetznerSsh.age new file mode 100644 index 0000000..a35f1f8 --- /dev/null +++ b/hosts/elisabeth/secrets/immich/generated/immichHetznerSsh.age @@ -0,0 +1,18 @@ +age-encryption.org/v1 +-> X25519 WB1xLsDy77zdrPl9eUQ0p3SB1GyhaLb5RVHC2xLeh2U +CLCt7Ft9zw0sVN5xmnz5IdGJYj2n60u9G0Mw7yhlp1Y +-> piv-p256 XTQkUA ArpAo5Lw+iL+JGsI1YhkRyV/Mf5aNbFzw4vbzKDRRKhP ++7OPvZxHU8JmdyfR8DVrhPpmp1WqkqhGuI+zNUwURzc +-> piv-p256 ZFgiIw AwihFvG6Qtg+GdQH1diMas21FrrnLdcLVFFIWrg9LoHv +pnqnXdeiazBwe/WLIRCjzB6sInrH1PF8yFdz7omqS70 +-> piv-p256 5vmPtQ A6eL3RiHO5GPIHYkc8FLap+wJMr6RWKFCUiLfvTbmJRd +d6Mfa5eJa76cLocePgTzp26b/w5B/S7EAqPniKMnxZ8 +-> piv-p256 ZFgiIw AgXMXffPLAIrCJeTYA4kknA84KJfEYZOSjI4tPoMRsfo +LdYKnUoQdY7JCpuq20S1e9xWS6X9IyMZvEQqfc6HJdc +-> @ao.u7t]-grease +sXjdduaavhXpG1XbPlM28CVJyDyVlT0SWY4xi2qgNK9L2W4aAeQ192bzhMAR2iY3 +jWHPGApnULPsA8vjoskwrC8 +--- me+7MliHVc3ogEKqFM7z0MUl/PyOJ+NiAjxrAVFHH5Q +Sb27zKħ +j GcڟC"Pve"RUr/IJ#㭚|8i ?MTsO0 cM߁Cn|cӚG֝w֮Gݎ9/O}VrDQKnx;2d`^a⫲aZ!*'baG6vLW>`6 cUB: 'Q 2<uH RQ&J~^}-(sw|Ώ.0%v|N*B,KAn,LHbi7iOMXUk4YHv \x^gҖ,A{IpnҔcEW[y:SW'xrLE9i=oPO23 +S9[jr]'|) ڇw EV1L[7R:Nޡ-/'|ctrXB(f3$g \ No newline at end of file diff --git a/hosts/elisabeth/secrets/immich/generated/resticpasswd.age b/hosts/elisabeth/secrets/immich/generated/resticpasswd.age new file mode 100644 index 0000000..3325324 --- /dev/null +++ b/hosts/elisabeth/secrets/immich/generated/resticpasswd.age @@ -0,0 +1,15 @@ +age-encryption.org/v1 +-> X25519 4tPfPyE54oSMuhqmfrTTCJQdCJAzryGgdmjBr04yzkA +wsvnurkIbkDSIE6ZQdP0jtPn8hYxvNm/p1Jettzcf3Q +-> piv-p256 XTQkUA AsBlQ0gJ2gKWhMEbxRLXPJ9RmaK6ufETgfrq3fnJxbGT +L7gXAPRHn5GG94JXZCPhr6MH2tZMDLTs+ac+Zzm7ZRI +-> piv-p256 ZFgiIw A60jY/C+OJzW2wD343YUMiONDhUhIs1rBAutn8ai0xmx +od/edlvok9J0IjzeTkRanm6udkzvN9v2SGSU3d+uk6c +-> piv-p256 5vmPtQ AwUMrlxQ5uKe/YwIcBaypG+DnyrGZVmkaafRGqwAKBbS +KvrODcNRDmvZhk0KUh0WwyP4XUoCq/rWPwemBrKkKog +-> piv-p256 ZFgiIw AwN8CB3pEUeOcPPJIArgo3y0K7SZTiOlaK69257RSaph +GDIXUvPrBDG2hQ9uvPYj9Lb4eDW30lTI9PNBCVLbmkQ +-> \v~O9~-grease +xw +--- cTlXPGvRSzDL4DQlGTkX5VQZ/84vqMvIW3cEh0TIOdM +X"&bm&Je2O@YkyL⋘Q6@o&hqhؖ%u }YeT5y5 \ No newline at end of file diff --git a/modules/services/immich.nix b/modules/services/immich.nix index 1e3df4c..aeddfb3 100644 --- a/modules/services/immich.nix +++ b/modules/services/immich.nix @@ -46,6 +46,45 @@ ]; }; in { + age.secrets.resticpasswd = { + generator.script = "alnum"; + }; + age.secrets.immichHetznerSsh = { + generator.script = "ssh-ed25519"; + }; + services.restic.backups = { + main = { + user = "root"; + timerConfig = { + OnCalendar = "06:00"; + Persistent = true; + RandomizedDelaySec = "3h"; + }; + initialize = true; + passwordFile = config.age.secrets.resticpasswd.path; + hetznerStorageBox = { + enable = true; + inherit (config.secrets.secrets.global.hetzner) mainUser; + inherit (config.secrets.secrets.global.hetzner.users.immich) subUid path; + sshAgeSecret = "immichHetznerSsh"; + }; + backupPrepareCommand = '' + ${pkgs.podman}/bin/podman exec -t immich_postgres pg_dumpall -c -U postgres > /run/immich_dump.sql + ''; + paths = [ + "${upload_folder}/library" + "${upload_folder}/upload" + "${upload_folder}/profile" + "/run/immich_dump.sql" + ]; + pruneOpts = [ + "--keep-daily 10" + "--keep-weekly 7" + "--keep-monthly 12" + "--keep-yearly 75" + ]; + }; + }; microvm = { mem = 1024 * 8; vcpu = 12; diff --git a/secrets/secrets.nix.age b/secrets/secrets.nix.age index d4e15b286bf58345fcd86397c7268c627a45283b..96f06fdf0d1d734fab435e5e0203f277c14186f6 100644 GIT binary patch delta 5167 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 delta 5033 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