diff --git a/scripts/run_backup.sh b/scripts/run_backup.sh deleted file mode 100755 index 9f99535..0000000 --- a/scripts/run_backup.sh +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env bash -# This script is to be run in the root of the repository - -set -e - -PROJECT_DIR="." -BACKUPS_DIR_HOST="$PROJECT_DIR/backups" -BACKUPS_TO_KEEP=24 - -# Load environment variables from .env file -# Used for PUID and PGID -set -a # automatically export all variables -source "$PROJECT_DIR/.env" -set +a - -# Create backup directory -DATE="$(date +\%Y-\%m-\%d_\%H-\%M-\%S)" -BACKUP_DIR_HOST="$BACKUPS_DIR_HOST/$DATE" - -mkdir -p "$BACKUP_DIR_HOST" -mkdir -p "$BACKUP_DIR_HOST/fabric/data" -mkdir -p "$BACKUP_DIR_HOST/paper/data" -mkdir -p "$BACKUP_DIR_HOST/paper/data/plugins/Multiverse-Core" -mkdir -p "$BACKUP_DIR_HOST/paper/data/plugins/Multiverse-Inventories" -mkdir -p "$BACKUP_DIR_HOST/velocity/data/plugins/dclink-velocity" - -chown -R "$PUID:$PGID" "$BACKUP_DIR_HOST" -chmod -R 770 "$BACKUP_DIR_HOST" - -# Announce backup is starting -docker exec illegal_crime_fabric rcon-cli "tellraw @a [{\"text\":\"Server\",\"color\":\"light_purple\"},{\"text\":\": Backup is starting\",\"color\":\"white\"}]" -docker exec illegal_crime_paper rcon-cli "tellraw @a [{\"text\":\"Server\",\"color\":\"light_purple\"},{\"text\":\": Backup is starting\",\"color\":\"white\"}]" - -# Disable autosaving -docker exec illegal_crime_fabric rcon-cli save-off -docker exec illegal_crime_paper rcon-cli save-off - -# Manually save to ensure recent changes are included in backup -docker exec illegal_crime_fabric rcon-cli save-all -docker exec illegal_crime_paper rcon-cli save-all - -# Dump luckperms database -PG_USER="luckperms" -PG_DB="luckperms" -BACKUP_DIR_CONTAINER="/backups/$DATE" -docker exec illegal_crime_luckperms pg_dump -U "$PG_USER" -F c -b -v -f "$BACKUP_DIR_CONTAINER/luckperms.sql" "$PG_DB" - -# Copy WorldEdit schematics -cp -r "$PROJECT_DIR/schematics" "$BACKUP_DIR_HOST/" - -# Copy dclink database -cp "$PROJECT_DIR/velocity/data/plugins/dclink-velocity/dclink.db" "$BACKUP_DIR_HOST/velocity/data/plugins/dclink-velocity/" - -# Copy Multiverse files -# cp -r "$PROJECT_DIR/paper/data/plugins/Multiverse-Core/worlds.yml" "$BACKUP_DIR_HOST/paper/data/plugins/Multiverse-Core/" -cp -r "$PROJECT_DIR/paper/data/plugins/Multiverse-Inventories/groups.yml" "$BACKUP_DIR_HOST/paper/data/plugins/Multiverse-Inventories/" -cp -r "$PROJECT_DIR/paper/data/plugins/Multiverse-Inventories/groups" "$BACKUP_DIR_HOST/paper/data/plugins/Multiverse-Inventories/" -cp -r "$PROJECT_DIR/paper/data/plugins/Multiverse-Inventories/players" "$BACKUP_DIR_HOST/paper/data/plugins/Multiverse-Inventories/" -cp -r "$PROJECT_DIR/paper/data/plugins/Multiverse-Inventories/worlds" "$BACKUP_DIR_HOST/paper/data/plugins/Multiverse-Inventories/" - -# Copy G4mespeed files -cp -r "$PROJECT_DIR/fabric/data/g4mespeed" "$BACKUP_DIR_HOST/fabric/data" - -# Copy Minecraft worlds -cp -r "$PROJECT_DIR/fabric/data/world" "$BACKUP_DIR_HOST/fabric/data/" -cp -r "$PROJECT_DIR/paper/data/survival" "$BACKUP_DIR_HOST/paper/data/" -cp -r "$PROJECT_DIR/paper/data/survival_nether" "$BACKUP_DIR_HOST/paper/data/" -cp -r "$PROJECT_DIR/paper/data/survival_the_end" "$BACKUP_DIR_HOST/paper/data/" - -# Enable autosaving -docker exec illegal_crime_fabric rcon-cli save-on -docker exec illegal_crime_paper rcon-cli save-on - -# Announce backup is complete -docker exec illegal_crime_fabric rcon-cli "tellraw @a [{\"text\":\"Server\",\"color\":\"light_purple\"},{\"text\":\": Backup is complete\",\"color\":\"white\"}]" -docker exec illegal_crime_paper rcon-cli "tellraw @a [{\"text\":\"Server\",\"color\":\"light_purple\"},{\"text\":\": Backup is complete\",\"color\":\"white\"}]" - -# Create or update symlink pointing to latest backup -mkdir -p "$BACKUPS_DIR_HOST/markers" -LATEST_SYMLINK="$BACKUPS_DIR_HOST/markers/latest" -if [ -L "$LATEST_SYMLINK" ]; then - # Symlink exists. Updating it. - rm "$LATEST_SYMLINK" - ln -s "../$DATE" "$LATEST_SYMLINK" -elif [ -e "$LATEST_SYMLINK" ]; then - # File exists but it's not a symlink. - rm -f "$LATEST_SYMLINK" - ln -s "../$DATE" "$LATEST_SYMLINK" -else - # Symlink does not exists. Creating it. - ln -s "../$DATE" "$LATEST_SYMLINK" -fi - -# Remove old backups -BACKUP_DIRS=$(find "$BACKUPS_DIR_HOST" -mindepth 1 -maxdepth 1 -type d ! -name "markers" | sort) -TOTAL_BACKUPS=$(echo "$BACKUP_DIRS" | wc -l) - -echo "TOTAL_BACKUPS: $TOTAL_BACKUPS, BACKUPS_TO_KEEP: $BACKUPS_TO_KEEP" - -if ((TOTAL_BACKUPS > BACKUPS_TO_KEEP)); then - BACKUPS_TO_REMOVE=$((TOTAL_BACKUPS - BACKUPS_TO_KEEP)) - BACKUPS_TO_DELETE=$(echo "$BACKUP_DIRS" | head -n "$BACKUPS_TO_REMOVE") - for BACKUP in $BACKUPS_TO_DELETE; do - echo "Removing $BACKUP" - rm -r "$BACKUP" - done -fi - -# Update permissions of backed up files -chown -R "$PUID:$PGID" "$BACKUPS_DIR_HOST" -chmod -R 770 "$BACKUPS_DIR_HOST"