feat(deploy): 支持更新脚本自动部署模型转换服务
Test deployment public URL (Linux) / test-linux (push) Canceled after 0s
Test start.ps1 (Windows) / test-windows (push) Canceled after 0s

This commit is contained in:
2026-10-03 02:17:47 +08:00
parent 4e4c4c9f23
commit be3ba8838a
11 changed files with 308 additions and 16 deletions
+32 -6
View File
@@ -17,6 +17,8 @@ if [[ "${1:-}" =~ ^(-h|--help)$ ]]; then
echo " false 等同 UPDATE_MODE=full"
echo " UPDATE_HEALTH_TIMEOUT_SECONDS=秒数"
echo " 等待核心服务恢复可用的最长时间,默认 300 秒"
echo " UPDATE_SERVICES='easyai-server easyai-web model-conversion-worker'"
echo " 仅拉取并重建指定服务;不重建其依赖。留空保持整组更新。"
echo ""
echo "仓库更新后会自动执行 scripts/update-env.d 中的幂等环境配置迁移。"
exit 0
@@ -228,6 +230,11 @@ wait_for_core_services() {
local timeout_seconds="${UPDATE_HEALTH_TIMEOUT_SECONDS:-300}"
local deadline=$((SECONDS + timeout_seconds))
local services=(easyai-server ws-gateway easyai-web)
if [ "${#UPDATE_SERVICE_LIST[@]}" -gt 0 ]; then
services=("${UPDATE_SERVICE_LIST[@]}")
elif printf '%s\n' "$AVAILABLE_SERVICES" | grep -qx 'model-conversion-worker'; then
services+=(model-conversion-worker)
fi
local service container_id state running health all_ready
if ! [[ "$timeout_seconds" =~ ^[1-9][0-9]*$ ]]; then
@@ -262,23 +269,42 @@ wait_for_core_services() {
echo "❌ 更新后核心服务未在 ${timeout_seconds} 秒内恢复可用"
echo " 当前状态:"
sudo $DOCKER_COMPOSE_CMD ps easyai-server ws-gateway easyai-web || true
echo " 请运行 '$DOCKER_COMPOSE_CMD logs --tail=100 easyai-server ws-gateway easyai-web' 查看原因"
sudo $DOCKER_COMPOSE_CMD ps "${services[@]}" || true
echo " 请运行 '$DOCKER_COMPOSE_CMD logs --tail=100 ${services[*]}' 查看原因"
return 1
}
# 旧 Redis 若仍把 AOF/RDB 留在容器写层,直接 up 会丢失数据。
sudo ./scripts/check-redis-persistence.sh
# 必须在拉取/重建前确认服务名称,防止拼写错误扩大更新范围。
AVAILABLE_SERVICES="$(sudo $DOCKER_COMPOSE_CMD config --services)"
UPDATE_SERVICE_LIST=()
if [ -n "${UPDATE_SERVICES:-}" ]; then
read -r -a UPDATE_SERVICE_LIST <<< "$UPDATE_SERVICES"
for service in "${UPDATE_SERVICE_LIST[@]}"; do
if ! printf '%s\n' "$AVAILABLE_SERVICES" | grep -qx -- "$service"; then
echo "❌ 更新服务不存在: $service;尚未拉取或重建任何服务" >&2
exit 1
fi
done
fi
# 只检查本次会重建的 Redis;--no-deps 更新其他服务不会修改其旧数据位置。
if [ "${#UPDATE_SERVICE_LIST[@]}" -eq 0 ] || printf '%s\n' "${UPDATE_SERVICE_LIST[@]}" | grep -qx 'redis'; then
sudo ./scripts/check-redis-persistence.sh
fi
echo "🚀 重新启动EasyAI"
echo "📦 当前磁盘空间:"
df -h "$SCRIPT_DIR" | tail -n 1
if ! sudo $DOCKER_COMPOSE_CMD pull; then
if ! sudo $DOCKER_COMPOSE_CMD pull "${UPDATE_SERVICE_LIST[@]}"; then
echo "❌ 镜像拉取失败,EasyAI 未被标记为更新成功"
echo " 请检查网络、镜像仓库权限和服务器磁盘空间后重试"
exit 1
fi
if ! sudo $DOCKER_COMPOSE_CMD up -d; then
UP_ARGUMENTS=(-d)
if [ "${#UPDATE_SERVICE_LIST[@]}" -gt 0 ]; then
UP_ARGUMENTS+=(--no-deps "${UPDATE_SERVICE_LIST[@]}")
fi
if ! sudo $DOCKER_COMPOSE_CMD up "${UP_ARGUMENTS[@]}"; then
echo "❌ 容器启动失败,EasyAI 未被标记为更新成功"
exit 1
fi