Support up to 3 strategy slots on one host with auto ports.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-01 23:33:41 +08:00
parent 9c515644a3
commit aab0b9bdf6
8 changed files with 503 additions and 200 deletions
+42 -6
View File
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# deploy/lib/update.sh — 更新(仅 git pull,禁止 scp
# deploy/lib/update.sh — 更新(仅 git pull,禁止 scp;支持单槽位或全部串行
set -e
set -u
if [ -n "${BASH_VERSION:-}" ]; then
@@ -10,22 +10,58 @@ LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=common.sh
source "${LIB_DIR}/common.sh"
update_one_slot() {
local slot="$1"
resolve_slot "${slot}"
if ! repo_ready "${INSTALL_ROOT}"; then
log "槽位 ${slot} 未安装(${INSTALL_ROOT}),跳过"
return 0
fi
step "更新槽位 ${slot}: ${INSTALL_ROOT} :${API_PORT} ${PM2_APP_NAME}"
ensure_system_deps
bash "${INSTALL_ROOT}/deploy/pull_and_restart.sh"
verify_health "${API_PORT}" || true
log "槽位 ${slot} 更新完成"
}
update_all_slots() {
local s
local any=0
step "串行更新全部已安装策略机槽位(避免同机并行 npm build"
for s in $(list_installed_slots); do
any=1
update_one_slot "${s}"
done
if [[ "${any}" -eq 0 ]]; then
die "未找到已安装的策略机(槽位 1/2/3)"
fi
echo ""
log "全部槽位更新完成"
}
main_update() {
require_root
local mode="${EHS_UPDATE_MODE:-one}"
if [[ "${mode}" == "all" ]]; then
update_all_slots
return 0
fi
resolve_slot "${INSTANCE_SLOT:-1}"
if ! REPO_ROOT="$(resolve_repo_root)"; then
die "未找到安装目录 ${INSTALL_ROOT},请先执行「1) 一键部署策略机」"
die "未找到安装目录 ${INSTALL_ROOT},请先执行「1) 一键部署策略机」并选择该槽位"
fi
if ! repo_ready "${REPO_ROOT}"; then
die "安装不完整,请先执行「1) 一键部署策略机」"
die "安装不完整: ${REPO_ROOT}"
fi
step "更新 — 环境检测 (缺则装,有则跳过)"
ensure_system_deps
step "更新 比特骆驼自动化对冲系统 (git pull + 构建 + pm2 reload)"
step "更新槽位 ${INSTANCE_SLOT} (git pull + 构建 + pm2 reload)"
bash "${REPO_ROOT}/deploy/pull_and_restart.sh"
verify_health || true
verify_health "${API_PORT}" || true
echo ""
log "更新完成"
log "更新完成 slot=${INSTANCE_SLOT} http://127.0.0.1:${API_PORT}/health"
}
main_update "$@"