Compare commits
2
Commits
c3137a2bdf
...
b8342e07a8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8342e07a8 | ||
|
|
db06028e6e |
+99
@@ -0,0 +1,99 @@
|
||||
<#
|
||||
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'"
|
||||
|
||||
Reference in New Issue
Block a user