chore: root 경로의 미사용/과거 문서 및 스크립트를 docs/ 하위로 정리 격리
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

This commit is contained in:
2026-06-26 11:35:42 +09:00
parent 6051338367
commit 15c7971018
16 changed files with 1 additions and 1 deletions
+253
View File
@@ -0,0 +1,253 @@
#!/bin/bash
# Quant Engine Manual Deployment Script (v9)
# 환경: hz-prod-01 (178.104.200.7/172.17.0.1)
# 배포 경로: /home/kjh2064/quantengine_active
# 서비스: quantengine (systemd)
set -e
# ═══════════════════════════════════════════════════════════════
# 설정
# ═══════════════════════════════════════════════════════════════
DEPLOY_HOST="${1:-178.104.200.7}"
DEPLOY_USER="kjh2064"
SSH_KEY="${HOME}/.ssh/id_ed25519"
LOCAL_PUBLISH_DIR="$(pwd)/src/dotnet/QuantEngine.Web/publish"
REMOTE_DEPLOY_PATH="/home/kjh2064/quantengine_active"
REMOTE_BACKUP_PATH="/home/kjh2064/quantengine_backup"
SERVICE_NAME="quantengine"
echo "🚀 Quant Engine v9 Manual Deployment"
echo "═══════════════════════════════════════════════════════════════"
echo "Deploy Host: $DEPLOY_HOST"
echo "Deploy User: $DEPLOY_USER"
echo "Local Path: $LOCAL_PUBLISH_DIR"
echo "Remote Path: $REMOTE_DEPLOY_PATH"
echo "Backup Path: $REMOTE_BACKUP_PATH"
echo "Service: $SERVICE_NAME"
echo "Public URL: http://178.104.200.7/quant/"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 1: SSH 연결 확인
# ═══════════════════════════════════════════════════════════════
echo "📊 Step 1: SSH 연결 및 환경 파악..."
ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" << 'ENVCHECK'
echo "✓ SSH 연결 성공"
echo ""
echo "시스템 정보:"
hostname
uname -a
echo ""
echo "디스크 상태:"
df -h | grep -E "^/dev|Filesystem|/$"
echo ""
echo "서비스 상태:"
sudo systemctl status "$SERVICE_NAME" --no-pager 2>/dev/null | grep -E "Active:|Loaded:" || echo "⚠️ 서비스 상태 확인 필요"
echo ""
echo "배포 디렉토리:"
if [ -d "/home/kjh2064/quantengine_active" ]; then
echo "✓ /home/kjh2064/quantengine_active 존재"
ls -lh /home/kjh2064/quantengine_active | head -5
echo "..."
else
echo "✗ /home/kjh2064/quantengine_active 없음 (첫 배포)"
fi
echo ""
echo "Nginx 포트 확인:"
sudo netstat -tuln 2>/dev/null | grep ":80\|:443" || echo "⚠️ 포트 확인 필요"
echo ""
echo "Nginx 설정:"
cat /etc/nginx/sites-available/gitea-ip.conf | grep -A 5 "location /quant" || echo "⚠️ Nginx 설정 확인 필요"
ENVCHECK
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 2: 배포 파일 준비 확인
# ═══════════════════════════════════════════════════════════════
echo "📦 Step 2: 배포 파일 확인..."
if [ ! -d "$LOCAL_PUBLISH_DIR" ]; then
echo "❌ 오류: $LOCAL_PUBLISH_DIR 없음"
echo "먼저 'dotnet publish -c Release'를 실행하세요"
exit 1
fi
PACKAGE_SIZE=$(du -sh "$LOCAL_PUBLISH_DIR" | cut -f1)
FILE_COUNT=$(find "$LOCAL_PUBLISH_DIR" -type f | wc -l)
echo "✓ 배포 패키지:"
echo " 크기: $PACKAGE_SIZE"
echo " 파일 수: $FILE_COUNT"
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 3: 사전 확인
# ═══════════════════════════════════════════════════════════════
echo "✅ 배포 전 확인 사항:"
echo " [ ] Release 빌드 완료됨"
echo " [ ] publish 폴더 확인됨 ($PACKAGE_SIZE)"
echo " [ ] SSH 키 설정됨 ($SSH_KEY)"
echo ""
read -p "배포를 진행하시겠습니까? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "❌ 배포 취소됨"
exit 1
fi
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 4: 서비스 중지 및 백업 생성
# ═══════════════════════════════════════════════════════════════
echo "💾 Step 3: 서비스 중지 및 백업 생성..."
ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" << 'BACKUP'
set -e
SERVICE_NAME="quantengine"
DEPLOY_PATH="/home/kjh2064/quantengine_active"
BACKUP_DIR="/home/kjh2064/quantengine_backup"
BACKUP_NAME="quantengine_$(date +%Y%m%d_%H%M%S)"
echo " 서비스 중지 중..."
sudo systemctl stop "$SERVICE_NAME" 2>/dev/null || true
sleep 2
echo " ✓ 서비스 중지"
mkdir -p "$BACKUP_DIR"
if [ -d "$DEPLOY_PATH" ]; then
cp -r "$DEPLOY_PATH" "$BACKUP_DIR/$BACKUP_NAME"
echo "✓ 백업 생성: $BACKUP_DIR/$BACKUP_NAME"
# 최근 5개만 유지
BACKUP_COUNT=$(ls -1 "$BACKUP_DIR" | wc -l)
if [ "$BACKUP_COUNT" -gt 5 ]; then
OLD_BACKUPS=$(ls -1t "$BACKUP_DIR" | tail -n +6)
for backup in $OLD_BACKUPS; do
rm -rf "$BACKUP_DIR/$backup"
echo "🧹 오래된 백업 삭제: $backup"
done
fi
else
echo "⚠️ 기존 배포 없음 (첫 배포)"
mkdir -p "$DEPLOY_PATH"
fi
BACKUP
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 5: 파일 전송
# ═══════════════════════════════════════════════════════════════
echo "📤 Step 4: 파일 전송 (rsync)..."
rsync -avz --delete \
--rsh="ssh -i $SSH_KEY" \
"$LOCAL_PUBLISH_DIR/" \
"$DEPLOY_USER@$DEPLOY_HOST:$REMOTE_DEPLOY_PATH/"
echo "✓ 파일 전송 완료"
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 6: 권한 설정 및 서비스 재시작
# ═══════════════════════════════════════════════════════════════
echo "🔧 Step 5: 파일 검증 및 서비스 시작..."
ssh -i "$SSH_KEY" "$DEPLOY_USER@$DEPLOY_HOST" << 'FINALIZE'
set -e
SERVICE_NAME="quantengine"
DEPLOY_PATH="/home/kjh2064/quantengine_active"
echo " 파일 검증 중..."
if [ -f "$DEPLOY_PATH/QuantEngine.Web.dll" ]; then
echo " ✓ QuantEngine.Web.dll 확인됨"
else
echo " ❌ QuantEngine.Web.dll 없음 (배포 실패)"
exit 1
fi
echo " 서비스 시작 중..."
sudo systemctl start "$SERVICE_NAME" 2>/dev/null || echo " ⚠️ 서비스 시작 실패"
sleep 3
if sudo systemctl is-active --quiet "$SERVICE_NAME" 2>/dev/null; then
echo " ✓ $SERVICE_NAME 시작 완료"
else
echo " ⚠️ 서비스 상태 확인"
sudo systemctl status "$SERVICE_NAME" || true
fi
FINALIZE
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 7: 헬스 체크
# ═══════════════════════════════════════════════════════════════
echo "🧪 Step 6: 헬스 체크..."
for i in {1..30}; do
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
"http://$DEPLOY_HOST/quant/" 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ]; then
echo "✓ Health check PASS (HTTP 200)"
break
fi
echo " 시도 $i/30: HTTP $HTTP_CODE (대기 중...)"
sleep 2
done
echo ""
# ═══════════════════════════════════════════════════════════════
# 배포 완료
# ═══════════════════════════════════════════════════════════════
echo "═══════════════════════════════════════════════════════════════"
echo "✅ 배포 완료!"
echo "═══════════════════════════════════════════════════════════════"
echo ""
echo "📊 배포 정보:"
echo " 공인 URL: http://$DEPLOY_HOST/quant/"
echo " 배포 경로: $REMOTE_DEPLOY_PATH"
echo " 백업 경로: $REMOTE_BACKUP_PATH"
echo " 서비스: $SERVICE_NAME"
echo " 패키지 크기: $PACKAGE_SIZE"
echo ""
echo "🌐 구조:"
echo " Nginx: reverse proxy /quant/ → localhost:5000"
echo " 설정: /etc/nginx/sites-available/gitea-ip.conf"
echo ""
echo "🔍 로그 확인:"
echo " ssh -i $SSH_KEY $DEPLOY_USER@$DEPLOY_HOST 'sudo journalctl -u $SERVICE_NAME -f'"
echo ""
echo "🔄 롤백 (필요시):"
echo " ssh -i $SSH_KEY $DEPLOY_USER@$DEPLOY_HOST << 'EOF'"
echo " LATEST=\$(ls -t $REMOTE_BACKUP_PATH | head -1)"
echo " cp -r $REMOTE_BACKUP_PATH/\$LATEST/* $REMOTE_DEPLOY_PATH/"
echo " sudo systemctl restart $SERVICE_NAME"
echo " EOF"
echo ""
+225
View File
@@ -0,0 +1,225 @@
#!/bin/bash
# Quant Engine Production Deployment Script (v9)
# 환경: hz-prod-01, 공인IP 178.104.200.7, 내부 172.17.0.1
# 배포 경로: /home/kjh2064/quantengine_active
# Nginx 설정: /etc/nginx/sites-available/gitea-ip.conf (reverse proxy → localhost:5000)
set -e
# ═══════════════════════════════════════════════════════════════
# 설정
# ═══════════════════════════════════════════════════════════════
DEPLOY_HOST="178.104.200.7"
DEPLOY_INTERNAL_IP="172.17.0.1"
DEPLOY_USER="kjh2064"
DEPLOY_PATH="/home/kjh2064/quantengine_active"
SERVICE_NAME="quantengine"
BACKUP_PATH="/home/kjh2064/quantengine_backup"
LOCAL_PUBLISH_DIR="$(pwd)/src/dotnet/QuantEngine.Web/publish"
echo "🚀 Quant Engine v9 Production Deployment"
echo "═══════════════════════════════════════════════════════════════"
echo "Public URL: http://$DEPLOY_HOST/quant/"
echo "Internal IP: $DEPLOY_INTERNAL_IP"
echo "Deploy Path: $DEPLOY_PATH"
echo "Service: $SERVICE_NAME"
echo "Backup Path: $BACKUP_PATH"
echo "Hostname: hz-prod-01"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 1: 배포 파일 준비
# ═══════════════════════════════════════════════════════════════
echo "📦 Step 1: 배포 파일 확인..."
if [ ! -d "$LOCAL_PUBLISH_DIR" ]; then
echo "❌ 오류: $LOCAL_PUBLISH_DIR 없음"
echo "먼저 'dotnet publish -c Release'를 실행하세요"
exit 1
fi
PACKAGE_SIZE=$(du -sh "$LOCAL_PUBLISH_DIR" | cut -f1)
FILE_COUNT=$(find "$LOCAL_PUBLISH_DIR" -type f | wc -l)
echo "✓ 배포 패키지:"
echo " 크기: $PACKAGE_SIZE"
echo " 파일 수: $FILE_COUNT"
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 2: SSH 연결 확인
# ═══════════════════════════════════════════════════════════════
echo "🔐 Step 2: SSH 연결 확인..."
if ! ssh -o ConnectTimeout=10 "$DEPLOY_USER@$DEPLOY_HOST" "echo '✅ SSH 연결 성공'" &>/dev/null; then
echo "❌ SSH 연결 실패"
exit 1
fi
echo "✓ SSH 연결 확인됨"
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 3: 배포 전 확인
# ═══════════════════════════════════════════════════════════════
echo "✅ 배포 전 확인:"
echo " [ ] Release 빌드 완료됨 ($PACKAGE_SIZE)"
echo " [ ] SSH 연결 가능"
echo ""
read -p "배포를 진행하시겠습니까? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "❌ 배포 취소됨"
exit 1
fi
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 4: 서비스 중지 및 백업 생성
# ═══════════════════════════════════════════════════════════════
echo "🛑 Step 3: 서비스 중지 및 백업 생성..."
ssh "$DEPLOY_USER@$DEPLOY_HOST" << 'EOF'
set -e
SERVICE_NAME="quantengine"
DEPLOY_PATH="/home/kjh2064/quantengine_active"
BACKUP_PATH="/home/kjh2064/quantengine_backup"
BACKUP_NAME="quantengine_$(date +%Y%m%d_%H%M%S)"
echo " 서비스 중지 중..."
sudo systemctl stop "$SERVICE_NAME" 2>/dev/null || true
sleep 2
echo " ✓ 서비스 중지 완료"
echo " 백업 생성 중..."
mkdir -p "$BACKUP_PATH"
if [ -d "$DEPLOY_PATH" ]; then
cp -r "$DEPLOY_PATH" "$BACKUP_PATH/$BACKUP_NAME"
echo " ✓ 백업 생성: $BACKUP_PATH/$BACKUP_NAME"
# 최근 5개만 유지
BACKUP_COUNT=$(ls -1 "$BACKUP_PATH" | wc -l)
if [ "$BACKUP_COUNT" -gt 5 ]; then
OLD_BACKUPS=$(ls -1t "$BACKUP_PATH" | tail -n +6)
for backup in $OLD_BACKUPS; do
rm -rf "$BACKUP_PATH/$backup"
echo " 🧹 오래된 백업 삭제: $backup"
done
fi
else
echo " ⚠️ 기존 배포 없음 (첫 배포)"
mkdir -p "$DEPLOY_PATH"
fi
EOF
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 5: 파일 전송
# ═══════════════════════════════════════════════════════════════
echo "📤 Step 4: 파일 전송 (rsync)..."
rsync -avz --delete \
--rsh="ssh" \
"$LOCAL_PUBLISH_DIR/" \
"$DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH/"
echo "✓ 파일 전송 완료"
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 6: 서비스 시작
# ═══════════════════════════════════════════════════════════════
echo "🚀 Step 5: 서비스 시작..."
ssh "$DEPLOY_USER@$DEPLOY_HOST" << 'EOF'
set -e
SERVICE_NAME="quantengine"
DEPLOY_PATH="/home/kjh2064/quantengine_active"
echo " 파일 검증 중..."
if [ -f "$DEPLOY_PATH/QuantEngine.Web.dll" ]; then
echo " ✓ QuantEngine.Web.dll 확인됨"
else
echo " ❌ QuantEngine.Web.dll 없음 (배포 실패)"
exit 1
fi
echo " 서비스 시작 중..."
sudo systemctl start "$SERVICE_NAME"
sleep 3
if sudo systemctl is-active --quiet "$SERVICE_NAME"; then
echo " ✓ $SERVICE_NAME 시작 완료"
else
echo " ❌ $SERVICE_NAME 시작 실패"
sudo systemctl status "$SERVICE_NAME" || true
exit 1
fi
EOF
echo ""
# ═══════════════════════════════════════════════════════════════
# Step 7: 헬스 체크
# ═══════════════════════════════════════════════════════════════
echo "🧪 Step 6: 헬스 체크..."
for i in {1..30}; do
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" \
"http://$DEPLOY_HOST/quant/" 2>/dev/null || echo "000")
if [ "$HTTP_CODE" = "200" ]; then
echo "✓ Health check PASS (HTTP 200)"
break
fi
echo " 시도 $i/30: HTTP $HTTP_CODE (대기 중...)"
sleep 2
done
echo ""
# ═══════════════════════════════════════════════════════════════
# 배포 완료
# ═══════════════════════════════════════════════════════════════
echo "═══════════════════════════════════════════════════════════════"
echo "✅ 배포 완료!"
echo "═══════════════════════════════════════════════════════════════"
echo ""
echo "📊 배포 정보:"
echo " 공인 URL: http://$DEPLOY_HOST/quant/"
echo " 내부 IP: $DEPLOY_INTERNAL_IP"
echo " 배포 경로: $DEPLOY_PATH"
echo " 서비스: $SERVICE_NAME"
echo " 백업: $BACKUP_PATH"
echo ""
echo "🔍 로그 확인:"
echo " ssh $DEPLOY_USER@$DEPLOY_HOST 'sudo journalctl -u $SERVICE_NAME -f'"
echo ""
echo "🔄 롤백 (필요시):"
echo " ssh $DEPLOY_USER@$DEPLOY_HOST << 'ROLLBACK'"
echo " LATEST=\$(ls -t $BACKUP_PATH | head -1)"
echo " cp -r $BACKUP_PATH/\$LATEST/* $DEPLOY_PATH/"
echo " sudo systemctl restart $SERVICE_NAME"
echo " ROLLBACK"
echo ""
echo "🌐 Nginx 역방향 프록시 구조:"
echo " 공인 IP:178.104.200.7/quant/ → localhost:5000 (Nginx reverse proxy)"
echo " Nginx 설정: /etc/nginx/sites-available/gitea-ip.conf"
echo ""
+123
View File
@@ -0,0 +1,123 @@
#!/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
+202
View File
@@ -0,0 +1,202 @@
#!/bin/bash
# 원격 서버 환경 진단 스크립트
# SSH로 접속한 후 이 스크립트를 실행하여 환경 정보를 수집합니다.
echo "═══════════════════════════════════════════════════════════════"
echo " 원격 서버 환경 진단"
echo "═══════════════════════════════════════════════════════════════"
echo ""
# 1. 네트워크 정보
echo "1️⃣ 네트워크 정보"
echo "───────────────────────────────────────────────────────────────"
echo "공인 IP (외부에서 접속 가능):"
curl -s https://api.ipify.org
echo ""
echo "내부 IP 목록:"
ip addr show | grep -E "inet |inet6 " | grep -v "127.0.0.1"
echo ""
echo "호스트명:"
hostname
echo ""
echo "네트워크 인터페이스:"
ip link show | grep -E "^[0-9]+:|UP|DOWN"
echo ""
# 2. 디렉토리 구조
echo "2️⃣ 웹 서버 디렉토리 구조"
echo "───────────────────────────────────────────────────────────────"
# /var/www 확인
if [ -d /var/www ]; then
echo "✓ /var/www 존재"
ls -la /var/www/ | head -20
else
echo "✗ /var/www 없음"
fi
echo ""
# /var/www/quant 확인
if [ -d /var/www/quant ]; then
echo "✓ /var/www/quant 존재"
ls -la /var/www/quant/
du -sh /var/www/quant/*
else
echo "✗ /var/www/quant 없음"
fi
echo ""
# /var/www/quant/publish 확인
if [ -d /var/www/quant/publish ]; then
echo "✓ /var/www/quant/publish 존재"
ls -la /var/www/quant/publish/ | head -10
du -sh /var/www/quant/publish
else
echo "✗ /var/www/quant/publish 없음 (첫 배포)"
fi
echo ""
# 3. Nginx 설정
echo "3️⃣ Nginx 설정"
echo "───────────────────────────────────────────────────────────────"
if command -v nginx &> /dev/null; then
echo "✓ Nginx 설치됨"
nginx -v
echo ""
echo "Nginx 설정 파일 위치:"
nginx -T 2>/dev/null | grep "configuration file" | head -1
echo ""
echo "Nginx 실행 사용자:"
ps aux | grep nginx | grep -v grep | head -1
echo ""
echo "/quant 관련 설정:"
cat /etc/nginx/sites-available/default 2>/dev/null | grep -A 10 -B 2 "quant" || echo "quant 관련 설정 없음"
echo ""
else
echo "✗ Nginx 미설치"
fi
echo ""
# 4. 웹 서버 권한
echo "4️⃣ 파일 권한 및 소유자"
echo "───────────────────────────────────────────────────────────────"
echo "웹 서버 사용자:"
ps aux | grep -E "nginx|apache" | grep -v grep | head -1 | awk '{print $1}' || echo "확인 필요"
echo ""
echo "/var/www 권한:"
ls -ld /var/www
echo ""
if [ -d /var/www/quant ]; then
echo "/var/www/quant 권한:"
ls -ld /var/www/quant
echo ""
fi
if [ -d /var/www/quant/publish ]; then
echo "/var/www/quant/publish 권한:"
ls -ld /var/www/quant/publish
echo ""
fi
echo ""
# 5. 포트 상태
echo "5️⃣ 포트 상태"
echo "───────────────────────────────────────────────────────────────"
netstat -tuln 2>/dev/null | grep -E "^Proto|:80|:443" || ss -tuln | grep -E "LISTEN|:80|:443"
echo ""
echo ""
# 6. 시스템 정보
echo "6️⃣ 시스템 정보"
echo "───────────────────────────────────────────────────────────────"
echo "OS:"
uname -a
echo ""
echo "Linux 배포판:"
lsb_release -a 2>/dev/null || cat /etc/os-release | head -3
echo ""
echo "디스크 공간:"
df -h | grep -E "^/dev|Filesystem"
echo ""
echo ""
# 7. Sudo 권한
echo "7️⃣ 현재 사용자 정보"
echo "───────────────────────────────────────────────────────────────"
echo "현재 사용자:"
whoami
echo ""
echo "사용자 그룹:"
groups
echo ""
echo "Sudo 권한:"
sudo -l 2>/dev/null | grep -E "NOPASSWD|nginx|systemctl" || echo "sudo 권한 확인 필요"
echo ""
echo ""
# 8. Git/Gitea 정보
echo "8️⃣ Git/Gitea 정보"
echo "───────────────────────────────────────────────────────────────"
if command -v git &> /dev/null; then
echo "✓ Git 설치됨"
git --version
else
echo "✗ Git 미설치"
fi
echo ""
if command -v gitea &> /dev/null; then
echo "✓ Gitea 설치됨"
gitea -v
else
echo "✗ Gitea 미설치"
fi
echo ""
if [ -d /var/lib/gitea ] || [ -d /home/git/gitea-repositories ]; then
echo "Gitea 데이터 위치:"
[ -d /var/lib/gitea ] && echo " /var/lib/gitea"
[ -d /home/git/gitea-repositories ] && echo " /home/git/gitea-repositories"
else
echo "Gitea 데이터 위치: 확인 필요"
fi
echo ""
echo ""
echo "═══════════════════════════════════════════════════════════════"
echo "✅ 진단 완료"
echo "═══════════════════════════════════════════════════════════════"
echo ""
echo "위 정보를 바탕으로 배포 스크립트를 업데이트합니다."
echo ""
echo "특히 확인할 사항:"
echo " 1. 내부 IP 주소 (172로 시작하는 IP)"
echo " 2. /var/www/quant 경로 (또는 다른 경로?)"
echo " 3. 웹 서버 사용자 (www-data? nobody? 다른 사용자?)"
echo " 4. Nginx 설정 파일 위치"
echo " 5. /quant에 대한 nginx 설정"
echo ""
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env python3
import sqlite3
from pathlib import Path
print("="*80)
print("어드민 서버 & DB 연결 검증")
print("="*80)
dbs = {
'kis_data_collection.db': 'src/quant_engine/kis_data_collection.db',
'snapshot_admin.db': 'src/quant_engine/snapshot_admin.db'
}
all_ok = True
for name, path in dbs.items():
if not Path(path).exists():
print(f'[FAIL] {name} not found')
all_ok = False
continue
try:
conn = sqlite3.connect(path)
cursor = conn.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
tables = [row[0] for row in cursor.fetchall()]
# 각 테이블 행 수
table_info = {}
for table in tables:
if table == 'sqlite_sequence':
continue
cursor.execute(f'SELECT COUNT(*) FROM {table}')
count = cursor.fetchone()[0]
table_info[table] = count
conn.close()
file_size = Path(path).stat().st_size / 1024
print(f'\n[OK] {name} ({file_size:.2f} KB)')
for table, count in sorted(table_info.items()):
print(f' └─ {table}: {count} records')
except Exception as e:
print(f'\n[FAIL] {name}: {e}')
all_ok = False
print("\n" + "="*80)
if all_ok:
print("[결과] [OK] 어드민 서버 & DB 모두 정상 접속")
else:
print("[결과] [FAIL] DB 연결 실패")
+37
View File
@@ -0,0 +1,37 @@
#!/usr/bin/env python3
import sqlite3
from pathlib import Path
db_path = 'src/quant_engine/kis_data_collection.db'
conn = sqlite3.connect(db_path)
cursor = conn.cursor()
# 테이블 확인
cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
tables = [row[0] for row in cursor.fetchall()]
print('='*80)
print('KIS Data Collection DB Status')
print('='*80)
print(f'File size: {Path(db_path).stat().st_size / 1024:.2f} KB')
print(f'Tables: {tables}')
# data_feed 레코드 조회
if 'data_feed' in tables:
cursor.execute('SELECT COUNT(*) FROM data_feed')
count = cursor.fetchone()[0]
print(f'\ndata_feed table: {count} records')
# 샘플 출력
cursor.execute('''
SELECT ticker, name, close_price, entry_date, entry_stage, sector
FROM data_feed
ORDER BY entry_date DESC
''')
print('\n[Loaded Records]')
for row in cursor.fetchall():
ticker, name, price, date, stage, sector = row
print(f' {ticker:8} | {name:15} | {price:>10.0f} KRW | {date} | {stage:4} | {sector}')
conn.close()