aab0b9bdf6
Co-authored-by: Cursor <cursoragent@cursor.com>
82 lines
2.1 KiB
Bash
Executable File
82 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# deploy/lib/install.sh — 一键部署策略机(支持槽位 1/2/3)
|
||
set -e
|
||
set -u
|
||
if [ -n "${BASH_VERSION:-}" ]; then
|
||
set -o pipefail
|
||
fi
|
||
|
||
LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
# shellcheck source=common.sh
|
||
source "${LIB_DIR}/common.sh"
|
||
|
||
run_pipeline() {
|
||
local root="$1"
|
||
REPO_ROOT="${root}"
|
||
INSTALL_ROOT="${root}"
|
||
apply_slot_for_root "${root}"
|
||
step "构建并启动策略机 (pull_and_restart.sh) slot=${INSTANCE_SLOT}"
|
||
bash "${REPO_ROOT}/deploy/pull_and_restart.sh"
|
||
pm2_save_startup
|
||
verify_health "${API_PORT}" || true
|
||
print_post_install_guide
|
||
}
|
||
|
||
install_fresh() {
|
||
require_root
|
||
step "一键部署策略机 — 环境检测与依赖"
|
||
ensure_system_deps
|
||
assert_port_free_for_install "${API_PORT}" "${PM2_APP_NAME}"
|
||
step "克隆仓库 → ${INSTALL_ROOT}(槽位 ${INSTANCE_SLOT} / :${API_PORT})"
|
||
if [[ -d "${INSTALL_ROOT}" ]]; then
|
||
die "目录已存在: ${INSTALL_ROOT},请先卸载或选修复"
|
||
fi
|
||
mkdir -p "$(dirname "${INSTALL_ROOT}")"
|
||
git clone -b "${GIT_BRANCH}" "${GIT_URL}" "${INSTALL_ROOT}"
|
||
run_pipeline "${INSTALL_ROOT}"
|
||
}
|
||
|
||
install_repair() {
|
||
require_root
|
||
step "修复部署 — 环境检测与依赖"
|
||
ensure_system_deps
|
||
if ! REPO_ROOT="$(resolve_repo_root)"; then
|
||
die "未找到安装目录 ${INSTALL_ROOT}"
|
||
fi
|
||
step "修复环境(保留 .env 与数据库) slot=${INSTANCE_SLOT}"
|
||
run_pipeline "${REPO_ROOT}"
|
||
}
|
||
|
||
handle_existing() {
|
||
echo ""
|
||
echo "检测到已部署: ${INSTALL_ROOT}(槽位 ${INSTANCE_SLOT})"
|
||
echo " a) 取消"
|
||
echo " b) 修复/重装环境(保留 .env 与 SQLite)"
|
||
local choice=""
|
||
cm_read choice "请选择 [a/b]: "
|
||
case "${choice}" in
|
||
b|B) install_repair ;;
|
||
*) log "已取消" ;;
|
||
esac
|
||
}
|
||
|
||
main_install() {
|
||
require_root
|
||
# manage.sh 已 prompt;直接调用时按 INSTANCE_SLOT / INSTALL_ROOT 对齐
|
||
if [[ "${INSTALL_ROOT}" == "/opt/eth_hedge_sim_2" ]]; then
|
||
resolve_slot 2
|
||
elif [[ "${INSTALL_ROOT}" == "/opt/eth_hedge_sim_3" ]]; then
|
||
resolve_slot 3
|
||
else
|
||
resolve_slot "${INSTANCE_SLOT:-1}"
|
||
fi
|
||
|
||
if repo_ready "${INSTALL_ROOT}"; then
|
||
handle_existing
|
||
else
|
||
install_fresh
|
||
fi
|
||
}
|
||
|
||
main_install "$@"
|