cadcad-discourse-forum/scripts/restore-backup.sh

78 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
## Restore a Discourse backup from an existing instance
## Usage: bash scripts/restore-backup.sh <path-to-backup.tar.gz>
DISCOURSE_DIR="/opt/discourse"
BACKUP_DIR="/opt/discourse/shared/standalone/backups/default"
if [ $# -eq 0 ]; then
echo "Usage: $0 <path-to-backup.tar.gz>"
echo ""
echo "Steps to get a backup from the existing community.cadcad.org:"
echo " 1. Log into the existing Discourse as admin"
echo " 2. Go to /admin/backups"
echo " 3. Click 'Backup' to create a new backup"
echo " 4. Download the .tar.gz file"
echo " 5. Upload to Netcup: scp backup.tar.gz netcup:/tmp/"
echo " 6. Run: bash $0 /tmp/backup.tar.gz"
exit 1
fi
BACKUP_FILE="$1"
if [ ! -f "$BACKUP_FILE" ]; then
echo "ERROR: Backup file not found: $BACKUP_FILE"
exit 1
fi
echo "=== Discourse Backup Restore ==="
echo "Backup file: $BACKUP_FILE"
echo ""
# Copy backup to Discourse backup directory
echo "[1/4] Copying backup to Discourse backup directory..."
mkdir -p "$BACKUP_DIR"
cp "$BACKUP_FILE" "$BACKUP_DIR/"
BACKUP_FILENAME=$(basename "$BACKUP_FILE")
echo " Copied to $BACKUP_DIR/$BACKUP_FILENAME"
# Enable restore mode
echo ""
echo "[2/4] Enabling restore mode..."
cd "$DISCOURSE_DIR"
./launcher enter app <<EOF
discourse enable_restore
EOF
# Restore the backup
echo ""
echo "[3/4] Restoring backup (this may take several minutes)..."
./launcher enter app <<EOF
discourse restore $BACKUP_FILENAME
EOF
# Rebuild to ensure everything is clean
echo ""
echo "[4/4] Rebuilding container to finalize restore..."
./launcher rebuild app
# Reconnect to traefik network after rebuild
CONTAINER_ID=$(docker ps -q -f name=app)
if [ -n "$CONTAINER_ID" ]; then
docker network connect traefik-public "$CONTAINER_ID" 2>/dev/null || true
fi
echo ""
echo "=== Restore Complete ==="
echo ""
echo "The forum should now contain all data from the backup."
echo "Visit https://cadcad-forum.jeffemmett.com to verify."
echo ""
echo "If switching to community.cadcad.org:"
echo " 1. Update DISCOURSE_HOSTNAME in containers/app.yml"
echo " 2. Update Traefik router rule in containers/app.yml"
echo " 3. ./launcher rebuild app"
echo " 4. Update Cloudflare tunnel + DNS"