diff --git a/DEPLOYMENT_GUIDE.md b/DEPLOYMENT_GUIDE.md new file mode 100644 index 0000000..f97d6f4 --- /dev/null +++ b/DEPLOYMENT_GUIDE.md @@ -0,0 +1,374 @@ +# πŸš€ Quant Engine Deployment Guide + +**생성**: 2026-06-25 +**버전**: v9 Hardening Release +**νŒ¨ν‚€μ§€ 크기**: 24MB +**배포 λŒ€μƒ**: 178.104.200.7 (원격) λ˜λŠ” 둜컬 + +--- + +## πŸ“¦ 배포 μ „ 체크리슀트 + +### βœ… μ€€λΉ„λœ ν•­λͺ© +``` +[x] Release λΉŒλ“œ μ™„λ£Œ (24MB) +[x] MudBlazor UI μ™„μ„± (91/100 평가) +[x] Dashboard 고도화 (KPI + μ‹œμž₯ν˜„ν™© + μ„±κ³Ό + μ•Œκ³ λ¦¬μ¦˜ + μ‹ ν˜Έ) +[x] Program.cs μˆ˜μ • (AddMudServices μΆ”κ°€) +[x] 배포 슀크립트 μ€€λΉ„ (deploy.sh) +[x] Playwright ν…ŒμŠ€νŠΈ 톡과 +[x] git 컀밋 μ™„λ£Œ +``` + +### πŸ“ 배포 νŒ¨ν‚€μ§€ +``` +μœ„μΉ˜: src/dotnet/QuantEngine.Web/publish/ +크기: 24MB +파일: 172개 + +ꡬ성: +β”œβ”€β”€ DLL 파일 (10개) +β”‚ β”œβ”€β”€ QuantEngine.Web.dll (60KB) +β”‚ β”œβ”€β”€ QuantEngine.Core.dll (28KB) +β”‚ β”œβ”€β”€ QuantEngine.Application.dll (4KB) +β”‚ β”œβ”€β”€ QuantEngine.Infrastructure.dll (61KB) +β”‚ β”œβ”€β”€ MudBlazor.dll (8.7MB) ✨ +β”‚ β”œβ”€β”€ Npgsql.dll (1.5MB) +β”‚ β”œβ”€β”€ Dapper.dll (242KB) +β”‚ └── 기타 +β”œβ”€β”€ 정적 μžμ‚° (wwwroot/) +β”‚ β”œβ”€β”€ CSS (MudBlazor) +β”‚ β”œβ”€β”€ JS (Blazor Runtime) +β”‚ └── 이미지/폰트 +└── μ„€μ • 파일 + β”œβ”€β”€ appsettings.json + β”œβ”€β”€ runtimeconfig.json + └── deps.json +``` + +--- + +## 🌐 배포 μ˜΅μ…˜ + +### Option 1: 원격 배포 (ꢌμž₯) + +#### μ „μ œ 쑰건 +``` +βœ“ SSH ν‚€: ~/.ssh/id_ed25519 +βœ“ 원격 μ„œλ²„: 178.104.200.7 +βœ“ μ‚¬μš©μž: kjh2064 +βœ“ nginx μ„€μΉ˜ μ™„λ£Œ +``` + +#### μ‹€ν–‰ λͺ…λ Ή +```bash +cd /c/Temp/data_feed +chmod +x deploy.sh +./deploy.sh +``` + +#### 배포 κ³Όμ • +``` +1. SSH μ—°κ²° 확인 (10초) +2. 원격 λ°±μ—… 생성 (/var/www/quant_backup_*) +3. 파일 전솑 (rsync, 24MB ~ 1λΆ„) +4. κΆŒν•œ μ„€μ • (www-data:www-data) +5. nginx μž¬μ‹œμž‘ +6. ν—¬μŠ€ 체크 (HTTP 200 확인) +``` + +#### 성곡 μ‹œ 접속 +``` +URL: http://178.104.200.7/quant/ +``` + +--- + +### Option 2: 둜컬 배포 (개발/ν…ŒμŠ€νŠΈ) + +#### μ›Ή μ„œλΉ„μŠ€ μ‹€ν–‰ +```bash +cd src/dotnet/QuantEngine.Web +dotnet QuantEngine.Web.exe +``` + +#### 접속 +``` +URL: http://localhost:5265 +``` + +--- + +### Option 3: IIS 배포 (Windows μ „μš©) + +#### 1단계: ν˜ΈμŠ€νŒ… λ²ˆλ“€ μ„€μΉ˜ +``` +.NET 10.0 Hosting Bundle for IIS +λ‹€μš΄λ‘œλ“œ: https://dotnet.microsoft.com/download/dotnet +``` + +#### 2단계: IIS μ‚¬μ΄νŠΈ 생성 +``` +Site Name: Quant Engine +Physical Path: C:\var\www\quant\publish +Protocol: HTTP +Port: 80 +``` + +#### 3단계: μ‘μš© ν”„λ‘œκ·Έλž¨ ν’€ μ„€μ • +``` +.NET λŸ°νƒ€μž„ 버전: 10.0 +νŒŒμ΄ν”„λΌμΈ λͺ¨λ“œ: Integrated +관리 μ‚¬μš©μž: ApplicationPoolIdentity +``` + +#### 4단계: 배포 νŒ¨ν‚€μ§€ 볡사 +```powershell +Copy-Item -Path "src/dotnet/QuantEngine.Web/publish/*" ` + -Destination "C:\var\www\quant\publish" ` + -Recurse -Force +``` + +#### 5단계: IIS μž¬μ‹œμž‘ +```powershell +net stop IISADMIN +net start IISADMIN +``` + +--- + +## πŸ”§ 배포 ν›„ 확인 + +### 1. μ›Ή μ„œλΉ„μŠ€ μƒνƒœ +```bash +# HTTP μƒνƒœ 확인 +curl -I http://178.104.200.7/quant/ + +# κΈ°λŒ€ κ²°κ³Ό: +# HTTP/1.1 200 OK +# Content-Type: text/html +``` + +### 2. 둜그 λͺ¨λ‹ˆν„°λ§ +```bash +# SSH 접속 +ssh kjh2064@178.104.200.7 + +# nginx μ—λŸ¬ 둜그 +sudo tail -f /var/log/nginx/error.log + +# nginx μ ‘κ·Ό 둜그 +sudo tail -f /var/log/nginx/access.log + +# μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜그 (있으면) +sudo journalctl -u quant-engine -f +``` + +### 3. μ„±λŠ₯ ν…ŒμŠ€νŠΈ +```bash +# νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œκ°„ +time curl http://178.104.200.7/quant/ > /dev/null + +# λ™μ‹œ μ—°κ²° ν…ŒμŠ€νŠΈ (100 users) +ab -n 100 -c 10 http://178.104.200.7/quant/ +``` + +### 4. κΈ°λŠ₯ 검증 +``` +βœ“ Dashboard νŽ˜μ΄μ§€ λ‘œλ“œ +βœ“ KPI μΉ΄λ“œ ν‘œμ‹œ +βœ“ μ„±κ³Ό λ©”νŠΈλ¦­ λ Œλ”λ§ +βœ“ μ•Œκ³ λ¦¬μ¦˜ ν…Œμ΄λΈ” ν‘œμ‹œ +βœ“ μ‹ ν˜Έ ν”Όλ“œ μ—…λ°μ΄νŠΈ +βœ“ MudBlazor μŠ€νƒ€μΌ 적용 +βœ“ λ°˜μ‘ν˜• λ ˆμ΄μ•„μ›ƒ (λͺ¨λ°”일/νƒœλΈ”λ¦Ώ/λ°μŠ€ν¬ν†±) +``` + +--- + +## πŸ“Š 배포 체크리슀트 + +### μ „ 배포 +``` +[ ] Release λΉŒλ“œ 성곡 확인 +[ ] appsettings.json λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° 확인 +[ ] SSH ν‚€ κΆŒν•œ 확인 (chmod 600) +[ ] nginx μ„€μ • 확인 +[ ] λ°©ν™”λ²½ 포트 확인 (HTTP 80, HTTPS 443) +[ ] SSL μΈμ¦μ„œ 확인 (ν•„μš”μ‹œ) +``` + +### 배포 쀑 +``` +[ ] deploy.sh μ‹€ν–‰ +[ ] 파일 전솑 μ§„ν–‰ 상황 λͺ¨λ‹ˆν„°λ§ +[ ] κΆŒν•œ μ„€μ • 확인 +[ ] nginx μž¬μ‹œμž‘ 확인 +``` + +### 배포 ν›„ +``` +[ ] μ›Ή μ„œλΉ„μŠ€ 접속 확인 +[ ] HTTP μƒνƒœ 200 확인 +[ ] 둜그 μ—λŸ¬ 확인 +[ ] μ„±λŠ₯ λ©”νŠΈλ¦­ 확인 +[ ] κΈ°λŠ₯ ν…ŒμŠ€νŠΈ μ™„λ£Œ +[ ] λͺ¨λ°”일 λ°˜μ‘ν˜• 확인 +``` + +--- + +## ⚠️ 문제 ν•΄κ²° + +### 문제 1: SSH μ—°κ²° μ‹€νŒ¨ +``` +원인: SSH ν‚€ μ—†μŒ λ˜λŠ” κΆŒν•œ 문제 +ν•΄κ²°: +1. SSH ν‚€ 생성: ssh-keygen -t ed25519 +2. ν‚€ κΆŒν•œ μ„€μ •: chmod 600 ~/.ssh/id_ed25519 +3. μ„œλ²„ 곡개 ν‚€ 등둝: ssh-copy-id kjh2064@178.104.200.7 +``` + +### 문제 2: 파일 전솑 μ‹€νŒ¨ +``` +원인: λ„€νŠΈμ›Œν¬ λŠκΉ€ λ˜λŠ” λ””μŠ€ν¬ λΆ€μ‘± +ν•΄κ²°: +1. λ„€νŠΈμ›Œν¬ μƒνƒœ 확인 +2. 원격 μ„œλ²„ λ””μŠ€ν¬ 확인: df -h +3. rsync μž¬μ‹œλ„: rsync -avz --delete ... +``` + +### 문제 3: nginx 403 Forbidden +``` +원인: 파일 κΆŒν•œ 문제 +ν•΄κ²°: +sudo chown -R www-data:www-data /var/www/quant/publish +sudo chmod -R 755 /var/www/quant/publish +``` + +### 문제 4: λ°μ΄ν„°λ² μ΄μŠ€ μ—°κ²° μ‹€νŒ¨ +``` +원인: PostgreSQL λ―Έμ‹€ν–‰ λ˜λŠ” 자격 증λͺ… 였λ₯˜ +ν•΄κ²°: +1. PostgreSQL μƒνƒœ 확인: sudo systemctl status postgresql +2. μ—°κ²° λ¬Έμžμ—΄ 확인: appsettings.json +3. λ°©ν™”λ²½ 포트 확인: netstat -tuln | grep 5432 +``` + +### 문제 5: MudBlazor μŠ€νƒ€μΌ 미적용 +``` +원인: CSS 파일 λ‘œλ“œ μ‹€νŒ¨ +ν•΄κ²°: +1. nginx μ„€μ •μ—μ„œ 정적 파일 경둜 확인 +2. _content/MudBlazor/ 폴더 κΆŒν•œ 확인 +3. λΈŒλΌμš°μ € μΊμ‹œ μ‚­μ œ +``` + +--- + +## πŸ”„ 배포 ν›„ 운영 + +### λͺ¨λ‹ˆν„°λ§ +```bash +# μ‹€μ‹œκ°„ λͺ¨λ‹ˆν„°λ§ +watch -n 5 'curl -s -o /dev/null -w "%{http_code}\n" http://178.104.200.7/quant/' + +# 둜그 집계 (ELK Stack ꢌμž₯) +sudo tail -f /var/log/nginx/access.log | grep quant + +# μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§ +top -p $(pgrep -f "QuantEngine.Web.exe") +``` + +### λ°±μ—… +```bash +# 일일 λ°±μ—… (cron) +0 2 * * * /usr/local/bin/backup-quant-engine.sh + +# λ°±μ—… 슀크립트 +#!/bin/bash +BACKUP_DIR="/var/backups/quant-engine" +mkdir -p $BACKUP_DIR +tar -czf $BACKUP_DIR/quant-$(date +%Y%m%d_%H%M%S).tar.gz /var/www/quant/publish/ +find $BACKUP_DIR -name "quant-*.tar.gz" -mtime +30 -delete +``` + +### 둜그 관리 +```bash +# 둜그 λ‘œν…Œμ΄μ…˜ μ„€μ • (/etc/logrotate.d/quant-engine) +/var/log/nginx/quant/*.log { + daily + rotate 7 + compress + delaycompress + notifempty + create 0640 www-data www-data + sharedscripts + postrotate + systemctl reload nginx + endscript +} +``` + +--- + +## πŸ“‹ 배포 μš”μ•½ + +| ν•­λͺ© | μƒνƒœ | λΉ„κ³  | +|------|:----:|------| +| Release λΉŒλ“œ | βœ… | 24MB, 172 파일 | +| UI 완성도 | βœ… | 91/100 (우수) | +| ν…ŒμŠ€νŠΈ | βœ… | Playwright 톡과 | +| 배포 슀크립트 | βœ… | SSH 기반 μžλ™λ°°ν¬ | +| λ¬Έμ„œ | βœ… | μ™„μ „νžˆ μž‘μ„±λ¨ | +| **배포 μ€€λΉ„** | **βœ…** | **μ¦‰μ‹œ 배포 κ°€λŠ₯** | + +--- + +## 🎯 배포 μ»€λ§¨λ“œ + +### λΉ λ₯Έ 배포 (ν•œ 쀄 λͺ…λ Ή) +```bash +cd /c/Temp/data_feed && ./deploy.sh +``` + +### 단계별 배포 +```bash +# 1. Release λΉŒλ“œ +cd src/dotnet/QuantEngine.Web +dotnet publish -c Release --output ./publish + +# 2. λ°±μ—… 생성 +ssh kjh2064@178.104.200.7 \ + 'sudo cp -r /var/www/quant/publish /var/www/quant_backup_$(date +%Y%m%d_%H%M%S)' + +# 3. 파일 전솑 +rsync -avz --delete ./publish/ \ + kjh2064@178.104.200.7:/var/www/quant/publish/ + +# 4. κΆŒν•œ μ„€μ • +ssh kjh2064@178.104.200.7 \ + 'sudo chown -R www-data:www-data /var/www/quant/publish && \ + sudo chmod -R 755 /var/www/quant/publish' + +# 5. μ„œλΉ„μŠ€ μž¬μ‹œμž‘ +ssh kjh2064@178.104.200.7 \ + 'sudo systemctl restart nginx' + +# 6. μƒνƒœ 확인 +curl -I http://178.104.200.7/quant/ +``` + +--- + +**배포 μ€€λΉ„ μ™„λ£Œ!** πŸš€ + +λ‹€μŒ μ»€λ§¨λ“œλ₯Ό μ‹€ν–‰ν•˜μ—¬ 배포λ₯Ό μ‹œμž‘ν•˜μ„Έμš”: +```bash +./deploy.sh +``` + +**λ˜λŠ”** μˆ˜λ™ 배포: +```bash +dotnet publish -c Release && rsync -avz --delete ./publish/ kjh2064@178.104.200.7:/var/www/quant/publish/ +``` diff --git a/DEPLOYMENT_STEPS.md b/DEPLOYMENT_STEPS.md new file mode 100644 index 0000000..5374d1f --- /dev/null +++ b/DEPLOYMENT_STEPS.md @@ -0,0 +1,322 @@ +# πŸš€ Quant Engine 배포 (Step-by-Step) + +**μƒνƒœ**: 배포 μ€€λΉ„ μ™„λ£Œ +**μΌμ‹œ**: 2026-06-25 18:30 KST +**νŒ¨ν‚€μ§€**: 24MB (173 파일) + +--- + +## 🎯 배포 체크 + +### βœ… ν˜„μž¬ μƒνƒœ +``` +[βœ“] Release λΉŒλ“œ: μ™„λ£Œ (24MB) +[βœ“] SSH μ—°κ²°: 성곡 (178.104.200.7) +[βœ“] 배포 슀크립트: 쀀비됨 +[⚠] sudo κΆŒν•œ: 터미널 μƒν˜Έμž‘μš© ν•„μš” +``` + +--- + +## πŸ“‹ 배포 μ˜΅μ…˜ + +### **ꢌμž₯: 원격 SSH 배포** (κ΄€λ¦¬μž κΆŒν•œ ν•„μš”) + +#### ν„°λ―Έλ„μ—μ„œ μ‹€ν–‰ (λŒ€ν™”ν˜• λͺ¨λ“œ) +```bash +# 1단계: 배포 디렉토리 이동 +cd /c/Temp/data_feed + +# 2단계: SSH 접속 (λŒ€ν™”ν˜•) +ssh kjh2064@178.104.200.7 + +# 원격 μ„œλ²„μ—μ„œ μ‹€ν–‰: +# ───────────────────────────────────── + +# 3단계: λ°±μ—… 생성 +sudo mkdir -p /var/www/quant_backup +sudo cp -r /var/www/quant/publish /var/www/quant_backup/backup_$(date +%Y%m%d_%H%M%S) +echo "βœ“ λ°±μ—… μ™„λ£Œ" + +# 4단계: 배포 폴더 κΆŒν•œ μ„€μ • +sudo chmod -R 777 /var/www/quant/publish +echo "βœ“ κΆŒν•œ μ„€μ •" + +# 5단계: λ‘œμ»¬μ—μ„œ 파일 전솑 μ€€λΉ„ +# (λ‹€μŒ ν„°λ―Έλ„μ—μ„œ μ‹€ν–‰) +``` + +#### 둜컬 터미널 (μƒˆ μ°½) +```bash +# 파일 전솑 +cd /c/Temp/data_feed +rsync -avz --delete --progress \ + src/dotnet/QuantEngine.Web/publish/ \ + kjh2064@178.104.200.7:/var/www/quant/publish/ + +# 좜λ ₯: +# - μ‚­μ œλœ 파일: (μ—†μŒ) +# - μ „μ†‘λœ 파일: 173개 +# - 전솑 크기: 24MB +# - μ˜ˆμƒ μ‹œκ°„: 1-3λΆ„ +``` + +#### 원격 μ„œλ²„ 계속 (첫 터미널) +```bash +# 6단계: κΆŒν•œ μ΅œμ’… μ„€μ • +sudo chown -R www-data:www-data /var/www/quant/publish +sudo chmod -R 755 /var/www/quant/publish +echo "βœ“ κΆŒν•œ μ΅œμ’… μ„€μ •" + +# 7단계: nginx μž¬μ‹œμž‘ +sudo systemctl restart nginx +echo "βœ“ nginx μž¬μ‹œμž‘ μ™„λ£Œ" + +# 8단계: μƒνƒœ 확인 +sudo systemctl status nginx +curl -I http://localhost/quant/ +echo "βœ“ 배포 μ™„λ£Œ" + +# 9단계: SSH μ’…λ£Œ +exit +``` + +--- + +### **λΉ λ₯Έ 배포** (SSH ν‚€ 기반, λΉ„λŒ€ν™”ν˜•) + +#### ν•œ 쀄 λͺ…λ Ή +```bash +cd /c/Temp/data_feed && \ +rsync -avz --delete src/dotnet/QuantEngine.Web/publish/ \ + kjh2064@178.104.200.7:/var/www/quant/publish/ && \ +ssh kjh2064@178.104.200.7 \ + 'sudo systemctl restart nginx && echo "βœ“ 배포 μ™„λ£Œ"' +``` + +--- + +### **둜컬 ν…ŒμŠ€νŠΈ 배포** (λ„€νŠΈμ›Œν¬ λΆˆν•„μš”) + +#### Windows PowerShell +```powershell +# 1. IIS μ‚¬μ΄νŠΈ 폴더 생성 +New-Item -ItemType Directory -Path "C:\var\www\quant\publish" -Force + +# 2. 배포 파일 볡사 +Copy-Item -Path "src/dotnet/QuantEngine.Web/publish/*" ` + -Destination "C:\var\www\quant\publish" ` + -Recurse -Force + +# 3. IISμ—μ„œ μƒˆ μ‚¬μ΄νŠΈ 생성 +# 이름: Quant Engine +# 경둜: C:\var\www\quant\publish +# 포트: 8080 + +# 4. μ•± ν’€ μ„€μ • +# .NET λŸ°νƒ€μž„: 10.0 +# νŒŒμ΄ν”„λΌμΈ λͺ¨λ“œ: Integrated + +# 5. 접속 +# http://localhost:8080 +``` + +--- + +## πŸ” 배포 ν›„ 검증 + +### 1️⃣ μ›Ή μ„œλΉ„μŠ€ μƒνƒœ 확인 +```bash +# HTTP 응닡 확인 +curl -I http://178.104.200.7/quant/ + +# κΈ°λŒ€ κ²°κ³Ό: +# HTTP/1.1 200 OK +# Content-Type: text/html; charset=utf-8 +# Server: nginx +``` + +### 2️⃣ 둜그 확인 +```bash +# nginx μ—λŸ¬ 둜그 +ssh kjh2064@178.104.200.7 'sudo tail -20 /var/log/nginx/error.log' + +# κΈ°λŒ€: μ—λŸ¬ μ—†μŒ + +# μ ‘κ·Ό 둜그 +ssh kjh2064@178.104.200.7 'sudo tail -10 /var/log/nginx/access.log' + +# κΈ°λŒ€: GET /quant/ 200 응닡 +``` + +### 3️⃣ κΈ°λŠ₯ ν…ŒμŠ€νŠΈ +```bash +# νŽ˜μ΄μ§€ λ‘œλ“œ μ‹œκ°„ +time curl -s http://178.104.200.7/quant/ | wc -l +# κΈ°λŒ€: < 2초, > 1000 라인 + +# MudBlazor λ‘œλ“œ 확인 +curl -s http://178.104.200.7/quant/ | grep "MudBlazor" +# κΈ°λŒ€: MudBlazor.min.css, MudBlazor.min.js 포함 +``` + +### 4️⃣ λΈŒλΌμš°μ € ν…ŒμŠ€νŠΈ +``` +1. http://178.104.200.7/quant/ 접속 +2. Dashboard νŽ˜μ΄μ§€ λ‘œλ“œ 확인 +3. KPI μΉ΄λ“œ λ Œλ”λ§ 확인 +4. μ„±κ³Ό λ©”νŠΈλ¦­ ν‘œμ‹œ 확인 +5. μ•Œκ³ λ¦¬μ¦˜ ν…Œμ΄λΈ” ν‘œμ‹œ 확인 +6. μ‹ ν˜Έ ν”Όλ“œ ν‘œμ‹œ 확인 +7. MudBlazor μŠ€νƒ€μΌ 적용 확인 +8. λͺ¨λ°”일 λ°˜μ‘ν˜• 확인 (F12 β†’ λͺ¨λ°”일 λͺ¨λ“œ) +``` + +--- + +## βœ… 배포 체크리슀트 + +### 배포 μ „ +``` +[ ] Release λΉŒλ“œ μ™„λ£Œ 확인 +[ ] SSH ν‚€ κΆŒν•œ 확인 (chmod 600 ~/.ssh/id_ed25519) +[ ] 원격 μ„œλ²„ 접속 κ°€λŠ₯ 확인 +[ ] λ””μŠ€ν¬ 곡간 확인 (df -h: > 500MB ν•„μš”) +[ ] nginx μ‹€ν–‰ 확인 (systemctl status nginx) +``` + +### 배포 쀑 +``` +[ ] λ°±μ—… 생성 확인 +[ ] 파일 전솑 μ§„ν–‰ 상황 λͺ¨λ‹ˆν„°λ§ +[ ] κΆŒν•œ μ„€μ • μ™„λ£Œ 확인 +[ ] nginx μž¬μ‹œμž‘ 성곡 확인 +``` + +### 배포 ν›„ +``` +[ ] HTTP 200 응닡 확인 +[ ] Dashboard νŽ˜μ΄μ§€ λ‘œλ“œ 확인 +[ ] MudBlazor μŠ€νƒ€μΌ λ Œλ”λ§ 확인 +[ ] λͺ¨λ“  μΉ΄λ“œ ν‘œμ‹œ 확인 +[ ] ν…Œμ΄λΈ” 데이터 ν‘œμ‹œ 확인 +[ ] λͺ¨λ°”일 λ°˜μ‘ν˜• μž‘λ™ 확인 +[ ] 둜그 μ—λŸ¬ μ—†μŒ 확인 +``` + +--- + +## πŸ†˜ κΈ΄κΈ‰ 볡ꡬ + +### 이전 λ²„μ „μœΌλ‘œ 볡원 +```bash +ssh kjh2064@178.104.200.7 << 'EOF' +# λ°±μ—… λͺ©λ‘ 확인 +ls -la /var/www/quant_backup/ + +# μ΅œμ‹  λ°±μ—…μœΌλ‘œ 볡원 +LATEST_BACKUP=$(ls -t /var/www/quant_backup/ | head -1) +sudo cp -r /var/www/quant_backup/$LATEST_BACKUP/* /var/www/quant/publish/ + +# κΆŒν•œ μž¬μ„€μ • +sudo chown -R www-data:www-data /var/www/quant/publish +sudo chmod -R 755 /var/www/quant/publish + +# nginx μž¬μ‹œμž‘ +sudo systemctl restart nginx + +echo "βœ“ 볡원 μ™„λ£Œ" +EOF +``` + +--- + +## πŸ“Š 배포 κ²°κ³Ό μš”μ•½ + +### μ˜ˆμƒ κ²°κ³Ό +``` +배포 νŒ¨ν‚€μ§€: 24MB (173 파일) +전솑 μ‹œκ°„: 1-3λΆ„ +배포 ν›„ μƒνƒœ: HTTP 200 OK +MudBlazor λ‘œλ“œ: βœ… CSS + JS 포함 +Dashboard λ Œλ”λ§: βœ… KPI + λ©”νŠΈλ¦­ + μ•Œκ³ λ¦¬μ¦˜ + μ‹ ν˜Έ +응닡 μ‹œκ°„: < 1초 +λ©”λͺ¨λ¦¬ μ‚¬μš©: ~150MB (초기) +``` + +### 배포 μ™„λ£Œ ν›„ +``` +βœ… μ›Ή μ„œλΉ„μŠ€ 운영 μ‹œμž‘ +βœ… μ‹€μ‹œκ°„ μ‹ ν˜Έ λͺ¨λ‹ˆν„°λ§ κ°€λŠ₯ +βœ… μ„±κ³Ό λ©”νŠΈλ¦­ λŒ€μ‹œλ³΄λ“œ 접속 κ°€λŠ₯ +βœ… μ•Œκ³ λ¦¬μ¦˜ μ§„ν–‰ 상황 좔적 κ°€λŠ₯ +βœ… λͺ¨λ°”일 접속 κ°€λŠ₯ (λ°˜μ‘ν˜•) +``` + +--- + +## πŸ“ž 배포 문제 ν•΄κ²° + +| 문제 | 원인 | ν•΄κ²° | +|------|------|------| +| SSH μ—°κ²° μ‹€νŒ¨ | SSH ν‚€ μ—†μŒ | `ssh-keygen -t ed25519` | +| sudo μ•”ν˜Έ μš”μ²­ | 터미널 μƒν˜Έμž‘μš© | SSH λŒ€ν™”ν˜• λͺ¨λ“œ μ‚¬μš© | +| 파일 전솑 μ‹€νŒ¨ | λ„€νŠΈμ›Œν¬ λ‹¨μ ˆ | rsync μž¬μ‹€ν–‰ (재개 κ°€λŠ₯) | +| HTTP 403 | 파일 κΆŒν•œ | `sudo chmod -R 755 /var/www/quant` | +| μŠ€νƒ€μΌ 미적용 | CSS λ‘œλ“œ μ‹€νŒ¨ | nginx μΊμ‹œ μ‚­μ œ, λΈŒλΌμš°μ € μΊμ‹œ μ‚­μ œ | +| 포트 좩돌 | nginx λ―Έμ‹€ν–‰ | `sudo systemctl start nginx` | + +--- + +## 🎯 λ‹€μŒ 단계 + +### 배포 μ™„λ£Œ ν›„ +``` +1. βœ… μ›Ή μ„œλΉ„μŠ€ λͺ¨λ‹ˆν„°λ§ μ„€μ • +2. βœ… 둜그 μˆ˜μ§‘ μ„€μ • (ELK Stack λ˜λŠ” CloudWatch) +3. βœ… λ°±μ—… μžλ™ν™” (cron λ˜λŠ” systemd timer) +4. βœ… μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§ (Prometheus + Grafana) +5. ⏳ μΆ”κ°€ κΈ°λŠ₯ κ΅¬ν˜„ (Portfolio, Analytics, Reports) +``` + +### 운영 +``` +1. 일일 ν—¬μŠ€ 체크 (cron) +2. μ£Όκ°„ 둜그 뢄석 +3. μ›”κ°„ μ„±λŠ₯ 리뷰 +4. μ‹€μ‹œκ°„ μ‹ ν˜Έ λͺ¨λ‹ˆν„°λ§ +5. 거래 κ²°κ³Ό 좔적 (live_outcome_ledger) +``` + +--- + +## πŸ“ 배포 λͺ…λ Ήμ–΄ 볡사 + +### λΉ λ₯Έ 배포 (ν•œ 쀄) +```bash +cd /c/Temp/data_feed && rsync -avz --delete src/dotnet/QuantEngine.Web/publish/ kjh2064@178.104.200.7:/var/www/quant/publish/ && ssh kjh2064@178.104.200.7 'sudo systemctl restart nginx' +``` + +### μ•ˆμ „ν•œ 배포 (단계별) +```bash +# Step 1: λ°±μ—… +ssh kjh2064@178.104.200.7 'sudo cp -r /var/www/quant/publish /var/www/quant_backup/backup_$(date +%Y%m%d_%H%M%S)' + +# Step 2: 전솑 +rsync -avz --delete src/dotnet/QuantEngine.Web/publish/ kjh2064@178.104.200.7:/var/www/quant/publish/ + +# Step 3: κΆŒν•œ +ssh kjh2064@178.104.200.7 'sudo chown -R www-data:www-data /var/www/quant/publish && sudo chmod -R 755 /var/www/quant/publish' + +# Step 4: μž¬μ‹œμž‘ +ssh kjh2064@178.104.200.7 'sudo systemctl restart nginx' + +# Step 5: 확인 +curl -I http://178.104.200.7/quant/ +``` + +--- + +**배포 μ€€λΉ„ μ™„λ£Œ!** πŸš€ + +μœ„μ˜ λͺ…λ Ήμ–΄λ₯Ό λ³΅μ‚¬ν•˜μ—¬ 터미널에 λΆ™μ—¬λ„£κΈ°ν•˜μ—¬ 배포λ₯Ό μ‹œμž‘ν•˜μ„Έμš”.