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 087259b47731f5fb57912f7f3f0c9bfa154f6369

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"
7BACKUP_DB_FILENAME="${BACKUP_DB_PREFIX}$_(date +%Y%m%d_%H%M%S)${BACKUP_DB_SUFFIX}"
8DATA_PATH="/opt/my-app/data"
9BACKUP_DATA_PREFIX="my-app_data"
10BACKUP_DATA_SUFFIX=".tar.gz"
11BACKUP_DATA_FILENAME="${BACKUP_DATA_PREFIX}_$(date +%Y%m%d_%H%M%S)${BACKUP_DATA_SUFFIX}"
12BACKUP_PATH="/opt/my-app/backup/"
13DAYS_TO_KEEP_LOCAL=7
14DAYS_TO_KEEP_REMOTE=30
15
16mkdir -p "$BACKUP_PATH"
17
18sqlite3 "$DB_PATH" ".backup \"$BACKUP_PATH/$BACKUP_DB_FILENAME\""
19
20tar -C $(dirname "$DATA_PATH") -cf "$BACKUP_PATH/$BACKUP_DATA_FILENAME" --exclude='db.sqlite*' data
21
22rclone copyto "$BACKUP_PATH/$BACKUP_DB_FILENAME" "$RCLONE_REMOTE/$BACKUP_DB_FILENAME"
23rclone copyto "$BACKUP_PATH/$BACKUP_DATA_FILENAME" "$RCLONE_REMOTE/$BACKUP_DATA_FILENAME"
24
25rclone delete "$RCLONE_REMOTE" --min-age ${DAYS_TO_KEEP_REMOTE}d
26find "$BACKUP_PATH" -name "${BACKUP_DB_PREFIX}*${BACKUP_DB_SUFFIX}" -type f -mtime +$DAYS_TO_KEEP_LOCAL -delete
27find "$BACKUP_PATH" -name "${BACKUP_DATA_PREFIX}*${BACKUP_DATA_SUFFIX}" -type f -mtime +$DAYS_TO_KEEP_LOCAL -delete
28
29echo "Backup completed on $(date)"
30