150 lines
4.4 KiB
PowerShell
150 lines
4.4 KiB
PowerShell
$Root = Split-Path $PSScriptRoot -Parent
|
|
Set-Location $Root
|
|
|
|
. "$PSScriptRoot\db-local.ps1"
|
|
|
|
Write-Host '================================'
|
|
Write-Host ' EENE Dashboard - Start'
|
|
Write-Host ' Data: data/postgres, uploads/'
|
|
Write-Host '================================'
|
|
Write-Host ''
|
|
|
|
foreach ($dir in @('data', 'data\postgres', 'data\seed', 'uploads\team')) {
|
|
$p = Join-Path $Root $dir
|
|
if (-not (Test-Path $p)) { New-Item -ItemType Directory -Force -Path $p | Out-Null }
|
|
}
|
|
|
|
$envPath = Join-Path $Root 'backend\.env'
|
|
$envExample = Join-Path $Root 'backend\.env.example'
|
|
if (-not (Test-Path $envPath)) {
|
|
Write-Host '[Setup] Creating backend\.env ...'
|
|
Copy-Item $envExample $envPath
|
|
Write-Host ' Done.'
|
|
Write-Host ''
|
|
}
|
|
|
|
Ensure-BackendEnv -Root $Root
|
|
|
|
Write-Host '[1/4] Stopping existing API/WEB ...'
|
|
& "$PSScriptRoot\kill-ports.ps1" | Out-Null
|
|
Start-Sleep -Seconds 1
|
|
Write-Host ' Done.'
|
|
Write-Host ''
|
|
|
|
Write-Host '[2/4] Starting database (data\postgres) ...'
|
|
$dbMode = 'unknown'
|
|
|
|
if (Test-DockerReady) {
|
|
if (Test-Path (Join-Path $Root 'docker-compose.yml')) {
|
|
docker compose up -d 2>$null
|
|
if ($LASTEXITCODE -eq 0) { $dbMode = 'docker' }
|
|
}
|
|
}
|
|
|
|
if ($dbMode -eq 'unknown') {
|
|
$dbRc = & "$PSScriptRoot\start-local-db.ps1"
|
|
if ($dbRc -eq 0) { $dbMode = 'local' }
|
|
}
|
|
|
|
if ($dbMode -eq 'unknown') {
|
|
Write-Host ''
|
|
Write-Host ' [ERROR] Cannot start database.'
|
|
Write-Host ' - Install PostgreSQL 16 (initdb/pg_ctl in PATH), or'
|
|
Write-Host ' - Install Docker Desktop and retry'
|
|
Write-Host ''
|
|
exit 1
|
|
}
|
|
|
|
Write-Host " DB: $dbMode (port 54320, data\postgres)"
|
|
|
|
if ($dbMode -eq 'docker') {
|
|
$waitRc = & "$PSScriptRoot\wait-db.ps1" -Port 54320
|
|
if ($waitRc -ne 0) { exit 1 }
|
|
}
|
|
Write-Host ''
|
|
|
|
Write-Host '[3/4] DB schema + seed if empty ...'
|
|
Set-Location (Join-Path $Root 'backend')
|
|
if (-not (Test-Path 'node_modules')) {
|
|
Write-Host ' npm install (backend) ...'
|
|
cmd /c 'npm install'
|
|
if ($LASTEXITCODE -ne 0) { exit 1 }
|
|
}
|
|
cmd /c 'npm run db:sync'
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host '[ERROR] npm run db:sync failed'
|
|
exit 1
|
|
}
|
|
cmd /c 'npm run db:seed-if-empty'
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host '[ERROR] npm run db:seed-if-empty failed'
|
|
exit 1
|
|
}
|
|
cmd /c 'npm run db:seed-team-if-empty'
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host '[ERROR] npm run db:seed-team-if-empty failed'
|
|
exit 1
|
|
}
|
|
cmd /c 'npx prisma generate'
|
|
if ($LASTEXITCODE -ne 0) {
|
|
Write-Host '[ERROR] prisma generate failed (stop other servers and retry)'
|
|
exit 1
|
|
}
|
|
Set-Location $Root
|
|
Write-Host ' Done.'
|
|
Write-Host ''
|
|
|
|
Write-Host '[4/4] Starting API + WEB ...'
|
|
if (-not (Test-Path (Join-Path $Root 'frontend\node_modules'))) {
|
|
Write-Host ' npm install (frontend) ...'
|
|
Set-Location (Join-Path $Root 'frontend')
|
|
cmd /c 'npm install'
|
|
if ($LASTEXITCODE -ne 0) { exit 1 }
|
|
Set-Location $Root
|
|
}
|
|
|
|
$lanIp = $null
|
|
try {
|
|
$ip = & "$PSScriptRoot\get-lan-ip.ps1" 2>$null
|
|
if ($ip) { $lanIp = $ip.Trim() }
|
|
} catch { }
|
|
|
|
if (-not $lanIp) {
|
|
Write-Host ' [WARN] LAN IP not detected — HTTPS for team may not start.'
|
|
Write-Host ' Set EENE_LAN_IP=172.16.8.248 if needed.'
|
|
}
|
|
|
|
$backend = Join-Path $Root 'backend'
|
|
$frontend = Join-Path $Root 'frontend'
|
|
if ($lanIp) {
|
|
Set-Content -Path (Join-Path $frontend '.lan-ip') -Value $lanIp -NoNewline -Encoding ascii
|
|
} elseif (Test-Path (Join-Path $frontend '.lan-ip')) {
|
|
Remove-Item (Join-Path $frontend '.lan-ip') -Force
|
|
}
|
|
|
|
Write-Host ''
|
|
Write-Host ' Local : http://localhost:3000 (듀얼 모니터, 인증서 없음)'
|
|
Write-Host ' Admin : http://localhost:3000/admin'
|
|
if ($lanIp) {
|
|
Write-Host " LAN : https://${lanIp}:3000 (인증서 경고 → 고급 → 계속 → 허용)"
|
|
} else {
|
|
Write-Host ' LAN : (IP 미감지 — EENE_LAN_IP 환경변수 설정 후 재시작)'
|
|
}
|
|
Write-Host ' Stop : 서버종료.bat'
|
|
Write-Host '================================'
|
|
Write-Host ''
|
|
|
|
$webCmds = @(
|
|
"cd /d `"$backend`" && npm run dev:serve",
|
|
"cd /d `"$frontend`" && npx --yes wait-on -t 90000 http://127.0.0.1:4000/health && npx vite --mode http-local --host localhost"
|
|
)
|
|
if ($lanIp) {
|
|
$webCmds += "cd /d `"$frontend`" && npx --yes wait-on -t 90000 http://127.0.0.1:4000/health && npx vite --mode https-lan --host $lanIp"
|
|
}
|
|
$names = if ($lanIp) { 'API,WEB-HTTP,WEB-HTTPS' } else { 'API,WEB-HTTP' }
|
|
$colors = if ($lanIp) { 'cyan,green,yellow' } else { 'cyan,green' }
|
|
npx --yes concurrently -k -n $names -c $colors $webCmds
|
|
|
|
Write-Host ''
|
|
Write-Host ' Server stopped.'
|