Files
2026-08-01 23:33:41 +08:00

82 lines
2.1 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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 "$@"