| 1 | #!/usr/bin/env -S bash -eu |
| 2 | # cron script for backing up GTS to a Backblaze storage bucket |
| 3 | |
| 4 | # Replace with your bucket |
| 5 | BB_BUCKET=my-backblaze-bucket |
| 6 | |
| 7 | # Set variables |
| 8 | DB_PATH="/opt/docker/gotosocial/data/sqlite.db" |
| 9 | RCLONE_REMOTE="backblaze:${BB_BUCKET}/gotosocial_backups" |
| 10 | BACKUP_DB_PREFIX="gotosocial_db_" |
| 11 | BACKUP_DB_SUFFIX=".sqlite" |
| 12 | BACKUP_DB_FILENAME="$BACKUP_DB_PREFIX$(date +%Y%m%d_%H%M%S)$BACKUP_DB_SUFFIX" |
| 13 | BACKUP_EXPORT_PREFIX="export_" |
| 14 | BACKUP_EXPORT_SUFFIX=".json" |
| 15 | BACKUP_EXPORT_FILENAME="$BACKUP_EXPORT_PREFIX$(date +%Y%m%d_%H%M%S)$BACKUP_EXPORT_SUFFIX" |
| 16 | BACKUP_PATH="/opt/docker/gotosocial/backup/" |
| 17 | DAYS_TO_KEEP_LOCAL=7 |
| 18 | |
| 19 | # Ensure backup directory exists |
| 20 | mkdir -p "$BACKUP_PATH" |
| 21 | |
| 22 | # Backup database |
| 23 | sqlite3 "$DB_PATH" ".backup \"$BACKUP_PATH/$BACKUP_DB_FILENAME\"" |
| 24 | |
| 25 | # Export application state |
| 26 | docker exec gotosocial /gotosocial/gotosocial admin export --path /gotosocial/storage/$BACKUP_EXPORT_FILENAME |
| 27 | |
| 28 | # Move export file from container |
| 29 | docker cp gotosocial:/gotosocial/storage/$BACKUP_EXPORT_FILENAME $BACKUP_PATH/$BACKUP_EXPORT_FILENAME |
| 30 | docker exec gotosocial rm -f /gotosocial/storage/$BACKUP_EXPORT_FILENAME |
| 31 | |
| 32 | # Upload to Backblaze |
| 33 | rclone copyto "$BACKUP_PATH/$BACKUP_DB_FILENAME" "$RCLONE_REMOTE/gotosocial_db.sqlite" |
| 34 | rclone copyto "$BACKUP_PATH/$BACKUP_EXPORT_FILENAME" "$RCLONE_REMOTE/export.json" |
| 35 | |
| 36 | # Clean up old backups |
| 37 | find "$BACKUP_PATH" -type f -mtime +$DAYS_TO_KEEP_LOCAL -delete |
| 38 | |
| 39 | echo "Backup completed on $(date)" |
| 40 |
john / GoToSocial Backup Script
Last active 5 months ago
Quick script to back up a GoToSocial instance to Backblaze B2 with Rclone
Revision 4c9e9d976f3b2195714cc5d138fda0a1181580b4