john

john / GoToSocial Backup Script

Last active 5 months ago

Like 0

Quick script to back up a GoToSocial instance to Backblaze B2 with Rclone

Revision 4c9e9d976f3b2195714cc5d138fda0a1181580b4

backup-gotosocial.sh Raw
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
5BB_BUCKET=my-backblaze-bucket
6
7# Set variables
8DB_PATH="/opt/docker/gotosocial/data/sqlite.db"
9RCLONE_REMOTE="backblaze:${BB_BUCKET}/gotosocial_backups"
10BACKUP_DB_PREFIX="gotosocial_db_"
11BACKUP_DB_SUFFIX=".sqlite"
12BACKUP_DB_FILENAME="$BACKUP_DB_PREFIX$(date +%Y%m%d_%H%M%S)$BACKUP_DB_SUFFIX"
13BACKUP_EXPORT_PREFIX="export_"
14BACKUP_EXPORT_SUFFIX=".json"
15BACKUP_EXPORT_FILENAME="$BACKUP_EXPORT_PREFIX$(date +%Y%m%d_%H%M%S)$BACKUP_EXPORT_SUFFIX"
16BACKUP_PATH="/opt/docker/gotosocial/backup/"
17DAYS_TO_KEEP_LOCAL=7
18
19# Ensure backup directory exists
20mkdir -p "$BACKUP_PATH"
21
22# Backup database
23sqlite3 "$DB_PATH" ".backup \"$BACKUP_PATH/$BACKUP_DB_FILENAME\""
24
25# Export application state
26docker exec gotosocial /gotosocial/gotosocial admin export --path /gotosocial/storage/$BACKUP_EXPORT_FILENAME
27
28# Move export file from container
29docker cp gotosocial:/gotosocial/storage/$BACKUP_EXPORT_FILENAME $BACKUP_PATH/$BACKUP_EXPORT_FILENAME
30docker exec gotosocial rm -f /gotosocial/storage/$BACKUP_EXPORT_FILENAME
31
32# Upload to Backblaze
33rclone copyto "$BACKUP_PATH/$BACKUP_DB_FILENAME" "$RCLONE_REMOTE/gotosocial_db.sqlite"
34rclone copyto "$BACKUP_PATH/$BACKUP_EXPORT_FILENAME" "$RCLONE_REMOTE/export.json"
35
36# Clean up old backups
37find "$BACKUP_PATH" -type f -mtime +$DAYS_TO_KEEP_LOCAL -delete
38
39echo "Backup completed on $(date)"
40