← 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}"