53 lines
2.2 KiB
Bash
Executable File
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."
|
|
|