mirror of
https://github.com/DeNNiiInc/Website-Stress-Test.git
synced 2026-04-17 12:36:00 +00:00
74 lines
2.4 KiB
PowerShell
74 lines
2.4 KiB
PowerShell
# start-deployment.ps1
|
|
# Automates the deployment by reading config, uploading scripts, and executing setup.
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
$ConfigPath = "deploy-config.json"
|
|
|
|
if (-not (Test-Path $ConfigPath)) {
|
|
Write-Error "Configuration file '$ConfigPath' not found. Please copy 'deploy-config.example.json' to '$ConfigPath' and fill in your details."
|
|
}
|
|
|
|
$Config = Get-Content $ConfigPath | ConvertFrom-Json
|
|
|
|
# Validate Config
|
|
$Required = @("host", "username", "password", "remotePath", "repoUrl", "githubToken")
|
|
foreach ($Key in $Required) {
|
|
if (-not $Config.$Key) {
|
|
Write-Error "Missing required config key: $Key"
|
|
}
|
|
}
|
|
|
|
$User = $Config.username
|
|
$HostName = $Config.host
|
|
$Pass = $Config.password
|
|
# Note: Using password directly in script is tricky with standard ssh/scp without key.
|
|
# We will check if 'sshpass' or 'plink' is available, or guide user to use keys.
|
|
# Since the user specifically mentioned providing credentials, they might expect us to use them.
|
|
# The template used 'plink -pw $Pass'. We will stick to that if available, or warn.
|
|
|
|
# Check for plink
|
|
if (Get-Command "plink.exe" -ErrorAction SilentlyContinue) {
|
|
Write-Host "Using plink for connection..."
|
|
$UsePlink = $true
|
|
}
|
|
else {
|
|
Write-Warning "plink.exe not found. Falling back to standard scp/ssh. You may be prompted for password multiple times."
|
|
$UsePlink = $false
|
|
}
|
|
|
|
$RemoteTmp = "/tmp"
|
|
$SetupScript = "setup-server.sh"
|
|
$SyncScript = "auto-sync.sh"
|
|
|
|
Write-Host "🚀 Starting Deployment to $HostName..."
|
|
|
|
# 1. Upload Scripts
|
|
Write-Host "Uploading scripts..."
|
|
if ($UsePlink) {
|
|
echo y | pscp -P 22 -pw $Pass $SetupScript "$User@$HostName`:$RemoteTmp/$SetupScript"
|
|
echo y | pscp -P 22 -pw $Pass $SyncScript "$User@$HostName`:$RemoteTmp/$SyncScript"
|
|
}
|
|
else {
|
|
scp $SetupScript "$User@$HostName`:$RemoteTmp/$SetupScript"
|
|
scp $SyncScript "$User@$HostName`:$RemoteTmp/$SyncScript"
|
|
}
|
|
|
|
# 2. Execute Setup
|
|
Write-Host "Executing setup on remote server..."
|
|
$AppDir = $Config.remotePath
|
|
$Repo = $Config.repoUrl
|
|
$Token = $Config.githubToken
|
|
|
|
# Make scripts executable and run setup
|
|
$RemoteCmd = "chmod +x $RemoteTmp/$SetupScript $RemoteTmp/$SyncScript; $RemoteTmp/$SetupScript '$Repo' '$AppDir' '$Token'; rm $RemoteTmp/$SetupScript"
|
|
|
|
if ($UsePlink) {
|
|
echo y | plink -ssh -P 22 -t -pw $Pass "$User@$HostName" $RemoteCmd
|
|
}
|
|
else {
|
|
ssh -t "$User@$HostName" $RemoteCmd
|
|
}
|
|
|
|
Write-Host "🎉 Deployment command sent!"
|