aboutsummaryrefslogtreecommitdiff
path: root/hosts/tower/web
diff options
context:
space:
mode:
authorIsabella Bastaja <isabella@sorre.xyz>2026-08-25 18:18:54 +0200
committerIsabella Bastaja <isabella@sorre.xyz>2026-08-25 18:37:29 +0200
commit1560172f24e4bed13030c4265f2d79cd7ddef767 (patch)
tree4996c5cd0b9fd7c0eaf79d0d799932913b7e4388 /hosts/tower/web
parentab06d1cd703dd1e9bfd093b84e2218496b286134 (diff)
create kanboard backup service
Diffstat (limited to 'hosts/tower/web')
-rw-r--r--hosts/tower/web/kanboard.nix59
1 files changed, 58 insertions, 1 deletions
diff --git a/hosts/tower/web/kanboard.nix b/hosts/tower/web/kanboard.nix
index d9823af..9daa139 100644
--- a/hosts/tower/web/kanboard.nix
+++ b/hosts/tower/web/kanboard.nix
@@ -4,6 +4,10 @@
config,
...
}:
+let
+ cfg = config.services.kanboard;
+ serviceName = "phpfpm-kanboard.service";
+in
{
services.kanboard = {
enable = true;
@@ -13,6 +17,59 @@
dataDir = "/var/lib/kanboard";
settings = { };
};
-
services.phpfpm.pools.kanboard.settings."listen.owner" = lib.mkForce config.services.caddy.user;
+
+ systemd.services.backup-kanboard = lib.mkIf cfg.enable {
+ serviceConfig = {
+ Type = "exec";
+ User = cfg.user;
+ Group = cfg.group;
+ StateDirectory = "backups/kanboard";
+ StateDirectoryMode = "0700";
+ Umask = "077";
+ };
+ description = "Back up kanboard data";
+ conflicts = [ serviceName ];
+ path = [ pkgs.gnutar ];
+ enableStrictShellChecks = true;
+ script = ''
+ #!/usr/bin/env bash
+ set -euo pipefail
+
+ TIMESTAMP="$(date +%Y%m%d%H%M%S)"
+ BACKUP_PATH="$STATE_DIRECTORY/$TIMESTAMP.backup.tar"
+ echo "Backing up kanboard to $BACKUP_PATH" >&2
+
+ tar cf "$BACKUP_PATH" /var/lib/kanboard
+ chmod u=r,go-rwx "$BACKUP_PATH"
+
+ find "$STATE_DIRECTORY" -type f -name '*.backup.tar' -print0 |
+ sort --zero-terminated --reverse |
+ tail --zero-terminated --lines=+6 |
+ xargs --null --no-run-if-empty rm --
+ '';
+ };
+
+ # See: https://unix.stackexchange.com/a/804263
+ systemd.services.backup-kanboard-restart-service = {
+ unitConfig = {
+ StopPropagatedFrom = "backup-kanboard.service";
+ Before = "backup-kanboard.service";
+ User = "root";
+ };
+ path = [ pkgs.systemdMinimal ];
+ serviceConfig = {
+ Type = "oneshot";
+ User = "root";
+ RemainAfterExit = true;
+ ExecStop = "systemctl start ${serviceName}";
+ };
+ wantedBy = [ "backup-kanboard.service" ];
+ };
+
+ systemd.timers.backup-kanboard = {
+ description = "Back up kanboard every morning";
+ timerConfig.OnCalendar = "*-*-* 05:00:00";
+ wantedBy = [ "timers.target" ];
+ };
}