# perinco Pulse - Deployment auf 31.70.144.60 # # Baut lokal und laedt dist/ plus Backend-Quellen hoch. # # Aufruf aus dem Projektverzeichnis: # $env:PULSE_SSH_PASSWORD = '...' # powershell -File deploy/deploy.ps1 # powershell -File deploy/deploy.ps1 -SkipBuild # powershell -File deploy/deploy.ps1 -Deps # bei neuen Backend-Paketen param( [string]$ServerHost = '31.70.144.60', [int]$Port = 22, [string]$User = 'root', [string]$Password = $env:PULSE_SSH_PASSWORD, [string]$RemotePath = '/var/www/pulse', [switch]$SkipBuild, [switch]$Deps ) $ErrorActionPreference = 'Stop' if (-not $Password) { throw 'Kein Passwort. Setze $env:PULSE_SSH_PASSWORD oder uebergib -Password.' } $plink = 'C:\Program Files\PuTTY\plink.exe' $pscp = 'C:\Program Files\PuTTY\pscp.exe' foreach ($tool in @($plink, $pscp)) { if (-not (Test-Path $tool)) { throw "Nicht gefunden: $tool" } } $projectRoot = Split-Path -Parent $PSScriptRoot Set-Location $projectRoot if (-not $SkipBuild) { Write-Host '==> Frontend bauen' -ForegroundColor Green npm run build if ($LASTEXITCODE -ne 0) { throw 'Build fehlgeschlagen - es wird nichts hochgeladen.' } } $target = "$User@$ServerHost" Write-Host '==> dist/ hochladen' -ForegroundColor Green & $plink -ssh -batch -P $Port -pw $Password $target "rm -rf $RemotePath/dist.new && mkdir -p $RemotePath/dist.new" & $pscp -r -batch -P $Port -pw $Password 'dist\*' "${target}:$RemotePath/dist.new/" Write-Host '==> Backend hochladen' -ForegroundColor Green & $pscp -r -batch -P $Port -pw $Password 'server\src' "${target}:$RemotePath/server/" & $pscp -r -batch -P $Port -pw $Password 'server\assets' "${target}:$RemotePath/server/" & $pscp -batch -P $Port -pw $Password 'server\package.json' 'server\package-lock.json' "${target}:$RemotePath/server/" # dist atomar tauschen, damit niemand eine halb hochgeladene Version sieht. $remote = "cd $RemotePath && rm -rf dist.old && (mv dist dist.old 2>/dev/null; true) && mv dist.new dist && rm -rf dist.old" if ($Deps) { $remote = "$remote && cd $RemotePath/server && npm ci --omit=dev --no-audit --no-fund" } $remote = "$remote && chown -R pulse:pulse $RemotePath/server && systemctl restart perinco-pulse-backend && sleep 3 && systemctl is-active perinco-pulse-backend && curl -s http://127.0.0.1:5010/api/health" Write-Host '==> Tauschen, neu starten, pruefen' -ForegroundColor Green & $plink -ssh -batch -P $Port -pw $Password $target $remote Write-Host '' Write-Host 'Fertig: https://pulse.perinco.de' -ForegroundColor Green