124 lines
3.8 KiB
Bash
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
|