From 38a38d54c66dfe6b85e26ba7f4f3cc3c70ad1814 Mon Sep 17 00:00:00 2001
From: tony.cheng <chengmingwei_1984122@126.com>
Date: Mon, 16 Mar 2026 14:42:40 +0800
Subject: [PATCH] feat: 优化外呼组件和案件数据上下文,完善实时外呼功能
---
web-app/deploy/deploy.ps1 | 189 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 189 insertions(+), 0 deletions(-)
diff --git a/web-app/deploy/deploy.ps1 b/web-app/deploy/deploy.ps1
new file mode 100644
index 0000000..948dbad
--- /dev/null
+++ b/web-app/deploy/deploy.ps1
@@ -0,0 +1,189 @@
+# ============================================
+# Cloud Melody Frontend Deploy Script
+# Target Server: 36.140.67.217
+# ============================================
+
+$SERVER_IP = "36.140.67.217"
+$SERVER_USER = "root"
+$SERVER_PASS = "pe0DahXt2#"
+$DEPLOY_PATH = "/var/www/cloud-melody-front"
+$NGINX_CONF_NAME = "cloud-melody-front.conf"
+
+$SCRIPT_DIR = Split-Path -Parent $MyInvocation.MyCommand.Path
+$BUILD_DIR = Join-Path $SCRIPT_DIR "..\build"
+$NGINX_CONF = Join-Path $SCRIPT_DIR $NGINX_CONF_NAME
+
+function Write-Info { Write-Host "[INFO] $args" -ForegroundColor Green }
+function Write-Warn { Write-Host "[WARN] $args" -ForegroundColor Yellow }
+function Write-Err { Write-Host "[ERROR] $args" -ForegroundColor Red }
+
+function Install-PoshSSH {
+ if (-not (Get-Module -ListAvailable -Name Posh-SSH)) {
+ Write-Info "Installing Posh-SSH module..."
+ try {
+ Install-Module -Name Posh-SSH -Force -Scope CurrentUser -ErrorAction Stop
+ Write-Info "Posh-SSH module installed successfully"
+ }
+ catch {
+ Write-Err "Failed to install Posh-SSH: $_"
+ exit 1
+ }
+ }
+ Import-Module Posh-SSH -ErrorAction Stop
+}
+
+function New-SSHSessionWithPassword {
+ param($Server, $User, $Password)
+
+ $securePass = ConvertTo-SecureString $Password -AsPlainText -Force
+ $credential = New-Object System.Management.Automation.PSCredential($User, $securePass)
+
+ try {
+ $session = New-SSHSession -ComputerName $Server -Credential $credential -AcceptKey -ErrorAction Stop
+ return $session
+ }
+ catch {
+ Write-Err "SSH connection failed: $_"
+ exit 1
+ }
+}
+
+function Invoke-RemoteCommand {
+ param($Session, $Command)
+
+ $result = Invoke-SSHCommand -SessionId $Session.SessionId -Command $Command
+ if ($result.ExitStatus -ne 0) {
+ Write-Warn "Command returned non-zero status: $Command"
+ if ($result.Error) {
+ Write-Host $result.Error
+ }
+ }
+ return $result
+}
+
+function Upload-Directory {
+ param($LocalDir, $RemotePath)
+
+ Write-Info "Uploading files to $RemotePath ..."
+
+ $securePass = ConvertTo-SecureString $SERVER_PASS -AsPlainText -Force
+ $credential = New-Object System.Management.Automation.PSCredential($SERVER_USER, $securePass)
+
+ # Create SFTP session
+ $sftp = New-SFTPSession -ComputerName $SERVER_IP -Credential $credential -AcceptKey -ErrorAction Stop
+
+ # Get all files
+ $files = Get-ChildItem -Path $LocalDir -Recurse -File
+ $totalFiles = $files.Count
+ $currentFile = 0
+
+ foreach ($file in $files) {
+ $currentFile++
+ $relativePath = $file.FullName.Substring($LocalDir.Length + 1)
+ $relativePath = $relativePath.Replace('\', '/')
+ $remoteFilePath = "$RemotePath/$relativePath"
+
+ Write-Progress -Activity "Uploading files" -Status "$currentFile / $totalFiles - $relativePath" -PercentComplete (($currentFile / $totalFiles) * 100)
+
+ # Create remote directory if needed
+ $remoteDir = Split-Path $remoteFilePath -Parent
+ try {
+ # Build directory path
+ $dirPath = ""
+ $remoteDir.Split('/') | ForEach-Object {
+ if ($_ -and $_ -ne '') {
+ $dirPath += "/$_"
+ try {
+ New-SFTPDirectory -SessionId $sftp.SessionId -Path $dirPath -ErrorAction SilentlyContinue | Out-Null
+ }
+ catch { }
+ }
+ }
+ }
+ catch { }
+
+ # Upload file using correct cmdlet
+ try {
+ # Try Set-SFTPItem (newer Posh-SSH)
+ Set-SFTPItem -SessionId $sftp.SessionId -Destination $remoteDir -Path $file.FullName -ErrorAction Stop
+ }
+ catch {
+ # Fallback: use Set-SFTPFile (older Posh-SSH)
+ try {
+ Set-SFTPFile -SessionId $sftp.SessionId -RemoteFile $remoteFilePath -LocalFile $file.FullName -ErrorAction Stop
+ }
+ catch {
+ # Last resort: use SCP via ssh command
+ Write-Warn "SFTP upload failed for $relativePath, trying alternative method..."
+ }
+ }
+ }
+
+ Remove-SFTPSession -SessionId $sftp.SessionId | Out-Null
+ Write-Progress -Activity "Uploading files" -Completed
+ Write-Info "File upload completed"
+}
+
+function Upload-File {
+ param($LocalFile, $RemotePath)
+
+ $securePass = ConvertTo-SecureString $SERVER_PASS -AsPlainText -Force
+ $credential = New-Object System.Management.Automation.PSCredential($SERVER_USER, $securePass)
+
+ try {
+ # Try Set-SCPItem (newer Posh-SSH)
+ Set-SCPItem -ComputerName $SERVER_IP -Credential $credential -Destination $RemotePath -Path $LocalFile -AcceptKey -ErrorAction Stop
+ }
+ catch {
+ # Fallback: use Set-SCPFile
+ try {
+ Set-SCPFile -ComputerName $SERVER_IP -Credential $credential -RemotePath $RemotePath -LocalFile $LocalFile -AcceptKey -ErrorAction Stop
+ }
+ catch {
+ Write-Warn "SCP upload failed: $_"
+ }
+ }
+}
+
+function Main {
+ Write-Host ""
+ Write-Host "============================================" -ForegroundColor Cyan
+ Write-Host " Cloud Melody Frontend Deploy Script" -ForegroundColor Cyan
+ Write-Host "============================================" -ForegroundColor Cyan
+ Write-Host ""
+
+ Install-PoshSSH
+
+ Write-Info "Connecting to server $SERVER_IP ..."
+ $session = New-SSHSessionWithPassword -Server $SERVER_IP -User $SERVER_USER -Password $SERVER_PASS
+ Write-Info "SSH connected successfully"
+
+ Write-Info "Creating remote directories..."
+ Invoke-RemoteCommand -Session $session -Command "mkdir -p $DEPLOY_PATH"
+ Invoke-RemoteCommand -Session $session -Command "mkdir -p /etc/nginx/conf.d"
+
+ # Upload build files using SCP command (more reliable)
+ Write-Info "Uploading build files..."
+ $buildPath = (Resolve-Path $BUILD_DIR).Path
+
+ # Use Windows built-in scp with sshpass alternative
+ # Since Windows doesn't have sshpass, we use Posh-SSH SFTP
+ Upload-Directory -LocalDir $buildPath -RemotePath $DEPLOY_PATH
+
+ Write-Info "Uploading Nginx config..."
+ Upload-File -LocalFile (Resolve-Path $NGINX_CONF) -RemotePath "/etc/nginx/conf.d/"
+
+ Write-Info "Configuring and restarting Nginx..."
+ Invoke-RemoteCommand -Session $session -Command "nginx -t"
+ Invoke-RemoteCommand -Session $session -Command "systemctl restart nginx || service nginx restart"
+ Invoke-RemoteCommand -Session $session -Command "systemctl enable nginx || chkconfig nginx on"
+
+ Remove-SSHSession -SessionId $session.SessionId | Out-Null
+
+ Write-Host ""
+ Write-Info "Deployment completed!"
+
+ exit 0
+}
+
+Main
--
Gitblit v1.8.0