scripts/backup-scripts/outline-backup.sh

53 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Function to purge old backups
purge_old_backups() {
# $1: frequency (daily, monthly, yearly)
# $2: maximum number of backups to keep
rclone --min-age $(($2 + 1))d delete backblaze:one800-backups/outline/backups/$1/
rclone --min-age $(($2 + 1))d rmdirs backblaze:one800-backups/outline/backups/$1/
}
# Get the current date components
CURRENT_YEAR=$(date +"%Y")
CURRENT_MONTH=$(date +"%m")
CURRENT_DAY=$(date +"%d")
CURRENT_WEEKDAY=$(date +"%u") # 1=Monday, 7=Sunday
# Outline API details for exporting all collections
OUTLINE_API_URL="https://outline.example.com/api/collections.export_all"
OUTLINE_API_KEY="super_secret_key"
# Export all collections and stream the output to rclone to upload to B2
# curl -s -X POST "${OUTLINE_API_URL}" -H "Authorization: Bearer ${OUTLINE_API_KEY}" -H "content-type: application/json"
# Backup outline database
docker exec -t outline_postgres pg_dumpall -c -U outline | \
rclone rcat backblaze:one800-backups/outline/backups/daily/outline-db-${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DAY}.sql
# Create weekly backups on Sunday
if [ "$CURRENT_WEEKDAY" -eq "7" ]; then
WEEK_NUMBER=$(date +"%V")
rclone copy backblaze:one800-backups/outline/backups/daily/outline-db-${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DAY}.sql backblaze:one800-backups/outline/backups/weekly/outline-db-${CURRENT_YEAR}-${CURRENT_MONTH}-W${WEEK_NUMBER}.sql
fi
# Create monthly and yearly backups on the 1st day of the month and year, respectively
if [ "$CURRENT_DAY" -eq "01" ]; then
MONTH_NAME=$(date +"%B")
rclone copy backblaze:one800-backups/outline/backups/daily/outline-db-${CURRENT_YEAR}-${CURRENT_MONTH}-01.sql backblaze:one800-backups/outline/backups/monthly/outline-db-${CURRENT_YEAR}-${MONTH_NAME}.sql
if [ "$CURRENT_MONTH" -eq "01" ]; then
YEAR_NAME=$(date +"%Y")
rclone copy backblaze:one800-backups/outline/backups/monthly/outline-db-${CURRENT_YEAR}-01-01.sql backblaze:one800-backups/outline/backups/yearly/outline-db-${YEAR_NAME}.sql
fi
fi
# Purge old backups
purge_old_backups "daily" 30
purge_old_backups "weekly" 5
purge_old_backups "monthly" 12
purge_old_backups "yearly" 5
echo "Backup and purge process completed."