From 1930a1add1ec7f54b4fda602f2e7c173310a8eb3 Mon Sep 17 00:00:00 2001 From: teutat3s Date: Sun, 25 Aug 2024 03:45:53 +0200 Subject: [PATCH] mail: add backups to garage bucket + storagebox Restic backups to garage S3 bucket metronom-backups --- hosts/metronom/backups.nix | 28 ++++++++++--- hosts/metronom/default.nix | 2 +- modules/mail/default.nix | 16 +++++++ secrets/restic-repo-garage-metronom-env.age | 44 ++++++++++++++++++++ secrets/restic-repo-garage-metronom.age | 43 +++++++++++++++++++ secrets/restic-repo-storagebox.age | Bin 2467 -> 2576 bytes secrets/secrets.nix | 4 +- 7 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 secrets/restic-repo-garage-metronom-env.age create mode 100644 secrets/restic-repo-garage-metronom.age diff --git a/hosts/metronom/backups.nix b/hosts/metronom/backups.nix index c5bf79b..3d8443a 100644 --- a/hosts/metronom/backups.nix +++ b/hosts/metronom/backups.nix @@ -1,13 +1,29 @@ -{ flake, ... }: +{ config, flake, ... }: { - age.secrets."restic-repo-droppie" = { - file = "${flake.self}/secrets/restic-repo-droppie.age"; - mode = "400"; - owner = "root"; - }; age.secrets."restic-repo-storagebox" = { file = "${flake.self}/secrets/restic-repo-storagebox.age"; mode = "400"; owner = "root"; }; + age.secrets.restic-repo-garage-metronom = { + file = "${flake.self}/secrets/restic-repo-garage-metronom.age"; + mode = "400"; + owner = "root"; + }; + age.secrets.restic-repo-garage-metronom-env = { + file = "${flake.self}/secrets/restic-repo-garage-metronom-env.age"; + mode = "400"; + owner = "root"; + }; + + pub-solar-os.backups.repos.storagebox = { + passwordFile = config.age.secrets."restic-repo-storagebox".path; + repository = "sftp:u377325@u377325.your-storagebox.de:/backups"; + }; + + pub-solar-os.backups.repos.garage = { + passwordFile = config.age.secrets."restic-repo-garage-metronom".path; + environmentFile = config.age.secrets."restic-repo-garage-metronom-env".path; + repository = "s3:https://buckets.pub.solar/metronom-backups"; + }; } diff --git a/hosts/metronom/default.nix b/hosts/metronom/default.nix index a1699f1..581b151 100644 --- a/hosts/metronom/default.nix +++ b/hosts/metronom/default.nix @@ -7,6 +7,6 @@ ./networking.nix ./wireguard.nix - #./backups.nix + ./backups.nix ]; } diff --git a/modules/mail/default.nix b/modules/mail/default.nix index 9b28816..fd66baf 100644 --- a/modules/mail/default.nix +++ b/modules/mail/default.nix @@ -67,4 +67,20 @@ }; security.acme.acceptTerms = true; security.acme.defaults.email = "security@pub.solar"; + + pub-solar-os.backups.restic.mail = { + paths = [ + "/var/lib/vmail" + "/var/lib/dkim" + ]; + timerConfig = { + OnCalendar = "*-*-* 02:00:00 Etc/UTC"; + }; + initialize = true; + pruneOpts = [ + "--keep-daily 7" + "--keep-weekly 4" + "--keep-monthly 3" + ]; + }; } diff --git a/secrets/restic-repo-garage-metronom-env.age b/secrets/restic-repo-garage-metronom-env.age new file mode 100644 index 0000000..432b93a --- /dev/null +++ b/secrets/restic-repo-garage-metronom-env.age @@ -0,0 +1,44 @@ +age-encryption.org/v1 +-> ssh-ed25519 UE5Ceg rpN1FsYIOjsiqPAt3iwd6l3ZEDYNomnzcvgowqS1CAI +A5+KU6SOzcZzTQPkEPp1wN6bq9junwauKDPhM1eKi+8 +-> ssh-ed25519 uYcDNw V/zOsw5KmaQUm1YsnJExXJThypfsxOu/CS+EQ2np7RQ +vMGUU/OPOoWiyR70xsXarqWN/AgegeKgTz5lOPa04CI +-> ssh-rsa f5THog +Z3tZv8bK67z15PAp4RgMEi1Ph4y5IFBIVNHdhENVTt2zS2TnzTBoUSypjaioRlGj +YKYuUl7+sFys6QRHOWTrUM6CFF6KQo/hYR5bsFG01xE9xoG7e4V5x0ts6sFp0Xme +0nl8NBfjbORhKYyCEye6p/9EvPwJ7qpRrQt6TUpnShv9BLrZZpEyw9sy7dXS3Sjp +btXgkOiRmIJqkYLyZ3fZF2uDlOiCVVQn/m0Bii+t0vsp4ZoyvMyc/ho3pN8i2GUV +QvUPAWzps4LTIKUf/0IYpHV4adyEfXD09/L/ShPxXJjLrYpT+4JjJqzIg5Gutbyk +QRBP52GFqyt3V6M2yM9THvdk88hhczsIH37VGLmdPH+vHDG1LIabgf9rJk14+FmM +h7/TE7M4EG9YHG//zLVI4WaVf64G9Oxet4y80BhCF4kpILWRm108mpwwzPL48tR3 +VMkiX0NpP0iOe22vV6u5zzugHQYqMvR6dPtrc4yBNUPgHhOLf6GWDhX12y478o91 +ILUM08J0R0PCJhH+8LARfc7wx1fjoxeJq468sw6znHqcqbIh7WPxarKaiTbTA5bj +06oA4YHzFbV53AbiWNHcrKCNvLaGWOw+2vtXRg8UMmbbGr8icqbLMYl7qY9kS7he +wINMQgMKD79Q+V3AweMqLuIn1AyLpqwVmh9Qon3Wzdk +-> ssh-rsa kFDS0A +ZpHhJzIt2oAC5Z/xJabaunnhXCE5Ijx+Uq/s07uow2tpautkMhmP6SbdgR6zGLFV +QJMgHmDgOqybYLhaP6t8KCygmeT9DjOB47H7mmZ8yvWAitPXTpbJzlFUls6YH3Ei +C4lxsEoCjbH+znVTKFd4220Cb4GGvnMS7tXuAnQ9GFMAn/90LFBzYjbqSvkDyv/n +9Ej1Nya5r0RQg/BcTKvppr0sfdk1wCEE5jDrHAR4zMmofFxuFi7V85IcRdsrU8ij +JawhvCYGfDM6G1Yh6j8V4oaqo3gAqki0CYF5gXED42sfPrxXLV2qtYMRJSua9z0i +Zo3SgDa9WVQslqL0VZoDXn/KyDqUYWYsfsVY0kXrMezlN9+Jm77MFVWMdXNI31eG +EIAWMr0f6nsTuXV58lwXoijSLy9Ap45TPjbVbp7+1JkD2X543DuJD3ONiNq01gey +a7aGLS492IByZx0mw6sb9xpTt8jP6enH+ltqcE6gMsEcxwXfmagVKTxtNrK0izWm +g2GdcpGnVqioj42lchUJzNt/PtPqutaraEvo2oq2cw1zxCjY4zxdyNO1RdaFV71b +fFj2JJCm67GFHWdlqbAePTx2SvUoFt3a3N8DMNFKThGQN/1LwOaKEd25ZSTNEuwO +1exQgJfC2kxrfypEmQP/whSrk2kR13NW40bBHvrZgjo +-> piv-p256 vRzPNw Awtb8p5KgsKIBUumqHnVMgux3dRS478DdNpCENgG3frB +wcIPacn7KP7gl0Z5SvtoYK0pnIjWLwUB2UvVQdWJfso +-> piv-p256 zqq/iw AgAk66eJ/xs+PqwTBzazW4HfK8dawj/3jx5opFOaGLSj +xThgJOorp+YXS8DvaULIoszFubEfACcKSy+vwf9KMSA +-> ssh-ed25519 YFSOsg p+/PUojxwOxpfBfaDOfEHMOGS1oVCrl9dskXgo+gOGI +PPYr0WVPDwRiFGo14Mx+Wv+gkZ91S7CKyYslGjCI/lQ +-> ssh-ed25519 iHV63A iXr8vgW9lHnX+rX/E9/NrKNbF+LyRpe0M44P0IxaBHo +/odvSKNzyS8ondJ0Tcuiry09NM4ozFn2qeVMqRgR17w +-> ssh-ed25519 BVsyTA CgGBOj8nDcfP7GBIMnFV89WF1CAoiOFbA/dUOWggmVE +V4CUV5WZbVTPm3AnoW6WfIqIdcMW/Sm/FTljx1awdeo +-> ssh-ed25519 +3V2lQ Jg+gASEMV3bi9eEB86rFfguh6Be/yOO2szI19Mk2BlY +q7vBOf0CFOUfxbpvwD8rpJH3asQqqNqWBJSzwYTBErs +--- KSBDnbS1GMq4I8FXEljleKo/pKvauq9T8vomtInIEOQ +–€³~pë +âÑžh¤AVÖ>Üm< 1|þùLyÈ ssh-ed25519 UE5Ceg ys38fGOhLJNLg9zx9T3v2VgF2IbOr/Y/rj2+dWkcAlU +QwkMX8WKgcJeGUomDSLjijen2K5UcRnYYwtebrITDqU +-> ssh-ed25519 uYcDNw wF0oWExIUjlP32CQzOvp6MyEvFw33Sm8pHhYn3Sb0zE +RHslJJumyXoCLHLw4sGlSLK++UHmgq97KPkqCu77G3o +-> ssh-rsa f5THog +pFSH+qCW+oM9zn2j+830+bja2rTXFuzATqfMNAq3o38ssW8Nl7+0FpkdMam4iYXu +sw4Pcaj1QPTO8PbhkEvjoOU4f0bUsVuJSIvcour4k8SUOBgEMiW/98AVSTIk6KBX +PvA+4uZn2Is+bB2m9EGCguwLJ9zzzfbur+USMQvwkQexg0YRpSfhJsRbCplLXhE+ +ZU6ut4HjCP0XWwvxgFzKc6sY4X+/PeWFJOd+WkWy5lL6gcMqUz5DXoi1CeG11AR4 +/hQ5KSJBpVsxw/ib3lSkGjA/ktQzwp4hZTI0l/dH9VHOFQflM8/9hPCYT2gsLVpF +7F2N++tMjgqbMI6Jve0gXLixpWFflr7X5UIBFW96k7/Aq2G+WUch/COQA6wTmfqw +OeP1wGd4Ka7YsgGByH5kuL60xDvtHG6+fYlnPXZAB5Fn86Ct6vRmWw9KUvLC7LKU +iBXDccJliY/y4vGFZH74EYlimurEfaBPiT5sxAk0Ke6hoJued3sZ39Qi+wuxMxFH +pleoFR/n1gBq2bu8FqTQaaNXB2Rsy7q4r5Fy1FxRJqDPgHJEmPx1k4rmYPq1VIaP +/ScOstPQgdMNBqVsBGoNYq7vewkzoPl6MkEwh6gP7IjtC1nvYxxwlGh0gESe3RFm +4MRh78EZaY9pmqIRAf/sRzajky26Aw+DkphmWNUjMTA +-> ssh-rsa kFDS0A +XsOTwrszUoHm2k4XSxiLniJZNWYfJOEn7riuDaQSGSW6ZpjMloD8K1FsZ/ZbMoUP +S/QD71rnETAhfQc8JAAHANOarxMXmSw3y1tSmlbL2h+TRnSoq74a1nK4Ble3aszu +y7tlUuUn3vEX6BVPRNOWM3bGW3oWNe5m0sMUAc4YSUXryWF4V48c/GbUp3T0OrRS +jm+5DWOPxt4VcLuCqe4Nv1jrjPnb7oui/7grMuottf3JRJJQxv9qZolRwlhkG2RN +4fuUSuOYnFUuHuaF2cfuTpOPaowLbh5H/Y6ETzOp+z9yNSuxRsdNgA63GrTsAorI +2axdnMakUsP7m3Xxu6YsVu8xP+Sso1xzPZoEQKA+2eol0fZpQvRPrZ59bqaf9p5U +VTIKSqIAIxyr/XN/s8S4ygaNKQZW8yBColG7TlggTth5v3XqAZ8RhcFXUg6z5lSr +RErV6Bio9JIZofvNEiJaqrl8uTo8dU4ymVuYZoEiT/mW3noqBrZlKUh6XZFMplmk +5giRTDThA3mirSTTELFCsc08kJMXqgkOzkPk5xm5kgP7VD6t/0SfGxetVWXOlUNd +dbprg8Oko1hdlO+LePY1n50TTFKBl9TeZWhvcLOhUizc0bTowUcXm+04Taf+MDwa +TMxplrtahOdCTz8k38c/HwBeHtfXRevh8A8Y1qnJXJY +-> piv-p256 vRzPNw AqccwzdKUA4RP2LzIfcTlAN9LsoEB/b7tGYyM8bk39Pn +f0srD9t9HaGY8OIAVImqJSrvHZRhxfMXkYwot4LJGeM +-> piv-p256 zqq/iw Aj8544WraFJMX2S6qyzi6CTal6sRnunmzbMO4KUQhJOO +BFiQSdLgrmgPnynqmSLNBqiWkyBme3KavSbi86HHSck +-> ssh-ed25519 YFSOsg Zece1bOI+mVc6079POREAnnzSG7ZytiTRDm+NzbbhVE +alK4ODfwrgRSDGWzcZmIuyZ88axaiMzSNfeGspsgk70 +-> ssh-ed25519 iHV63A LwfUkisQGB3txmxYYLlZSG6ddxVNVC9+UokxPiXEjRc +yRmtdHT9uM0YkS/s80jetMr1baDjGsaRubVKbJVPpCk +-> ssh-ed25519 BVsyTA +8LVssLl+DiF2f3H0KhAhvzEvTjciIAcRM9ZYwrGQh0 +CcQxWwMBdyXXzDv10vUmXBifYLXsHKOFd2/L95RGT5U +-> ssh-ed25519 +3V2lQ RWquIefIO5crVvrUxdatV7OvTv1Jabyq4IF209Ezkw0 +0SM43tcO7m7FQlNJe9QnhC9J9PwHoVxucRtZGpcACUE +--- xx8BodL5hv2CyeZ8m0tGXNzmH2DGaCveUNobqbAQK8U +)ŠÐÑ\³“9°c½ùt4Ê¿Á~ÁÆëºùeJ¥}<Ó¼Š§Å[‘¸Ø+*x’£>;m/ «&I»–÷Ò:Ï‘óÛ3 \ No newline at end of file diff --git a/secrets/restic-repo-storagebox.age b/secrets/restic-repo-storagebox.age index 47a89e538f0369f3c30fd40e3772360fb2019aa1..64252211dbeadfacc3e87550d95245b853eccce8 100644 GIT binary patch literal 2576 zcmZXWxy$?r8OH?+A%!3)tYGn?D6;W2lVoxstR$0UCii_zx=gOgeNHafKfq!IMG(|N z#bfQ=!bU8%6~spD6&7T1LG2WL6;|YD`BWbs_&%TS6K2VC(nQ17O?lgVxg9cShJoid zp2qS1oWux*!PJw(VW%W}GRHIJC5GFmIbv+KN?kU7xT+v`k#KjFTdt8)qNq=}?*Nx= z82X!ADd&Bc&{=lT6bd|YN~2;DhyubCFwc}C7#r?YTFy$vl0Es1X-tln3t?J`aL;F& zEfNHrROEMmmV_tkCu7 zS80!H#Hz~^wyOR(7BO(gf z=BeEjHqB>|$tq$!O`QY^%K_ZtOEhhlP<+k8O$ z7%_>{!@I-fT=Wm*P}v3=WP949RlzLcKn;=r@Rft#r<{sZX%j*geBe7K9i%Q#rS9Yh zX{nJ1kqizSZ_IPPgs+gr}S_yTe@qu&c-@5ZKQwP~OaTSQBp_yHTUG8_|kqoPI z=kxIhV)%`)j;T3V*yQBYEo$K_tCfrg%u;8TIfqaDR97Ky2G%(uXu3h5mWy}am!?cd zg*A&WQnC3nl~3JnUN=iNHGfIP7PwKYwq;B`8Y~^goV)vNt3rC??oq{U=YyAHJ`Xl_ zd*cjt+lk1xyfy@-2ihcI!|s5h@`&%VC`2Qrjz8)}ohPC9kS#3f+76c5<<`=XB=ziU zP_;W(wD4&oDC&pE_zdF$ZpXmax)6w-2Q4WORpO*35{);Zoa#iqACIoPYvT_3GLIN^ z3DKFPOZP{dVdi`zY#?^LgMwxbWOsEAdzpSzq@pTKm7urDJ-BjsuF&{6M(CKW@Z3or z$waC{sl)ZQm{$UD&7u@Es|Ddfwj4Z{GlYvL2Q3uUTH2`yLBr!JFI2Uovs#pN(Wrta zX_ZAU81c}2z|c>Hr;v@AoE_HT&MUGlCu>~bFqy?TnM5t@+bX4_>hQlgE_v2E(7?qK z9BT}SK$KC36mPO+QFodzioDbqb0D12pLRW@s7!mH-Mtl5PcuB0sbrH68_fcO>LG@~ z+;mLA^9wJA9$_V#z-+wL5p1Hwmz`RP2@(xSZ+#6mB$9;aru+86{>(#&^$*$M)uQI=1! zvVY7l*V$mWfhb3=Z9m8l%ZgA)@Z1|W=vNjmoUvM^&=3a{*c;hCU5(CAUgm%{=hR`P zyH08GVIV@9R!JpX2CwLr+3G{XG0CaXCqWUi#z!!<15VyiSyVZFENMj{1HGJI%u*>y z<n~32ZjrMV5FG zm%;EJsr);~T|Pf|2!=n+=B~e}pN4D5)LSu#c4#$eRmNx!K9xmYGwXp!vsNpLi%lJ4 zY>xo!Fb6xesbs~&*GY&n>|xm?b#{xs$d#jXILGKBlp;(2r)mDn+WQ{LUszOW1(lFT z>+yVU?=pQ}aHU4jg>kM4Q3ZL1yEEhx3f;B9afD`unMu3|!{DY2lX%Qmt4edlZim<* z%0TP|jg~kk`tUwKZ0svtli=mNedBv{8PGV+7`BqS)ahT9tDhbF% z0D_Im7No9(kip!1Icvc=m-3wI8TicB)v^SQhg17@kDXU(`NhRi`l%d*p$slK9UP52 za@0kB(m}5yucsA5qKLY3${00jCeRLGkEgol1qR#&WFj`W!p@T%+xu>30y|z*%PjBw zG#ENRzDi@&UdDLq+XF2~KRU8J5lJ{4JJK=vr#10Sq$dwwy6k zr>*Q$%TwBU5zCZs;a0GxrOY^}H4~>P_5b@1K-5JlXK6PO~n&(fWWmD z6dGHwA(y$ERMYVFG3G50&pIWob9)ahoOZoSX)jQQiY@<;=|WQ8}GZ#GON5twnIOVF4)L96$NS7ytD4Z-4Nef4=kf zZ@yk{KRLf1SwHyEFFsxV>V4_gl>3QK{Ucpo``~r$3t#&2_ul>Nd%yhcAAkPN_3h96 z@ZC47zkT(0U#Y(N@t=L;^Yyp>@cY-^`r7q#%18c8yl1}k-S@x$(~ti3FCY6C5bsrj literal 2467 zcmZA3yX*8=83%AtM2L2ah22jtZuC^Lgd%osL8IuI6Ay8ywNCB-kIyC%Z;|^j$95rk` zq5y4a*Y@ml%`)J{91_7Qghs{t;)E3$u9k8LDyq0r96Pr$7K-}?cNTrH@Q-Y5ET>l;g}u3!=PJ5Gm+yi7J9iGZ1pJfekzeNWmMncXvi5g-JAAE+q&Gk)iYlJlx=BHrBXk9c3XTg&Z7Nf)cts*FR^CMaiY=Su+vzQ^zMEa;Q%hj!bYp}sO+M^CF zCyCwwmAin=X}Fp#F?L*sS{b4o^JZ}a8d(_2Gj_kdq@jIh?TQ>QT!qD91@jmeLo0Fd z1>j3w=h&Q;vm47^Px4(jwocE$It(TGMn%@zf{Yy(Ga53$s_a#qv%**$Ndrn%i+7x?u^dDjW1Jg>NPonbgTK*a0mY^hd% zRU(&7iaDn#=P*C;!8^(GtRY|F-lbQ+2pBJe6{~T95YaJ+{&-Fnpk+Ru2Mah$#&31&#Ng@yF zi6RFura3|-!%z^YmYrf{LxZATYq`R28I`aQpg4I~3**&mIsvN}Nft1+`uw9JQUyjB_?9s%Z`-dYJkJI@a+(bRaGaKfRp*~-c zh?cMM7$P6}I+{>QlH)%pD|P z%dAe@c;=l8{19BI3r^%M0Me_1)4ZTi_ftC|>B`58LwV?G>lIsaqRQumn8MwO)p<6R zkv5pPbuBR-WLpQSxdMeeoKsC?7cp*IlP5>Dxp0Q#r^N!5&*cUyW2cREQd|O)T8)sg zBmy}u&(g>SZhLlX=dfVw15<}2xaP(|g`*nE`6aq5V$%!EyedM5`JT&-%7HWUp1SxQ z$dRm$O@KqIM=6l!(ey};6l&6@hA}!jNMmNQcAsvJ=Ugxcoige_Iqu8lMUP;or^Vd$ z=ck`)_=jewYQ@-AiR%~q}v{YTAkrl z$J;RbOj2X^4Nw_pO*owPX(Fy#u(;2N2O_5{2hVBOEuPIT=TvS4j9y>%=gS!y@Rl~^ zPnr@`TYN|*DTgkagZTZR(ih2J7}qWzfkSR=!EwEA3ISkrJu@}9=3lEKQq@}oktcr& z(cbVpT0MuaG$e|?s+FR9I#N$IBgu1`5C+1-gC2(Zx%Kzp`E<==-j1EW>&v#O zhRoUoU|n~prdp?NwMN19?18}ed7rC|n&Yl-yQ^VydB?@XK)kBa?zGv|(}ovKmm{2y zj%7Km>ERGR-~4lwd$-m*b`C&uh{9FBxf0+6$6Ai(F3LpavKA-5K+_D`=rjvxN|mw$Ns zTi@qD^N+(PmQVitwdC_({?|X>{M}Ff_})7oe$M{kPv8FgSHJnG-@9M?!Uu1>`;o7| k|FiDf;p>(0qqqGZy!YDQKK?8Foxi^IXZNjd{PvB11M&(p*Z=?k diff --git a/secrets/secrets.nix b/secrets/secrets.nix index 66221cf..4c868f1 100644 --- a/secrets/secrets.nix +++ b/secrets/secrets.nix @@ -70,8 +70,10 @@ in "searx-environment.age".publicKeys = nachtigallKeys ++ adminKeys; + "restic-repo-garage-metronom.age".publicKeys = metronomKeys ++ adminKeys; + "restic-repo-garage-metronom-env.age".publicKeys = metronomKeys ++ adminKeys; "restic-repo-droppie.age".publicKeys = nachtigallKeys ++ adminKeys; - "restic-repo-storagebox.age".publicKeys = nachtigallKeys ++ adminKeys; + "restic-repo-storagebox.age".publicKeys = metronomKeys ++ nachtigallKeys ++ adminKeys; "restic-repo-garage-nachtigall.age".publicKeys = nachtigallKeys ++ adminKeys; "restic-repo-garage-nachtigall-env.age".publicKeys = nachtigallKeys ++ adminKeys;