diff options
author | Timo Wilken | 2024-08-24 10:54:35 +0200 |
---|---|---|
committer | Timo Wilken | 2024-08-24 10:54:35 +0200 |
commit | 93e169538e9bf0af6f1c5488a21ab21a884b7008 (patch) | |
tree | 06316d623cbb9c7f5c90b0d5970f0c5c03f7278e /tw/services | |
parent | 8ec21fca031dd0913967bc69f38d7a44a43c3abe (diff) |
Back up Minecraft data automatically
Diffstat (limited to 'tw/services')
-rw-r--r-- | tw/services/games.scm | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/tw/services/games.scm b/tw/services/games.scm index 7b7d8a4b..d239b248 100644 --- a/tw/services/games.scm +++ b/tw/services/games.scm @@ -7,11 +7,11 @@ #:use-module (guix gexp) #:use-module (guix records) #:use-module (tw packages games) + #:use-module (tw services restic) + #:use-module (tw services secrets) #:export (minecraft-server-service-type minecraft-server-configuration)) -;; TODO: backups of Minecraft data - (define-configuration/no-serialization minecraft-server-configuration (data-location (string "/var/lib/minecraft-server") "Path on disk where server data will be stored.") @@ -50,11 +50,47 @@ server data will be stored.") (name group-name) (system? #t))))) +(define minecraft-backup-repository + (restic-local-repository + (path "/var/backups/minecraft"))) + +(define minecraft-backup-password-file + "/etc/restic/lud-minecraft") + +(define minecraft-backup-password + (restic-password-source + (type 'file) + (name minecraft-backup-password-file))) + +(define (minecraft-backup-secrets config) + (list (secret + (encrypted-file (local-file "../system/files/restic/lud-minecraft.enc")) + (destination minecraft-backup-password-file)))) + +(define (minecraft-restic-backups config) + (match-record config <minecraft-server-configuration> (data-location) + (list (restic-scheduled-backup + (schedule #~"30 3 * * *") + (paths (list data-location)) + (repo minecraft-backup-repository) + (password minecraft-backup-password))))) + +(define (minecraft-backup-cleanups config) + (list (restic-scheduled-cleanup + (schedule #~"30 4 * * *") + (repo minecraft-backup-repository) + (password minecraft-backup-password) + (keep-daily 30) + (keep-monthly -1)))) + (define minecraft-server-service-type (service-type (name 'minecraft-server) (extensions (list (service-extension shepherd-root-service-type minecraft-server-shepherd) (service-extension activation-service-type minecraft-server-activation) - (service-extension account-service-type minecraft-server-accounts))) + (service-extension account-service-type minecraft-server-accounts) + (service-extension secrets-service-type minecraft-backup-secrets) + (service-extension restic-backup-service-type minecraft-restic-backups) + (service-extension restic-cleanup-service-type minecraft-backup-cleanups))) (default-value (minecraft-server-configuration)) (description "Run a Minecraft server."))) |