58 lines
3.1 KiB
PowerShell
58 lines
3.1 KiB
PowerShell
<#
|
|
Install gateway + CDN as Windows services via NSSM (auto-start + restart on crash).
|
|
Plain console apps cannot be Windows services directly, so NSSM wraps them.
|
|
Download NSSM: https://nssm.cc/download and pass nssm.exe path via -NssmPath.
|
|
|
|
Usage (admin PowerShell):
|
|
powershell -ExecutionPolicy Bypass -File deploy\windows\install-services.ps1 `
|
|
-NssmPath C:\nssm\nssm.exe `
|
|
-OutRoot C:\xworld\app `
|
|
-GamesRoot C:\xworld\games `
|
|
-CdnRoot C:\xworld\cdn
|
|
#>
|
|
param(
|
|
[string]$NssmPath = "C:\nssm\nssm.exe",
|
|
[string]$OutRoot = "$PSScriptRoot\out",
|
|
[string]$GamesRoot = "C:\xworld\games", # server-side minigame modules: games\<id>\<ver>\*.dll
|
|
[string]$CdnRoot = "C:\xworld\cdn", # client publish root: contains XWorld\<platform>\ and minigame\<id>\<ver>\
|
|
[string]$AuthDbPath = "C:\xworld\accounts.db", # account SQLite db; auth.key auto-generated next to it on first run (back it up)
|
|
[string]$LogDir = "C:\xworld\logs",
|
|
[int] $GatewayPort = 5005,
|
|
[int] $CdnPort = 15081
|
|
)
|
|
$ErrorActionPreference = "Stop"
|
|
if (-not (Test-Path $NssmPath)) { throw "nssm.exe not found: $NssmPath (download from https://nssm.cc/download)" }
|
|
|
|
$gwExe = Join-Path $OutRoot "gateway\XWorld.Server.Gateway.Runner.exe"
|
|
$cdnExe = Join-Path $OutRoot "cdn\XWorld.Server.Cdn.Runner.exe"
|
|
if (-not (Test-Path $gwExe)) { throw "gateway exe not found, run publish.ps1 first: $gwExe" }
|
|
if (-not (Test-Path $cdnExe)) { throw "cdn exe not found, run publish.ps1 first: $cdnExe" }
|
|
New-Item -ItemType Directory -Force -Path $LogDir | Out-Null
|
|
|
|
# Gateway: no --lan => binds 127.0.0.1 (only Caddy reaches it); no --devToken => DevDiscovery off.
|
|
# --authDbPath => enable account auth (/register, /login, /ws?token=); auth.key auto-generated next to the db on first run.
|
|
& $NssmPath install XWorldGateway $gwExe
|
|
& $NssmPath set XWorldGateway AppParameters "--gamesRoot `"$GamesRoot`" --port $GatewayPort --authDbPath `"$AuthDbPath`""
|
|
& $NssmPath set XWorldGateway AppDirectory (Split-Path $gwExe)
|
|
& $NssmPath set XWorldGateway Start SERVICE_AUTO_START
|
|
& $NssmPath set XWorldGateway AppStdout (Join-Path $LogDir "gateway.out.log")
|
|
& $NssmPath set XWorldGateway AppStderr (Join-Path $LogDir "gateway.err.log")
|
|
& $NssmPath set XWorldGateway AppRotateFiles 1
|
|
|
|
& $NssmPath install XWorldCdn $cdnExe
|
|
& $NssmPath set XWorldCdn AppParameters "--root `"$CdnRoot`" --port $CdnPort"
|
|
& $NssmPath set XWorldCdn AppDirectory (Split-Path $cdnExe)
|
|
& $NssmPath set XWorldCdn Start SERVICE_AUTO_START
|
|
& $NssmPath set XWorldCdn AppStdout (Join-Path $LogDir "cdn.out.log")
|
|
& $NssmPath set XWorldCdn AppStderr (Join-Path $LogDir "cdn.err.log")
|
|
& $NssmPath set XWorldCdn AppRotateFiles 1
|
|
|
|
& $NssmPath start XWorldGateway
|
|
& $NssmPath start XWorldCdn
|
|
|
|
Write-Host ""
|
|
Write-Host "Installed and started: XWorldGateway(127.0.0.1:$GatewayPort), XWorldCdn(127.0.0.1:$CdnPort)" -ForegroundColor Green
|
|
Write-Host "Self-check: curl http://127.0.0.1:$CdnPort/XWorld/android/updatever.txt (expect 200 once CDN content is in place)"
|
|
Write-Host "Logs: $LogDir"
|
|
Write-Host "Next: configure and start Caddy (see README), then verify WSS/HTTPS via your domain."
|