mirror of
https://github.com/hansjone/netx.git
synced 2026-10-13 00:53:27 +08:00
Harden Windows packaging: data-root paths, service health, safer updates.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
d0b260b67d
commit
d10d47e8f5
10 changed files with 228 additions and 56 deletions
|
|
@ -2,7 +2,8 @@ param(
|
|||
[string]$ProgramRoot = "",
|
||||
[string]$DataRoot = "",
|
||||
[switch]$SkipBrowser = $false,
|
||||
[switch]$InlineSchedulers = $false
|
||||
[switch]$InlineSchedulers = $false,
|
||||
[switch]$Force = $false
|
||||
)
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
|
@ -21,25 +22,39 @@ if (-not (Test-Path (Join-Path $prog "netx_api"))) {
|
|||
throw "netx_api not found under program root: $prog"
|
||||
}
|
||||
|
||||
Ensure-NetxDataDirectories -DataRoot $data
|
||||
|
||||
$map = Import-NetxEnvFile -Path $envPath
|
||||
# Force data-root paths even if an older .env missed them.
|
||||
$dataEnv = Get-NetxDataEnvMap -DataRoot $data
|
||||
foreach ($k in $dataEnv.Keys) {
|
||||
Set-Item -Path "Env:$k" -Value $dataEnv[$k]
|
||||
}
|
||||
|
||||
Set-Location $prog
|
||||
$env:PYTHONPATH = $prog
|
||||
|
||||
# Keep runtime artifacts in the data root (not under Program Files).
|
||||
$env:NETX_AUTH_MCP_TOKEN_FILE = Join-Path $data "data\auth\mcp_token"
|
||||
$env:NETX_SCHEDULER_HEARTBEAT_PATH = Join-Path $data "data\runtime\scheduler_heartbeat.json"
|
||||
$env:NETX_AUTH_SECRET_FILE = Join-Path $data "data\auth\jwt_secret"
|
||||
|
||||
$dist = Join-Path $prog "web\dist"
|
||||
if (Test-Path (Join-Path $dist "index.html")) {
|
||||
$env:NETX_UI_DIST_DIR = $dist
|
||||
}
|
||||
|
||||
$mode = Get-DbMode -EnvMap $map
|
||||
$hostBind = if ($env:NETX_HOST) { $env:NETX_HOST } else { "127.0.0.1" }
|
||||
$port = if ($env:NETX_PORT) { [int]$env:NETX_PORT } else { 8890 }
|
||||
|
||||
Write-Host "==> Program: $prog"
|
||||
Write-Host "==> Data: $data"
|
||||
Write-Host "==> DB mode: $mode"
|
||||
|
||||
if (-not $Force -and (Test-NetxApiHealthy -HostName $hostBind -Port $port)) {
|
||||
Write-Host "==> NetX already healthy at http://${hostBind}:${port}/ — skip start (use -Force to restart)" -ForegroundColor Green
|
||||
if (-not $SkipBrowser) {
|
||||
try { Start-Process "http://${hostBind}:${port}/" } catch {}
|
||||
}
|
||||
exit 0
|
||||
}
|
||||
|
||||
function Get-PgsqlBin {
|
||||
foreach ($b in @(
|
||||
(Join-Path $prog "postgres\pgsql\bin"),
|
||||
|
|
@ -54,13 +69,20 @@ if ($mode -eq "bundled") {
|
|||
$pgBin = Get-PgsqlBin
|
||||
if (-not $pgBin) { throw "bundled_postgres_missing" }
|
||||
$pgData = if ($map["NETX_BUNDLED_PG_DATA_DIR"]) {
|
||||
$map["NETX_BUNDLED_PG_DATA_DIR"]
|
||||
$map["NETX_BUNDLED_PG_DATA_DIR"] -replace '/', '\'
|
||||
} else {
|
||||
Join-Path $data "pgdata"
|
||||
}
|
||||
$pgPort = 15432
|
||||
if ($map["NETX_BUNDLED_PG_PORT"]) {
|
||||
try { $pgPort = [int]$map["NETX_BUNDLED_PG_PORT"] } catch {}
|
||||
}
|
||||
$pgCtl = Join-Path $pgBin "pg_ctl.exe"
|
||||
$status = & $pgCtl -D $pgData status 2>&1 | Out-String
|
||||
if ($status -notmatch "server is running") {
|
||||
if (-not (Test-NetxTcpPortFree -HostName "127.0.0.1" -Port $pgPort)) {
|
||||
throw "port_in_use: 127.0.0.1:$pgPort (bundled Postgres)"
|
||||
}
|
||||
Write-Host "==> Starting bundled PostgreSQL"
|
||||
if (-not (Test-Path $pgData)) {
|
||||
New-Item -ItemType Directory -Path $pgData -Force | Out-Null
|
||||
|
|
@ -74,7 +96,6 @@ if ($mode -eq "bundled") {
|
|||
}
|
||||
}
|
||||
|
||||
# Ensure venv exists for start_netx.ps1
|
||||
$venvPy = Join-Path $prog ".venv\Scripts\python.exe"
|
||||
if (-not (Test-Path $venvPy)) {
|
||||
Write-Host "==> Creating .venv (one-time)"
|
||||
|
|
@ -86,8 +107,13 @@ if (-not (Test-Path $venvPy)) {
|
|||
if ($LASTEXITCODE -ne 0) { throw "pip_install_failed" }
|
||||
}
|
||||
|
||||
$hostBind = if ($env:NETX_HOST) { $env:NETX_HOST } else { "127.0.0.1" }
|
||||
$port = if ($env:NETX_PORT) { [int]$env:NETX_PORT } else { 8890 }
|
||||
if (-not (Test-NetxTcpPortFree -HostName $hostBind -Port $port)) {
|
||||
if (Test-NetxApiHealthy -HostName $hostBind -Port $port) {
|
||||
Write-Host "==> Port $port already serves NetX — skip start" -ForegroundColor Green
|
||||
exit 0
|
||||
}
|
||||
throw "port_in_use: ${hostBind}:${port} occupied by non-NetX process"
|
||||
}
|
||||
|
||||
$startScript = Join-Path $prog "scripts\start_netx.ps1"
|
||||
if (-not (Test-Path $startScript)) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue