Files
Advanced-Smtp-Tester/deploy-to-proxmox.ps1

76 lines
2.3 KiB
PowerShell
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# deploy-to-proxmox.ps1
# 1. Read Configuration
if (-not (Test-Path "deploy-secrets.json")) {
Write-Error "Could not find deploy-secrets.json. Please create it first."
exit 1
}
$Config = Get-Content "deploy-secrets.json" | ConvertFrom-Json
$HostName = $Config.host
$User = $Config.username
$Password = $Config.password
$GitUser = $Config.gitUser
$GitToken = $Config.gitToken
$RepoUrl = $Config.repoUrl
# Construct Authenticated Repo URL
# Extract the domain and path from RepoUrl (remove https://)
$RepoPath = $RepoUrl -replace "https://", ""
# Use Token as username (GitHub supports this) to avoid issues with @ in email usernames
$AuthRepoUrl = "https://${GitToken}@${RepoPath}"
$AppName = "Advanced-Smtp-Tester"
$RemoteDir = "/var/www/$AppName"
Write-Host "🚀 Starting Deployment to $HostName..." -ForegroundColor Cyan
# 2. Define Remote Commands
# We use a Here-String for the remote script
$RemoteScript = @"
set -e
echo "🔹 [Remote] Checking prerequisites..."
if ! command -v git &> /dev/null; then
echo "📦 [Remote] Installing Git..."
apt-get update && apt-get install -y git
fi
echo "🔹 [Remote] Preparing directory $RemoteDir..."
mkdir -p "$RemoteDir"
# Check if .git exists, if not clone, else pull
if [ ! -d "$RemoteDir/.git" ]; then
echo " [Remote] Cloning repository..."
# Clone with token for future auth-less pulls
git clone "$AuthRepoUrl" "$RemoteDir"
else
echo " [Remote] Repository exists. Pulling latest..."
cd "$RemoteDir"
# Update remote url to ensure token is correct (in case it changed)
git remote set-url origin "$AuthRepoUrl"
git pull
fi
# Run the setup script from the repo
echo " [Remote] Running setup script..."
cd "$RemoteDir"
chmod +x scripts/setup-server.sh
./scripts/setup-server.sh
echo " [Remote] Deployment Logic Finished."
"@ -replace "`r`n", "`n"
# 3. Execute via Plink (Putty Link) or SSH
# We'll use plink if available because it handles password via argument easier than OpenSSH on Windows
# If plink is not found, we warn the user.
if (Get-Command plink -ErrorAction SilentlyContinue) {
echo y | plink -ssh -l $User -pw $Password $HostName $RemoteScript
}
else {
Write-Warning "Plink not found. Trying standard ssh (you may be prompted for password)."
ssh "$User@$HostName" $RemoteScript
}
Write-Host "✨ Deployment script completed." -ForegroundColor Green