smart_ims/scripts/nas/restore_smartims.sh

68 lines
2.1 KiB
Bash

#!/bin/bash
# ==========================================
# Smart IMS Emergency Restore Script (Revised)
# 작성일: 2026-01-26
# ==========================================
PROJECT_DIR="/volume1/web/smartims"
BACKUP_DIR="/volume1/smart_ims"
SERVER_DIR="${PROJECT_DIR}/server"
MYSQL_BIN="/usr/local/mariadb10/bin"
DB_USER="choibk"
DB_PORT="3307"
DB_NAME="sokuree_platform_prod"
DB_HOST="127.0.0.1"
echo "=============================================="
echo "🚨 EMERGENCY RESTORE PROCESS STARTING"
echo "=============================================="
# DB 비밀번호 추출 (Node.js)
if [ -f "${SERVER_DIR}/.env" ]; then
cd "${SERVER_DIR}"
DB_PASS=$(node -e "try{const fs=require('fs');const c=fs.readFileSync('.env','utf8');const m=c.match(/^DB_PASSWORD=(.*)$/m);if(m){let p=m[1].trim();if((p.startsWith('\"')&&p.endsWith('\"'))||(p.startsWith(\"'\")&&p.endsWith(\"'\"))){p=p.slice(1,-1);}process.stdout.write(p);}}catch(e){}")
else
echo "❌ [Error] .env file not found."
exit 1
fi
# 1. 최신 이미지 복구
echo "[Step 1] Finding latest image backup..."
LATEST_IMG=$(ls -t "${BACKUP_DIR}"/backup_images_*.tar.gz 2>/dev/null | head -n 1)
if [ -n "$LATEST_IMG" ]; then
echo "✅ Found: $LATEST_IMG"
echo " Restoring images..."
tar -xzf "$LATEST_IMG" -C "${PROJECT_DIR}"
else
echo "⚠️ [Warning] No image backup found."
fi
# 2. 최신 DB 복구
echo "[Step 2] Finding latest database backup..."
LATEST_SQL=$(ls -t "${BACKUP_DIR}"/backup_db_*.sql 2>/dev/null | head -n 1)
if [ -z "$LATEST_SQL" ]; then
echo "❌ [Error] No database backup found!"
exit 1
else
echo "✅ Found: $LATEST_SQL"
echo " Restoring database..."
"${MYSQL_BIN}/mysql" -h "${DB_HOST}" -u "${DB_USER}" "-p${DB_PASS}" --port "${DB_PORT}" "${DB_NAME}" < "$LATEST_SQL"
if [ $? -eq 0 ]; then
echo "✅ Database restore complete."
else
echo "❌ [Error] Database restore failed."
exit 1
fi
fi
echo "=============================================="
echo "🎉 SYSTEM RESTORE COMPLETED"
echo " Please restart PM2: pm2 reload smartims-api"
echo "=============================================="