From 86f741c3e98d1f2042b24d125ae670b597b5e953 Mon Sep 17 00:00:00 2001 From: Chewing_Bever Date: Thu, 11 Jan 2024 22:28:00 +0100 Subject: [PATCH] monica: add backup script --- roles/monica/files/monica.backup.sh | 17 +++++++++++++++++ roles/monica/tasks/main.yml | 8 ++++++++ 2 files changed, 25 insertions(+) create mode 100644 roles/monica/files/monica.backup.sh diff --git a/roles/monica/files/monica.backup.sh b/roles/monica/files/monica.backup.sh new file mode 100644 index 0000000..654cbe2 --- /dev/null +++ b/roles/monica/files/monica.backup.sh @@ -0,0 +1,17 @@ +cd /etc/monica + +/usr/bin/docker compose exec -T db mysqldump -u monica -pmonica monica | + /usr/bin/gzip --rsyncable | + /usr/local/bin/restic backup --stdin --stdin-filename monica-mariadb.sql.gz + +# Snapshot data directory +data_dir='/mnt/data1/monica/monica' +snapshot_dir="${data_dir}.snapshot" + +# Read-only snapshot for atomic backup +btrfs subvolume snapshot -r "$data_dir" "$snapshot_dir" || exit $? + +/usr/local/bin/restic backup "$snapshot_dir" + +# Always remove snapshot subvolume, even if restic fails +btrfs subvolume delete "$snapshot_dir" diff --git a/roles/monica/tasks/main.yml b/roles/monica/tasks/main.yml index c099ca6..cb71df5 100644 --- a/roles/monica/tasks/main.yml +++ b/roles/monica/tasks/main.yml @@ -43,3 +43,11 @@ chdir: '/etc/monica' cmd: 'docker compose up -d --remove-orphans' when: 'res.changed' + +- name: Ensure backup script is present + ansible.builtin.copy: + src: 'monica.backup.sh' + dest: '/etc/backups/monica.backup.sh' + owner: 'root' + group: 'root' + mode: '0644'