77 lines
2.7 KiB
PowerShell
77 lines
2.7 KiB
PowerShell
|
|
[CmdletBinding()]
|
||
|
|
param(
|
||
|
|
[string]$ComposeFile = 'docker-compose.yml',
|
||
|
|
[string]$ProjectName = 'goodwalk',
|
||
|
|
[switch]$RunMigration,
|
||
|
|
[string]$LegacyComposeFile,
|
||
|
|
[string]$LegacyProjectName = 'legacy-goodwalk',
|
||
|
|
[string]$LegacyWordPressContainer,
|
||
|
|
[string]$LegacyDatabaseContainer,
|
||
|
|
[string]$LegacyUploadsPath = '/var/www/html/wp-content/uploads',
|
||
|
|
[string]$MySqlDatabase,
|
||
|
|
[string]$MySqlUser,
|
||
|
|
[string]$MySqlPassword,
|
||
|
|
[switch]$SkipLegacyShutdown,
|
||
|
|
[switch]$SkipBuild,
|
||
|
|
[int]$HealthTimeoutSeconds = 120,
|
||
|
|
[string]$HealthUrl = 'http://localhost/api/health'
|
||
|
|
)
|
||
|
|
|
||
|
|
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||
|
|
. (Join-Path $scriptDir 'common.ps1')
|
||
|
|
|
||
|
|
$repoRoot = Split-Path -Parent $scriptDir
|
||
|
|
$composeFilePath = Resolve-AbsolutePath -BasePath $repoRoot -Path $ComposeFile
|
||
|
|
|
||
|
|
Write-Step 'Validating deployment prerequisites'
|
||
|
|
Assert-Command docker
|
||
|
|
Invoke-DockerCompose -ComposeFile $composeFilePath -ProjectName $ProjectName -WorkingDirectory $repoRoot -Arguments @('config')
|
||
|
|
|
||
|
|
if ($RunMigration) {
|
||
|
|
Write-Step 'Running the WordPress migration step'
|
||
|
|
$migrationScript = Join-Path $scriptDir 'migrate-wordpress.ps1'
|
||
|
|
$migrationArgs = @(
|
||
|
|
'-LegacyWordPressContainer', $LegacyWordPressContainer,
|
||
|
|
'-LegacyUploadsPath', $LegacyUploadsPath
|
||
|
|
)
|
||
|
|
|
||
|
|
if ($LegacyDatabaseContainer) {
|
||
|
|
$migrationArgs += @('-LegacyDatabaseContainer', $LegacyDatabaseContainer)
|
||
|
|
} else {
|
||
|
|
$migrationArgs += '-SkipDatabaseDump'
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($MySqlDatabase) { $migrationArgs += @('-MySqlDatabase', $MySqlDatabase) }
|
||
|
|
if ($MySqlUser) { $migrationArgs += @('-MySqlUser', $MySqlUser) }
|
||
|
|
if ($MySqlPassword) { $migrationArgs += @('-MySqlPassword', $MySqlPassword) }
|
||
|
|
|
||
|
|
& $migrationScript @migrationArgs
|
||
|
|
|
||
|
|
if ($LASTEXITCODE -ne 0) {
|
||
|
|
throw 'The WordPress migration step failed.'
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if ($LegacyComposeFile -and -not $SkipLegacyShutdown) {
|
||
|
|
$legacyComposeFilePath = Resolve-AbsolutePath -BasePath $repoRoot -Path $LegacyComposeFile
|
||
|
|
Write-Step 'Stopping the legacy WordPress stack'
|
||
|
|
Invoke-DockerCompose -ComposeFile $legacyComposeFilePath -ProjectName $LegacyProjectName -WorkingDirectory $repoRoot -Arguments @('down')
|
||
|
|
}
|
||
|
|
|
||
|
|
Write-Step 'Building and starting the new stack'
|
||
|
|
$upArgs = @('up', '-d', '--remove-orphans')
|
||
|
|
if (-not $SkipBuild) {
|
||
|
|
$upArgs += '--build'
|
||
|
|
}
|
||
|
|
|
||
|
|
Invoke-DockerCompose -ComposeFile $composeFilePath -ProjectName $ProjectName -WorkingDirectory $repoRoot -Arguments $upArgs
|
||
|
|
|
||
|
|
Write-Step 'Waiting for the new site to become healthy'
|
||
|
|
Wait-ForHttpOk -Url $HealthUrl -TimeoutSeconds $HealthTimeoutSeconds
|
||
|
|
|
||
|
|
Write-Step 'Current container status'
|
||
|
|
Invoke-DockerCompose -ComposeFile $composeFilePath -ProjectName $ProjectName -WorkingDirectory $repoRoot -Arguments @('ps')
|
||
|
|
|
||
|
|
Write-Step 'Deployment completed'
|
||
|
|
Write-Host "Health check passed at $HealthUrl"
|