← back to Handbag Auth Nextjs
scripts/devops/rollback.sh
87 lines
#!/bin/bash
# Quick Rollback Script for Auction Viewer
# Restore from deployment backup
set -euo pipefail
# Configuration
PROJECT_ROOT="/root/Projects/handbag-auth-nextjs/auction-viewer"
SERVICE_NAME="auction-viewer"
LOG_FILE="/root/Projects/handbag-auth-nextjs/logs/rollback.log"
BACKUP_DIR="/root/Projects/handbag-auth-nextjs/backups/deployments"
# Logging function
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "${LOG_FILE}"
}
# Check if backup version specified
if [ $# -eq 0 ]; then
echo "Usage: $0 <backup_timestamp>"
echo ""
echo "Available backups:"
ls -lh "${BACKUP_DIR}" 2>/dev/null || echo "No backups found"
echo ""
echo "To rollback to latest backup:"
echo " $0 latest"
exit 1
fi
BACKUP_ARG=$1
# Resolve backup directory
if [ "${BACKUP_ARG}" == "latest" ]; then
BACKUP_PATH=$(ls -td "${BACKUP_DIR}"/backup_* | head -1)
else
BACKUP_PATH="${BACKUP_DIR}/backup_${BACKUP_ARG}"
fi
log "=========================================="
log "Starting rollback to ${BACKUP_PATH}"
log "=========================================="
# Verify backup exists
if [ ! -d "${BACKUP_PATH}" ]; then
log "ERROR: Backup directory not found: ${BACKUP_PATH}"
exit 1
fi
# Create safety backup of current state
SAFETY_BACKUP="${BACKUP_DIR}/pre-rollback_$(date +%Y%m%d_%H%M%S)"
log "Creating safety backup: ${SAFETY_BACKUP}"
mkdir -p "${SAFETY_BACKUP}"
cp -r "${PROJECT_ROOT}"/{server.js,package.json,package-lock.json,*.html} "${SAFETY_BACKUP}/" 2>/dev/null || true
# Stop service
log "Stopping ${SERVICE_NAME}..."
pm2 stop "${SERVICE_NAME}"
sleep 2
# Restore files
log "Restoring files from backup..."
cp -r "${BACKUP_PATH}"/* "${PROJECT_ROOT}/"
# Restore dependencies
log "Restoring dependencies..."
cd "${PROJECT_ROOT}"
npm install --production
# Start service
log "Starting ${SERVICE_NAME}..."
pm2 start "${SERVICE_NAME}"
sleep 5
# Verify service is healthy
HEALTH_CHECK=$(curl -s -o /dev/null -w "%{http_code}" http://45.61.58.125:7500/health)
if [ "${HEALTH_CHECK}" == "200" ]; then
log "Rollback successful - service is healthy"
else
log "WARNING: Service health check returned ${HEALTH_CHECK}"
fi
log "=========================================="
log "Rollback completed"
log "=========================================="
pm2 show "${SERVICE_NAME}"