#Requires -Version 5.1 <# .SYNOPSIS Pulls the repo on the server, copies .env_prod as .env, then starts the container. .EXAMPLE .\docker-publish.ps1 .\docker-publish.ps1 -SshKey "~/.ssh/id_rsa" #> param( [string]$SshKey = "" ) Set-StrictMode -Version Latest $ErrorActionPreference = "Stop" # --------------------------------------------------------------------------- # Configuration # --------------------------------------------------------------------------- $SSH_HOST = "192.168.1.200" $SSH_USER = "root" $REPO_PATH = "/root/kanban" $REPO_URL = "https://onefortheroadgit.sytes.net/dcovington/KCI-PHP-KANBAN.git" # --------------------------------------------------------------------------- # Helpers # --------------------------------------------------------------------------- function Write-Step([string]$msg) { Write-Host "`n==> $msg" -ForegroundColor Cyan } function Get-BaseArgs { $a = @("-o", "StrictHostKeyChecking=accept-new") if ($SshKey -ne "") { $a += @("-i", $SshKey) } return $a } # Deploy whichever branch is currently checked out locally. $BRANCH = (git rev-parse --abbrev-ref HEAD).Trim() Write-Host "Branch: $BRANCH" -ForegroundColor Yellow # --------------------------------------------------------------------------- # Step 1 — clone or pull the repo (first password prompt) # --------------------------------------------------------------------------- Write-Step "Syncing repo on $SSH_USER@$SSH_HOST" $prepCmd = "set -e; " $prepCmd += "if [ -d '$REPO_PATH/.git' ]; then " $prepCmd += "cd '$REPO_PATH' && git fetch origin && git checkout $BRANCH && git pull origin $BRANCH; " $prepCmd += "else " $prepCmd += "git clone --branch $BRANCH '$REPO_URL' '$REPO_PATH'; " $prepCmd += "fi" $sshArgs = Get-BaseArgs $sshArgs += "$SSH_USER@$SSH_HOST", $prepCmd ssh @sshArgs if ($LASTEXITCODE -ne 0) { Write-Error "Repo sync failed (exit $LASTEXITCODE)." } # --------------------------------------------------------------------------- # Step 2 — copy .env_prod as .env into the now-existing repo dir (second prompt) # --------------------------------------------------------------------------- Write-Step "Copying .env_prod to $SSH_USER@$SSH_HOST as .env" $scpArgs = Get-BaseArgs $scpArgs += ".env_prod", "${SSH_USER}@${SSH_HOST}:${REPO_PATH}/.env" scp @scpArgs if ($LASTEXITCODE -ne 0) { Write-Error "scp failed (exit $LASTEXITCODE)." } # --------------------------------------------------------------------------- # Step 3 — copy the SQLite database (disabled — do not overwrite live data) # --------------------------------------------------------------------------- # Write-Step "Copying database/app.sqlite to $SSH_USER@$SSH_HOST" # $scpDbArgs = Get-BaseArgs # $scpDbArgs += "database/app.sqlite", "${SSH_USER}@${SSH_HOST}:${REPO_PATH}/database/app.sqlite" # scp @scpDbArgs # if ($LASTEXITCODE -ne 0) { Write-Error "scp database failed (exit $LASTEXITCODE)." } # --------------------------------------------------------------------------- # Step 4 — start the container (third password prompt) # --------------------------------------------------------------------------- Write-Step "Starting container on $SSH_USER@$SSH_HOST" $deployCmd = "set -e; " $deployCmd += "docker rm -f kci-kanban-app 2>/dev/null || true; " $deployCmd += "cd '$REPO_PATH' && docker compose up -d --build --wait" $sshArgs = Get-BaseArgs $sshArgs += "$SSH_USER@$SSH_HOST", $deployCmd ssh @sshArgs if ($LASTEXITCODE -ne 0) { Write-Error "Deployment failed (exit $LASTEXITCODE)." } Write-Host "`nDone. KCI Kanban is running on $SSH_HOST." -ForegroundColor Green