117 lines
2.5 KiB
Bash
Executable File
117 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
CONFIG_FILE="/opt/appfactory/config/appfactory.env"
|
|
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
|
echo "Missing config file: $CONFIG_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
source "$CONFIG_FILE"
|
|
|
|
FORCE="false"
|
|
BACKUP_FILE=""
|
|
|
|
if [ "${1:-}" = "--force" ]; then
|
|
FORCE="true"
|
|
BACKUP_FILE="${2:-}"
|
|
else
|
|
BACKUP_FILE="${1:-}"
|
|
fi
|
|
|
|
if [ "$FORCE" != "true" ]; then
|
|
echo "REFUSING TO RUN RESTORE."
|
|
echo ""
|
|
echo "Usage:"
|
|
echo " sudo ./restore-appfactory.sh --force /path/to/backup.tar.gz"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$BACKUP_FILE" ]; then
|
|
echo "Missing backup file."
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$BACKUP_FILE" ]; then
|
|
echo "Backup file not found: $BACKUP_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
echo "======================================================"
|
|
echo "DANGEROUS OPERATION: APPFACTORY RESTORE"
|
|
echo "======================================================"
|
|
echo ""
|
|
echo "Backup file:"
|
|
echo " $BACKUP_FILE"
|
|
echo ""
|
|
echo "This will overwrite:"
|
|
echo " $APPFACTORY_DIR"
|
|
echo " $WORKSPACE_DIR"
|
|
echo ""
|
|
|
|
read -r -p "Type RESTORE to continue: " CONFIRM
|
|
|
|
if [ "$CONFIRM" != "RESTORE" ]; then
|
|
echo "Cancelled."
|
|
exit 1
|
|
fi
|
|
|
|
TIMESTAMP="$(date +%Y%m%d-%H%M%S)"
|
|
EMERGENCY_BACKUP_FILE="$BACKUP_DIR/emergency-before-restore-$TIMESTAMP.tar.gz"
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
echo "Creating emergency backup:"
|
|
echo "$EMERGENCY_BACKUP_FILE"
|
|
|
|
tar -czf "$EMERGENCY_BACKUP_FILE" \
|
|
"$APPFACTORY_DIR" \
|
|
"$WORKSPACE_DIR"
|
|
|
|
echo "Stopping AppFactory containers..."
|
|
|
|
if [ -d "$APPFACTORY_DIR/deploy" ]; then
|
|
cd "$APPFACTORY_DIR/deploy"
|
|
docker compose -f docker-compose.yml -f apps-compose.yml down || true
|
|
fi
|
|
|
|
echo "Restoring backup..."
|
|
tar -xzf "$BACKUP_FILE" -C /
|
|
|
|
echo "Fixing ownership..."
|
|
chown -R "$APP_USER:$APP_GROUP" "$APPFACTORY_DIR"
|
|
chown -R "$APP_USER:$APP_GROUP" "$WORKSPACE_DIR"
|
|
chmod 600 "$APPFACTORY_DIR/config/appfactory.env" || true
|
|
|
|
echo "Starting core services..."
|
|
cd "$APPFACTORY_DIR/deploy"
|
|
docker compose -f docker-compose.yml up -d
|
|
|
|
TOOLS_DIR="$WORKSPACE_DIR/appfactory-tools"
|
|
|
|
if [ -d "$TOOLS_DIR" ]; then
|
|
cd "$TOOLS_DIR"
|
|
|
|
./scripts/generate-apps-compose.sh || true
|
|
./scripts/generate-caddyfile.sh || true
|
|
./scripts/generate-apps-page.sh || true
|
|
|
|
for app_dir in "$WORKSPACE_DIR"/*; do
|
|
if [ -f "$app_dir/app.yml" ]; then
|
|
app_id="$(basename "$app_dir")"
|
|
echo "Rebuilding app: $app_id"
|
|
./scripts/deploy-app.sh "$app_id" || true
|
|
fi
|
|
done
|
|
fi
|
|
|
|
echo "Final compose up..."
|
|
cd "$APPFACTORY_DIR/deploy"
|
|
docker compose -f docker-compose.yml -f apps-compose.yml up -d
|
|
|
|
echo ""
|
|
echo "DONE"
|
|
echo "Emergency backup:"
|
|
echo "$EMERGENCY_BACKUP_FILE"
|