From 8c8657fdd88d02718b1d461ca2da03e4402b88db Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Mon, 5 May 2025 11:26:54 +0300 Subject: [PATCH] Gramps: configure backup again --- files/gramps/backup.sh.j2 | 10 ++++++++++ files/gramps/gobackup.yml.j2 | 32 +++++++++++++++++++++++++++++++ playbook-gramps.yml | 37 ++++++++++++++++++++++++++++-------- 3 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 files/gramps/backup.sh.j2 create mode 100644 files/gramps/gobackup.yml.j2 diff --git a/files/gramps/backup.sh.j2 b/files/gramps/backup.sh.j2 new file mode 100644 index 0000000..b1ffb78 --- /dev/null +++ b/files/gramps/backup.sh.j2 @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -eu +set -o pipefail + +echo "Gramps: backup data with gobackups" + +(cd "{{ base_dir }}" && gobackup perform --config "{{ gobackup_config }}") + +echo "Gramps: done." diff --git a/files/gramps/gobackup.yml.j2 b/files/gramps/gobackup.yml.j2 new file mode 100644 index 0000000..f69e885 --- /dev/null +++ b/files/gramps/gobackup.yml.j2 @@ -0,0 +1,32 @@ +# https://gobackup.github.io/configuration + +models: + + gramps: + compress_with: + type: 'tgz' + storages: + local: + type: 'local' + path: '{{ backups_dir }}' + keep: 3 + databases: + users: + type: sqlite + path: "{{ (data_dir, 'gramps_users/users.sqlite') | path_join }}" + search_index: + type: sqlite + path: "{{ (data_dir, 'gramps_index/search_index.db') | path_join }}" + sqlite: + type: sqlite + path: "{{ (data_dir, 'gramps_db/59a0f3d6-1c3d-4410-8c1d-1c9c6689659f/sqlite.db') | path_join }}" + undo: + type: sqlite + path: "{{ (data_dir, 'gramps_db/59a0f3d6-1c3d-4410-8c1d-1c9c6689659f/undo.db') | path_join }}" + archive: + includes: + - "{{ data_dir }}" + excludes: + - "{{ (data_dir, 'gramps_cache') | path_join }}" + - "{{ (data_dir, 'gramps_thumb_cache') | path_join }}" + - "{{ (data_dir, 'gramps_tmp') | path_join }}" diff --git a/playbook-gramps.yml b/playbook-gramps.yml index b1400af..dde6937 100644 --- a/playbook-gramps.yml +++ b/playbook-gramps.yml @@ -8,27 +8,48 @@ vars: app_name: "gramps" - base_dir: "/home/{{ primary_user }}/applications/{{ app_name }}/" + app_user: "{{ primary_user }}" + base_dir: "/home/{{ primary_user }}/applications/{{ app_name }}" + data_dir: "{{ (base_dir, 'data') | path_join }}" + backups_dir: "{{ (base_dir, 'backups') | path_join }}" + gobackup_config: "{{ (base_dir, 'gobackup.yml') | path_join }}" tasks: - name: "Create application directories" ansible.builtin.file: path: "{{ item }}" state: "directory" - owner: "{{ primary_user }}" - group: "{{ primary_user }}" - mode: "0755" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0750" loop: - "{{ base_dir }}" - - '{{ (base_dir, "data") | path_join }}' + - "{{ data_dir }}" + - "{{ backups_dir }}" + + - name: "Copy gobackup config" + ansible.builtin.template: + src: "./files/{{ app_name }}/gobackup.yml.j2" + dest: "{{ gobackup_config }}" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0640" + + - name: "Copy backup script" + ansible.builtin.template: + src: "files/{{ app_name }}/backup.sh.j2" + dest: "{{ base_dir }}/backup.sh" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0750" - name: "Copy docker compose file" ansible.builtin.template: src: "./files/{{ app_name }}/docker-compose.yml.j2" dest: "{{ base_dir }}/docker-compose.yml" - owner: "{{ primary_user }}" - group: "{{ primary_user }}" - mode: "0644" + owner: "{{ app_user }}" + group: "{{ app_user }}" + mode: "0640" - name: "Run application with docker compose" community.docker.docker_compose_v2: