EENE Dashboard upload to Gitea

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
EENE Dashboard
2026-06-17 16:59:34 +09:00
parent cf72281c6d
commit b3f2da203b
138 changed files with 13013 additions and 1929 deletions

149
scripts/start-server.ps1 Normal file
View File

@@ -0,0 +1,149 @@
$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.'