forked from wangbo/easyai
feat(deploy): 支持更新脚本自动部署模型转换服务
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user