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