Files
Website-Stress-Test/start-deployment.ps1

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!"