58c9f36a75
Provides curl-friendly manage.sh so production servers can bootstrap without a prior clone, then configure API and risk settings in the browser. Co-authored-by: Cursor <cursoragent@cursor.com>
130 lines
3.3 KiB
Bash
130 lines
3.3 KiB
Bash
#!/usr/bin/env bash
|
|
# crypto_monitor 部署管理器 — 一键部署 / 卸载 / 更新
|
|
#
|
|
# 新服务器(免克隆):
|
|
# curl -fsSL https://git.bz121.com/dekun/crypto_monitor/raw/branch/main/deploy/manage.sh | bash
|
|
#
|
|
# 已安装:
|
|
# bash /opt/crypto_monitor/deploy/manage.sh
|
|
#
|
|
set -e
|
|
set -u
|
|
if [ -n "${BASH_VERSION:-}" ]; then
|
|
set -o pipefail
|
|
fi
|
|
|
|
INSTALL_ROOT="${INSTALL_ROOT:-/opt/crypto_monitor}"
|
|
GIT_URL="${GIT_URL:-https://git.bz121.com/dekun/crypto_monitor.git}"
|
|
GIT_BRANCH="${GIT_BRANCH:-main}"
|
|
|
|
SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
|
|
DEPLOY_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_ROOT="$(cd "${DEPLOY_DIR}/.." && pwd)"
|
|
LIB_DIR="${DEPLOY_DIR}/lib"
|
|
|
|
repo_ready() {
|
|
[[ -f "${1}/deploy/setup_env.sh" && -f "${1}/deploy/manage.sh" ]]
|
|
}
|
|
|
|
bootstrap_repo() {
|
|
if repo_ready "${INSTALL_ROOT}"; then
|
|
REPO_ROOT="${INSTALL_ROOT}"
|
|
DEPLOY_DIR="${REPO_ROOT}/deploy"
|
|
LIB_DIR="${DEPLOY_DIR}/lib"
|
|
return 0
|
|
fi
|
|
if repo_ready "${REPO_ROOT}"; then
|
|
return 0
|
|
fi
|
|
|
|
echo "crypto_monitor 部署管理器 — 首次自举"
|
|
echo "将克隆到: ${INSTALL_ROOT}"
|
|
if [[ "$(id -u)" -ne 0 ]]; then
|
|
echo "错误: 请使用 root 执行" >&2
|
|
exit 1
|
|
fi
|
|
if ! command -v git >/dev/null 2>&1; then
|
|
if command -v apt-get >/dev/null 2>&1; then
|
|
export DEBIAN_FRONTEND=noninteractive
|
|
apt-get update -qq
|
|
apt-get install -y git ca-certificates curl
|
|
else
|
|
echo "错误: 未找到 git" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
if [[ -d "${INSTALL_ROOT}" ]]; then
|
|
echo "错误: ${INSTALL_ROOT} 已存在但不是有效仓库" >&2
|
|
echo "请手动处理后再运行,或设置 INSTALL_ROOT 指向其它路径" >&2
|
|
exit 1
|
|
fi
|
|
mkdir -p "$(dirname "${INSTALL_ROOT}")"
|
|
git clone -b "${GIT_BRANCH}" "${GIT_URL}" "${INSTALL_ROOT}"
|
|
exec bash "${INSTALL_ROOT}/deploy/manage.sh" "$@"
|
|
}
|
|
|
|
show_banner() {
|
|
local ip path
|
|
path="${INSTALL_ROOT}"
|
|
if repo_ready "${REPO_ROOT}"; then
|
|
path="${REPO_ROOT}"
|
|
fi
|
|
# shellcheck source=/dev/null
|
|
if [[ -f "${LIB_DIR}/common.sh" ]]; then
|
|
source "${LIB_DIR}/common.sh"
|
|
ip="$(detect_server_ip)"
|
|
else
|
|
ip="?"
|
|
fi
|
|
echo ""
|
|
echo "╔══════════════════════════════════════╗"
|
|
echo "║ crypto_monitor 部署管理器 ║"
|
|
echo "║ 路径: ${path}"
|
|
echo "╚══════════════════════════════════════╝"
|
|
echo ""
|
|
}
|
|
|
|
show_menu() {
|
|
echo " 1) 一键部署"
|
|
echo " 2) 一键卸载"
|
|
echo " 3) 更新"
|
|
echo " 0) 退出"
|
|
echo ""
|
|
}
|
|
|
|
main_menu() {
|
|
bootstrap_repo
|
|
# shellcheck source=lib/common.sh
|
|
source "${LIB_DIR}/common.sh"
|
|
REPO_ROOT="$(resolve_repo_root || echo "${INSTALL_ROOT}")"
|
|
|
|
while true; do
|
|
show_banner
|
|
show_menu
|
|
local choice=""
|
|
read -r -p "请选择 [0-3]: " choice
|
|
case "${choice}" in
|
|
1)
|
|
bash "${LIB_DIR}/install.sh"
|
|
;;
|
|
2)
|
|
bash "${LIB_DIR}/uninstall.sh"
|
|
;;
|
|
3)
|
|
bash "${LIB_DIR}/update.sh"
|
|
;;
|
|
0)
|
|
echo "再见."
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "无效选项,请输入 0-3"
|
|
;;
|
|
esac
|
|
echo ""
|
|
read -r -p "按 Enter 返回菜单..." _
|
|
done
|
|
}
|
|
|
|
main_menu "$@"
|