#!/bin/bash # Quant Engine Web Service Deployment Script # 목표: publish 폴더를 웹 서버에 배포 set -e # 설정 SOURCE_DIR="src/dotnet/QuantEngine.Web/publish" DEPLOY_USER="kjh2064" DEPLOY_HOST="178.104.200.7" DEPLOY_PATH="/var/www/quant" SSH_KEY="${HOME}/.ssh/id_ed25519" echo "🚀 Quant Engine 웹 서비스 배포 시작" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "소스: $SOURCE_DIR" echo "대상: $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" # 1. 배포 폴더 생성/준비 echo "" echo "📦 Step 1: 배포 폴더 준비..." if [ ! -d "$SOURCE_DIR" ]; then echo "❌ 오류: publish 폴더 없음. 먼저 'dotnet publish -c Release'를 실행하세요" exit 1 fi echo "✓ publish 폴더 크기: $(du -sh $SOURCE_DIR | cut -f1)" echo "✓ 파일 수: $(find $SOURCE_DIR -type f | wc -l)" # 2. SSH 연결 확인 echo "" echo "🔐 Step 2: SSH 연결 확인..." if [ ! -f "$SSH_KEY" ]; then echo "❌ SSH 키 없음: $SSH_KEY" exit 1 fi ssh -i "$SSH_KEY" -o ConnectTimeout=10 "$DEPLOY_USER@$DEPLOY_HOST" "echo '✓ SSH 연결 성공'" || { echo "❌ SSH 연결 실패" exit 1 } # 3. 원격 백업 echo "" echo "💾 Step 3: 원격 백업 생성..." BACKUP_DIR="/var/www/quant_backup_$(date +%Y%m%d_%H%M%S)" ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" \ "sudo mkdir -p $DEPLOY_PATH && \ if [ -d $DEPLOY_PATH/publish ]; then \ sudo cp -r $DEPLOY_PATH/publish $BACKUP_DIR; \ echo '✓ 백업 생성: $BACKUP_DIR'; \ else \ echo '✓ 기존 배포 없음'; \ fi" # 4. 배포 echo "" echo "📤 Step 4: 파일 전송 중... (이 작업은 시간이 걸릴 수 있습니다)" rsync -av -e "ssh -i $SSH_KEY" \ --delete \ "$SOURCE_DIR/" \ "$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/publish/" \ || { echo "❌ 배포 실패" exit 1 } echo "✓ 파일 전송 완료" # 5. 권한 설정 echo "" echo "🔧 Step 5: 원격 권한 설정..." ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" \ "sudo chown -R www-data:www-data $DEPLOY_PATH/publish && \ sudo chmod -R 755 $DEPLOY_PATH/publish && \ echo '✓ 권한 설정 완료'" # 6. 웹 서버 재시작 echo "" echo "🔄 Step 6: 웹 서버 재시작 중..." ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" \ "sudo systemctl restart nginx && \ sleep 2 && \ sudo systemctl status nginx | grep Active && \ echo '✓ nginx 재시작 완료'" \ || { echo "⚠️ nginx 재시작 실패 (수동으로 확인 필요)" } # 7. 배포 확인 echo "" echo "🧪 Step 7: 배포 확인..." sleep 2 HEALTH_URL="http://178.104.200.7/quant/" HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" "$HEALTH_URL" || echo "000") if [ "$HTTP_CODE" = "200" ]; then echo "✅ 배포 성공! URL: $HEALTH_URL" elif [ "$HTTP_CODE" = "301" ] || [ "$HTTP_CODE" = "302" ]; then echo "✓ 배포 완료 (리다이렉트: $HTTP_CODE)" else echo "⚠️ HTTP 상태: $HTTP_CODE (nginx 설정 확인 필요)" fi # 8. 최종 보고 echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "✅ 배포 완료!" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo "📋 배포 정보:" echo " 웹사이트: http://178.104.200.7/quant/" echo " 배포 경로: $DEPLOY_PATH/publish" echo " 백업 위치: $BACKUP_DIR (필요시)" echo "" echo "🔍 로그 확인:" echo " ssh $DEPLOY_USER@$DEPLOY_HOST" echo " sudo tail -f /var/log/nginx/error.log" echo " sudo tail -f /var/log/nginx/access.log" echo "" exit 0