Files
embycovers/deploy.ps1
T

88 lines
2.4 KiB
PowerShell
Raw Normal View History

2026-05-27 07:45:13 +12:00
<#
Deploy embycovers to an Asustor NAS over SSH/SCP from Windows PowerShell.
2026-05-27 09:13:18 +12:00
Syncs project files to the NAS, then runs `docker compose build` and
`docker compose up -d` on the remote. All runtime configuration (Emby URL,
API key, ports, volumes) comes from docker-compose.yml — edit it there.
2026-05-27 07:45:13 +12:00
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:
2026-05-27 09:13:18 +12:00
.\deploy.ps1 -NasHost MATT-NAS -NasUser ssh
2026-05-27 07:45:13 +12:00
#>
param(
[Parameter(Mandatory = $true)]
[string]$NasHost,
[Parameter(Mandatory = $true)]
[string]$NasUser,
2026-05-27 09:13:18 +12:00
[string]$RemoteAppDir = "/share/Docker/embycovers"
2026-05-27 07:45:13 +12:00
)
$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"
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
}
2026-05-27 09:13:18 +12:00
# Build and run on the NAS using values from docker-compose.yml.
2026-05-27 07:45:13 +12:00
$RemoteCommands = @"
set -e
cd '$RemoteAppDir'
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 "To view logs:"
Write-Host " ssh $Remote 'cd $RemoteAppDir && docker compose logs -f'"