# Push .env, Caddyfile, and docker-compose.yml to valhalla, then apply them # to the live Docker stack. # # On valhalla, `dc` is aliased (in ~/.bashrc) to: # docker-compose -f ~/htpc-download-box/docker-compose.yml --env-file ~/htpc-download-box/.env # It's a shell alias, so we invoke it over SSH with `bash -ic` to load it. # # Usage (flags combine; no flags = push & apply all three): # powershell -File apply-compose.ps1 # .env + Caddyfile + compose # powershell -File apply-compose.ps1 -EnvFile # .env only # powershell -File apply-compose.ps1 -Caddy # Caddyfile only + hot-reload Caddy # powershell -File apply-compose.ps1 -Compose # docker-compose.yml only + pull + up -d param( [switch]$Compose, [switch]$Caddy, [switch]$EnvFile ) $ErrorActionPreference = "Stop" # Make a non-zero exit from scp/ssh abort the script instead of silently continuing. $PSNativeCommandUseErrorActionPreference = $true $server = "ginnoir@valhalla" $composeLocal = Join-Path $PSScriptRoot "docker-compose.yml" $caddyLocal = Join-Path $PSScriptRoot "Caddyfile" $envLocal = Join-Path $PSScriptRoot ".env" # Default (no flags): push everything. if (-not $Compose -and -not $Caddy -and -not $EnvFile) { $EnvFile = $true; $Caddy = $true; $Compose = $true } if ($EnvFile) { Write-Host "Pushing .env ..." scp $envLocal "${server}:~/htpc-download-box/.env" } if ($Caddy) { Write-Host "Pushing Caddyfile ..." scp $caddyLocal "${server}:/config/caddy/Caddyfile" Write-Host "Reloading Caddy ..." ssh $server "bash -ic 'dc exec caddy caddy reload --config /etc/caddy/Caddyfile'" } if ($Compose) { Write-Host "Pushing docker-compose.yml ..." scp $composeLocal "${server}:~/htpc-download-box/docker-compose.yml" Write-Host "Pulling latest images ..." ssh $server "bash -ic 'dc pull'" Write-Host "Applying compose changes (recreates only changed containers) ..." ssh $server "bash -ic 'dc up -d'" } Write-Host "Done."