john

john / Generic backup script

Last active 3 months ago

Like 0

Backs up an sqlite database and application data and syncs it to a remote with rclone.

Revision 4670b5846ea6518506ca8154a959852d0a91aed3

backup.sh Raw
1#!/usr/bin/env -S bash -eu
2
3DB_PATH="/opt/my-app/data/db.sqlite"
4RCLONE_REMOTE="s3:my-bucket/my-app"
5BACKUP_DB_PREFIX="my-app_db"
6BACKUP_DB_SUFFIX=".sqlite"
7DATA_PATH="/opt/my-app/data"
8BACKUP_DATA_PREFIX="my-app_data"
9BACKUP_DATA_SUFFIX=".tar.gz"
10BACKUP_PATH="/opt/my-app/backup/"
11DAYS_TO_KEEP_LOCAL=7
12DAYS_TO_KEEP_REMOTE=30
13
14BACKUP_DB_FILENAME="${BACKUP_DB_PREFIX}$_(date +%Y%m%d_%H%M%S)${BACKUP_DB_SUFFIX}"
15BACKUP_DATA_FILENAME="${BACKUP_DATA_PREFIX}_$(date +%Y%m%d_%H%M%S)${BACKUP_DATA_SUFFIX}"
16
17mkdir -p "$BACKUP_PATH"
18
19sqlite3 "$DB_PATH" ".backup \"$BACKUP_PATH/$BACKUP_DB_FILENAME\""
20
21tar -C $(dirname "$DATA_PATH") -cf "$BACKUP_PATH/$BACKUP_DATA_FILENAME" --exclude='db.sqlite*' data
22
23rclone copyto "$BACKUP_PATH/$BACKUP_DB_FILENAME" "$RCLONE_REMOTE/$BACKUP_DB_FILENAME"
24rclone copyto "$BACKUP_PATH/$BACKUP_DATA_FILENAME" "$RCLONE_REMOTE/$BACKUP_DATA_FILENAME"
25
26rclone delete "$RCLONE_REMOTE" --min-age ${DAYS_TO_KEEP_REMOTE}d
27find "$BACKUP_PATH" -name "${BACKUP_DB_PREFIX}*${BACKUP_DB_SUFFIX}" -type f -mtime +$DAYS_TO_KEEP_LOCAL -delete
28find "$BACKUP_PATH" -name "${BACKUP_DATA_PREFIX}*${BACKUP_DATA_SUFFIX}" -type f -mtime +$DAYS_TO_KEEP_LOCAL -delete
29
30echo "Backup completed on $(date)"
31