78 lines
2.2 KiB
Bash
Executable File
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"
|