<# Deploy embycovers to an Asustor NAS over SSH/SCP from Windows PowerShell. Prerequisites on your Windows machine: - OpenSSH Client installed. Test with: ssh -V - SSH enabled on the Asustor NAS. - Docker / Docker Compose available on the Asustor NAS. Example: .\deploy.ps1 -NasHost MATT-NAS -NasUser admin -EmbyUrl http://192.168.1.50:8096 -EmbyApiKey abcdef123456 #> param( [Parameter(Mandatory = $true)] [string]$NasHost, [Parameter(Mandatory = $true)] [string]$NasUser, [string]$RemoteAppDir = "/share/Docker/embycovers", [Parameter(Mandatory = $true)] [string]$EmbyUrl, [Parameter(Mandatory = $true)] [string]$EmbyApiKey, [int]$HostPort = 8500 ) $ErrorActionPreference = "Stop" function Require-Command($Name) { if (-not (Get-Command $Name -ErrorAction SilentlyContinue)) { throw "$Name was not found. Install or enable it first." } } Require-Command ssh Require-Command scp $LocalDir = Split-Path -Parent $MyInvocation.MyCommand.Path $Remote = "$NasUser@$NasHost" Write-Host "Deploying embycovers to ${Remote}:$RemoteAppDir" Write-Host "Emby URL: $EmbyUrl" Write-Host "Host port: $HostPort" ssh $Remote @" set -e mkdir -p '$RemoteAppDir' '$RemoteAppDir/output' '$RemoteAppDir/cache' '$RemoteAppDir/static/studios' '$RemoteAppDir/templates' "@ # Copy top-level project files. scp ` "$LocalDir/app.py" ` "$LocalDir/Dockerfile" ` "$LocalDir/docker-compose.yml" ` "$LocalDir/requirements.txt" ` "${Remote}:$RemoteAppDir/" # Copy templates and static assets recursively. scp -r "$LocalDir/templates/." "${Remote}:$RemoteAppDir/templates/" scp -r "$LocalDir/static/." "${Remote}:$RemoteAppDir/static/" # Copy any loose logo images that live at the repo root. $LogoFiles = Get-ChildItem -Path $LocalDir -File | Where-Object { $_.Extension -in @('.png','.jpg','.jpeg') } if ($LogoFiles) { $LogoArgs = $LogoFiles | ForEach-Object { "`"$($_.FullName)`"" } $ScpCmd = "scp $($LogoArgs -join ' ') `"${Remote}:$RemoteAppDir/`"" Invoke-Expression $ScpCmd } # Patch docker-compose.yml on the NAS with the supplied Emby settings, then build & run. $RemoteCommands = @" set -e cd '$RemoteAppDir' # Patch compose env vars and host port from deployment parameters. sed -i "s#EMBY_URL=.*#EMBY_URL=$EmbyUrl#g" docker-compose.yml sed -i "s#EMBY_API_KEY=.*#EMBY_API_KEY=$EmbyApiKey#g" docker-compose.yml sed -i "s#\"8500:8500\"#\"$HostPort:8500\"#g" docker-compose.yml if command -v docker-compose >/dev/null 2>&1; then docker-compose build docker-compose up -d else docker compose build docker compose up -d fi "@ ssh $Remote $RemoteCommands Write-Host "Deployment complete." Write-Host "App should be reachable at: http://${NasHost}:$HostPort" Write-Host "To view logs:" Write-Host " ssh $Remote 'cd $RemoteAppDir && docker compose logs -f'"