# ============================================================ # zio-server 홈페이지 배포 스크립트 (Windows PowerShell) # 실행: .\deploy\03_deploy.ps1 -ServerIP "140.238.xxx.xxx" # ============================================================ param( [Parameter(Mandatory=$true)] [string]$ServerIP, [string]$KeyPath = "$env:USERPROFILE\.ssh\zio-server", [string]$User = "ubuntu" ) $GREEN = "`e[32m" $YELLOW = "`e[33m" $CYAN = "`e[36m" $NC = "`e[0m" function Log-Info { param($msg) Write-Host "${GREEN}[OK]${NC} $msg" } function Log-Section { param($msg) Write-Host "`n${CYAN}=== $msg ===${NC}" } function Log-Warn { param($msg) Write-Host "${YELLOW}[!]${NC} $msg" } $SSH = "ssh -i `"$KeyPath`" -o StrictHostKeyChecking=no ${User}@${ServerIP}" $SCP = "scp -i `"$KeyPath`" -o StrictHostKeyChecking=no" $ROOT = "C:\GUARDiA\workspace\zioinfo-web" Log-Section "1. React 프론트엔드 빌드" Set-Location "$ROOT\frontend" # vite.config.js 빌드 경로를 임시 dist로 변경 $viteCfg = Get-Content "vite.config.js" -Raw $buildCfg = $viteCfg -replace "outDir: '.*?'", "outDir: 'dist'" $buildCfg | Set-Content "vite.config.js" -Encoding utf8 npm run build if ($LASTEXITCODE -ne 0) { Write-Error "빌드 실패"; exit 1 } Log-Info "React 빌드 완료 → frontend/dist/" Log-Section "2. 빌드 파일 서버 업로드" Invoke-Expression "$SSH 'rm -rf /var/www/zioinfo/* && mkdir -p /var/www/zioinfo'" Invoke-Expression "$SCP -r `"$ROOT\frontend\dist\*`" ${User}@${ServerIP}:/var/www/zioinfo/" Log-Info "정적 파일 업로드 완료" Log-Section "3. Spring Boot JAR 빌드" Set-Location "$ROOT" if (Test-Path "pom.xml") { # Maven 빌드 (Spring Boot 백엔드) $mvnw = if (Test-Path "mvnw.cmd") { ".\mvnw.cmd" } else { "mvn" } & $mvnw clean package -DskipTests -q $jar = Get-ChildItem "target\*.jar" -Exclude "*sources*" | Select-Object -First 1 if ($jar) { Log-Info "JAR 빌드 완료: $($jar.Name)" Invoke-Expression "$SCP `"$($jar.FullName)`" ${User}@${ServerIP}:/opt/zioinfo/app/zioinfo.jar" Log-Info "JAR 업로드 완료" } } else { Log-Warn "pom.xml 없음 — Spring Boot 배포 스킵 (정적 파일만 배포)" } Log-Section "4. systemd 서비스 등록 (Spring Boot)" $serviceScript = @' # Spring Boot 서비스 설정 sudo tee /etc/systemd/system/zioinfo.service > /dev/null </dev/null || echo "서비스 시작 대기 중..." '@ if (Test-Path "$ROOT\target\*.jar") { Invoke-Expression "$SSH '$serviceScript'" Log-Info "Spring Boot 서비스 등록 완료" } Log-Section "5. Nginx 재시작 및 최종 확인" $checkScript = @" sudo systemctl reload nginx echo '--- Nginx 상태 ---' sudo systemctl is-active nginx echo '--- 포트 확인 ---' ss -tlnp | grep -E ':80|:443|:8080' echo '--- 디스크 사용량 ---' df -h / echo '--- 메모리 ---' free -h "@ Invoke-Expression "$SSH '$checkScript'" Log-Section "✅ 배포 완료!" Write-Host "" Write-Host "${GREEN}홈페이지 주소:${NC} http://$ServerIP" Write-Host "${GREEN}SSH 접속:${NC} ssh -i `"$KeyPath`" ubuntu@$ServerIP" Write-Host "" Write-Host "${YELLOW}브라우저에서 확인:${NC}" Start-Process "http://$ServerIP"