From 0df8537c6ff6db2948c82d09025eee6a83c4eb5f Mon Sep 17 00:00:00 2001 From: Salt Date: Tue, 28 Jul 2020 15:49:05 -0500 Subject: [PATCH] Add backup module for pleroma --- roles/pleroma/tasks/main.yml | 6 +++- roles/pleroma/templates/backup.sh | 56 +++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 roles/pleroma/templates/backup.sh diff --git a/roles/pleroma/tasks/main.yml b/roles/pleroma/tasks/main.yml index 53f89b1..9e22581 100644 --- a/roles/pleroma/tasks/main.yml +++ b/roles/pleroma/tasks/main.yml @@ -148,5 +148,9 @@ name: pleroma.service state: started enabled: yes - # TODO: BACKUPS BACKUPS BACKUPS + - name: Template out backup module + template: + src: "backup.sh" + dest: "/opt/backups/modules/{{ pleroma_url }}.sh" + mode: "0600" become: yes diff --git a/roles/pleroma/templates/backup.sh b/roles/pleroma/templates/backup.sh new file mode 100644 index 0000000..2da62ac --- /dev/null +++ b/roles/pleroma/templates/backup.sh @@ -0,0 +1,56 @@ +#! /bin/bash +# +# pleroma.sh +# Backup script for Pleroma. Meant to be sourced by our main backup script +# Copyright (C) 2020 Vintage Salt +# +# Distributed under terms of the MIT license. +# + +set -e + +export OUTDIR="$BACKUPSDIR/{{ pleroma_url }}" +retention=5 # 5-day retention period + +# Sanity checks +if [ -z "$BACKUPSDIR" ]; then + log "BACKUPSDIR was undefined. Run the main backup script instead of this one." + return 1 +fi +if ! [ -d "$OUTDIR" ]; then + if ! mkdir "$OUTDIR"; then + log "Unable to find or create output directory: $OUTDIR" + return 2 + fi +fi +# Enforce permissions on our output directory since the git user will need them +chown root.pleroma "$OUTDIR" +chmod 770 "$OUTDIR" + +# Purge oldest backup if we need to +currentbackupcount="$(ls -1 "$OUTDIR" | wc -l)" +# Multiplying by two here because our backups are two-parters +if (( currentbackupcount >= retention * 2 )); then + lastbackup="$(find "$OUTDIR" -name \*.tar.gz 2>/dev/null | sort | head -n 1)" + lastbackup="${lastbackup%-*.gz}" + if [ -f "$file" ]; then + log "Removing old backups for: $lastbackup" + for file in "$lastbackup"*; do + log "Removing old backup part: $file" + rm "$file" + done + fi +fi +# WE MAKE BACKUP NOW SERGEI +date="$(date -Iseconds)" +log "Stopping Pleroma" +systemctl stop pleroma +log "Creating DB backup" +sudo -Hu postgres pg_dump -d pleroma --format=custom | gzip > "$OUTDIR/{{ pleroma_url }}-$date-db.pgdump.gz" +log "Enabling Pleroma" +systemctl start pleroma +log "Creating uploads backup" +tar czhf "$OUTDIR/{{ pleroma_url }}-$date-uploads.tar.gz" "/var/lib/pleroma/uploads" +# Note that we don't tar up static, here +# I personally manage that as a repo, so its state is easily restorable from Gitea +