forked from wangbo/easyai
feat(deploy): 支持更新脚本自动部署模型转换服务
This commit is contained in:
+29
-8
@@ -56,6 +56,8 @@ if ($args -contains "-h" -or $args -contains "--help") {
|
||||
Write-Host " UPDATE_SKIP_REPO_UPDATE=true|false"
|
||||
Write-Host " true 等同 UPDATE_MODE=image"
|
||||
Write-Host " false 等同 UPDATE_MODE=full"
|
||||
Write-Host " UPDATE_SERVICES='easyai-server easyai-web model-conversion-worker'"
|
||||
Write-Host " 仅拉取并重建指定服务,不重建其依赖;留空保持整组更新。"
|
||||
Write-Host " UPDATE_NO_WAIT=1"
|
||||
Write-Host " 结束或失败时不等待按 Enter"
|
||||
Write-Host " UPDATE_HEALTH_TIMEOUT_SECONDS=秒数"
|
||||
@@ -274,7 +276,6 @@ if (-not (Ensure-DockerRunning)) {
|
||||
|
||||
# 检测 docker compose
|
||||
. (Join-Path $scriptDir "scripts\Assert-RedisPersistence.ps1")
|
||||
Assert-RedisPersistence -ProjectRoot $scriptDir
|
||||
$hasComposeV2 = $false
|
||||
try { $null = docker compose version 2>&1; $hasComposeV2 = $true } catch { }
|
||||
|
||||
@@ -296,7 +297,13 @@ function Wait-CoreServices {
|
||||
}
|
||||
}
|
||||
|
||||
$services = @("easyai-server", "ws-gateway", "easyai-web")
|
||||
$services = if ($updateServices.Count -gt 0) {
|
||||
$updateServices
|
||||
} elseif ($availableServices -contains "model-conversion-worker") {
|
||||
@("easyai-server", "ws-gateway", "easyai-web", "model-conversion-worker")
|
||||
} else {
|
||||
@("easyai-server", "ws-gateway", "easyai-web")
|
||||
}
|
||||
$deadline = (Get-Date).AddSeconds($timeoutSeconds)
|
||||
Write-Step "⏳ 正在等待核心服务恢复可用(最长 $timeoutSeconds 秒)..."
|
||||
|
||||
@@ -329,9 +336,9 @@ function Wait-CoreServices {
|
||||
|
||||
Write-Host "❌ 更新后核心服务未在 $timeoutSeconds 秒内恢复可用" -ForegroundColor Red
|
||||
if ($hasComposeV2) {
|
||||
docker compose ps easyai-server ws-gateway easyai-web
|
||||
docker compose ps @services
|
||||
} else {
|
||||
docker-compose ps easyai-server ws-gateway easyai-web
|
||||
docker-compose ps @services
|
||||
}
|
||||
Write-Err "请检查核心服务日志,确认失败原因后重试"
|
||||
}
|
||||
@@ -341,15 +348,29 @@ Write-Host ""
|
||||
Write-Step "🚀 重新启动 EasyAI..."
|
||||
Write-Step "📦 当前磁盘空间:"
|
||||
Get-PSDrive -PSProvider FileSystem | Where-Object { $_.Root -eq ([System.IO.Path]::GetPathRoot($scriptDir)) } | Format-Table Name, Used, Free -AutoSize
|
||||
$availableServices = if ($hasComposeV2) { @(& docker compose config --services) } else { @(& docker-compose config --services) }
|
||||
if ($LASTEXITCODE -ne 0) { Write-Err "部署配置校验失败,尚未拉取或重建服务" }
|
||||
$updateServices = @()
|
||||
if (-not [string]::IsNullOrWhiteSpace($env:UPDATE_SERVICES)) {
|
||||
$updateServices = @($env:UPDATE_SERVICES.Trim() -split '\s+')
|
||||
foreach ($service in $updateServices) {
|
||||
if ($availableServices -notcontains $service) { Write-Err "更新服务不存在: $service;尚未拉取或重建任何服务" }
|
||||
}
|
||||
}
|
||||
$upArguments = @("up", "-d")
|
||||
if ($updateServices.Count -gt 0) { $upArguments += @("--no-deps") + $updateServices }
|
||||
if ($updateServices.Count -eq 0 -or $updateServices -contains "redis") {
|
||||
Assert-RedisPersistence -ProjectRoot $scriptDir
|
||||
}
|
||||
if ($hasComposeV2) {
|
||||
docker compose pull
|
||||
docker compose pull @updateServices
|
||||
if ($LASTEXITCODE -ne 0) { Write-Err "镜像拉取失败,请检查网络、镜像仓库权限和服务器磁盘空间后重试" }
|
||||
docker compose up -d
|
||||
docker compose @upArguments
|
||||
if ($LASTEXITCODE -ne 0) { Write-Err "容器启动失败,EasyAI 未被标记为更新成功" }
|
||||
} else {
|
||||
docker-compose pull
|
||||
docker-compose pull @updateServices
|
||||
if ($LASTEXITCODE -ne 0) { Write-Err "镜像拉取失败,请检查网络、镜像仓库权限和服务器磁盘空间后重试" }
|
||||
docker-compose up -d
|
||||
docker-compose @upArguments
|
||||
if ($LASTEXITCODE -ne 0) { Write-Err "容器启动失败,EasyAI 未被标记为更新成功" }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user