#!/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 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}" # curl | bash 时脚本从 stdin 执行,BASH_SOURCE[0] 为空;须先安全探测再 set -u _script_src="${BASH_SOURCE[0]:-}" if [[ -n "${_script_src}" && -f "${_script_src}" ]]; then DEPLOY_DIR="$(cd "$(dirname "${_script_src}")" && pwd)" REPO_ROOT="$(cd "${DEPLOY_DIR}/.." && pwd)" LIB_DIR="${DEPLOY_DIR}/lib" else DEPLOY_DIR="" REPO_ROOT="" LIB_DIR="" fi unset _script_src set -u # curl | bash: stdin 为管道,clone 后或已有仓库时改从终端读入 reexec_with_tty_if_needed() { if [[ -t 0 ]]; then return 0 fi local script="" if [[ -f "${INSTALL_ROOT}/deploy/manage.sh" ]]; then script="${INSTALL_ROOT}/deploy/manage.sh" elif [[ -n "${DEPLOY_DIR}" && -f "${DEPLOY_DIR}/manage.sh" ]]; then script="${DEPLOY_DIR}/manage.sh" fi if [[ -n "${script}" ]]; then exec bash "${script}" "$@" &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" "$@"