diff options
| author | Isabella Bastaja <isabella@sorre.xyz> | 2026-08-25 18:18:54 +0200 |
|---|---|---|
| committer | Isabella Bastaja <isabella@sorre.xyz> | 2026-08-25 18:37:29 +0200 |
| commit | 1560172f24e4bed13030c4265f2d79cd7ddef767 (patch) | |
| tree | 4996c5cd0b9fd7c0eaf79d0d799932913b7e4388 | |
| parent | ab06d1cd703dd1e9bfd093b84e2218496b286134 (diff) | |
create kanboard backup service
| -rw-r--r-- | hosts/tower/web/kanboard.nix | 59 |
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" ]; + }; } |
