Files
kjh2064 15c7971018
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (pull_request) Failing after 4s
Quant Engine CI/CD Pipeline / validate-core (pull_request) Failing after 2m15s
Quant Engine CI/CD Pipeline / validate-ui-and-storage (pull_request) Has been skipped
chore: root 경로의 미사용/과거 문서 및 스크립트를 docs/ 하위로 정리 격리
2026-06-26 11:35:42 +09:00

124 lines
3.8 KiB
Bash

#!/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