Files
MeBox/scripts/deploy.ps1
T
2026-06-09 13:57:34 +08:00

90 lines
2.9 KiB
PowerShell
Vendored

param(
[int]$Port = 18080,
[string]$HostAddress = "0.0.0.0",
[string]$DataDir = "",
[string]$CacheDir = "",
[switch]$SkipBuild,
[switch]$Foreground
)
$ErrorActionPreference = "Stop"
$Root = Resolve-Path (Join-Path $PSScriptRoot "..")
if (-not $DataDir) { $DataDir = Join-Path $Root "data" }
if (-not $CacheDir) { $CacheDir = Join-Path $Root "cache" }
$PreviewRoot = Split-Path -Parent $DataDir
$DefaultDownloadDir = Join-Path $PreviewRoot "downloads"
$DefaultMediaDir = Join-Path $PreviewRoot "media"
$WebDir = Join-Path $Root "web\dist"
$BinDir = Join-Path $Root "bin"
$Exe = Join-Path $BinDir "mediastation-go.exe"
$PidFile = Join-Path $Root ".mediastation.pid"
$LogDir = Join-Path $Root "logs"
$OutLog = Join-Path $LogDir "mediastation.out.log"
$ErrLog = Join-Path $LogDir "mediastation.err.log"
New-Item -ItemType Directory -Force -Path $DataDir, $CacheDir, $BinDir, $LogDir | Out-Null
if (-not $env:MEDIASTATION_DOWNLOAD_CONTAINER_DIR) {
New-Item -ItemType Directory -Force -Path $DefaultDownloadDir | Out-Null
}
if (-not $env:MEDIASTATION_MEDIA_CONTAINER_DIR) {
New-Item -ItemType Directory -Force -Path $DefaultMediaDir | Out-Null
}
if (-not $SkipBuild) {
Write-Host "[1/3] Building frontend"
Push-Location (Join-Path $Root "web")
npm ci
npm run build
Pop-Location
Write-Host "[2/3] Building server"
Push-Location $Root
$env:CGO_ENABLED = "0"
go build -trimpath -ldflags="-s -w" -o $Exe ./cmd/server
Pop-Location
} else {
Write-Host "[1/3] Build skipped"
}
if (Test-Path $PidFile) {
$oldPid = 0
$pidText = Get-Content $PidFile -Raw
if ([int]::TryParse($pidText.Trim(), [ref]$oldPid)) {
$oldProc = Get-Process -Id $oldPid -ErrorAction SilentlyContinue
if ($oldProc) {
Write-Host "[3/3] Stopping old process $oldPid"
Stop-Process -Id $oldPid -Force
Start-Sleep -Seconds 1
}
}
}
$env:MEDIASTATION_APP_HOST = $HostAddress
$env:MEDIASTATION_APP_PORT = "$Port"
$env:MEDIASTATION_APP_DATA_DIR = $DataDir
$env:MEDIASTATION_APP_WEB_DIR = $WebDir
$env:MEDIASTATION_DATABASE_DB_PATH = (Join-Path $DataDir "mediastation.db")
$env:MEDIASTATION_CACHE_CACHE_DIR = $CacheDir
if (-not $env:MEDIASTATION_DOWNLOAD_CONTAINER_DIR) {
$env:MEDIASTATION_DOWNLOAD_CONTAINER_DIR = $DefaultDownloadDir
}
if (-not $env:MEDIASTATION_MEDIA_CONTAINER_DIR) {
$env:MEDIASTATION_MEDIA_CONTAINER_DIR = $DefaultMediaDir
}
Write-Host "[3/3] Starting MediaStationGo on http://$HostAddress`:$Port"
if ($Foreground) {
& $Exe
} else {
$proc = Start-Process -FilePath $Exe `
-WorkingDirectory $Root `
-WindowStyle Hidden `
-RedirectStandardOutput $OutLog `
-RedirectStandardError $ErrLog `
-PassThru
$proc.Id | Set-Content $PidFile
Start-Sleep -Seconds 2
Invoke-WebRequest -UseBasicParsing -Uri "http://127.0.0.1:$Port/api/health" -TimeoutSec 10 | Out-Null
Write-Host "Started. PID=$($proc.Id), logs=$OutLog / $ErrLog"
}