From f53608fbb484c29fe25de07b10b89065346529a4 Mon Sep 17 00:00:00 2001 From: Simonas Kareiva Date: Tue, 15 Sep 2026 21:18:49 +0300 Subject: [PATCH] Add crude DB backups --- .gitignore | 1 + roles/mastodon/tasks/main.yml | 41 +++++++++++++++++++++++++++++++++++ roles/mastodon/vars/main.yml | 3 +++ 3 files changed, 45 insertions(+) diff --git a/.gitignore b/.gitignore index 7492514..a08929f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ ansible-navigator.log collections/ +backups/ diff --git a/roles/mastodon/tasks/main.yml b/roles/mastodon/tasks/main.yml index 6e5e0ab..3471035 100644 --- a/roles/mastodon/tasks/main.yml +++ b/roles/mastodon/tasks/main.yml @@ -71,6 +71,47 @@ - name: Install database quadlet ansible.builtin.include_tasks: db.yml +- name: Schedule postgres database backup + ansible.builtin.cron: + name: "Backup mastodon postgres database" + minute: "0" + hour: "3" + job: >- + podman exec database pg_dump -U {{ mastodon_database.username }} mastodon + | gzip > ~/backups/mastodon-$(date +\%Y\%m\%d\%H\%M\%S).sql.gz && + find ~/backups/ -type f -mtime 7 -delete + +- name: Find backup files + ansible.builtin.find: + paths: "~/backups" + patterns: "mastodon-*.sql.gz" + register: mastodon_backup_files + tags: + - backup + +- name: Identify latest backup file + ansible.builtin.set_fact: + mastodon_latest_backup: "{{ (mastodon_backup_files.files | sort(attribute='mtime') | last).path }}" + tags: + - backup + +- name: Ensure local backup directory exists + ansible.builtin.file: + path: "{{ mastodon_local_backup_dir }}" + state: directory + delegate_to: localhost + become: false + tags: + - backup + +- name: Download latest backup file to local machine + ansible.builtin.fetch: + src: "{{ mastodon_latest_backup }}" + dest: "{{ mastodon_local_backup_dir }}/{{ mastodon_latest_backup | basename }}" + flat: true + tags: + - backup + - name: Install redis quadlet ansible.builtin.include_tasks: redis.yml diff --git a/roles/mastodon/vars/main.yml b/roles/mastodon/vars/main.yml index 5c12ffa..7bf25c1 100644 --- a/roles/mastodon/vars/main.yml +++ b/roles/mastodon/vars/main.yml @@ -7,3 +7,6 @@ mastodon_local_dirs: - "~/mastodon/redis" - "~/mastodon/elasticsearch" - "~/mastodon/system" + - "~/backups" + +mastodon_local_backup_dir: "{{ playbook_dir }}/backups"