#!/usr/bin/env bash # ============================================================================== # 自动化商品监控面板 - 第 5 步 (组件 3):远程自举与本地一键部署脚本 (install.sh) # 版本: v1.1.0 (支持 bash <(curl -sL ...) 远程拉取安装 + 本地直接初始化双模式) # 职责: # 1. 自动识别运行方式:若通过 bash <(curl -sL ...) 远程运行,自动从 GitHub 拉取 7 个核心文件到 ~/vpsmonitor # 2. 初始化标准目录结构 (configs, creds, browser_data, pids, logs, backups),升级时不覆盖已有配置与凭据 # 3. 赋予脚本可执行权限,自动探测并锁定当前虚拟环境 (如 vmiss) 的 Python 解释器 # 4. 注册全局快捷键 mon (写入 /usr/local/bin/mon 与 ~/.bashrc),任意目录输入 mon 即可启动面板 # ============================================================================== set -e # 👇 上传 GitHub 后,将此处改为你的 GitHub 用户名与仓库名(默认分支 main) GITHUB_REPO="${GITHUB_REPO:-你的GitHub用户名/vpsmonitor}" GITHUB_BRANCH="${GITHUB_BRANCH:-main}" GITHUB_TOKEN="${GITHUB_TOKEN:-}" GITHUB_RAW_BASE="https://mon.feguo.eu.org" CORE_FILES=( "parsers.py" "cf_engine.py" "prober.py" "worker.py" "ctl.sh" "panel.sh" "install.sh" ) # 智能判定当前是“本地目录执行”还是“bash <(curl -sL ...) 远程自举执行” SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd || echo "")" if [ -n "${SCRIPT_DIR}" ] && [ -f "${SCRIPT_DIR}/panel.sh" ] && [ -f "${SCRIPT_DIR}/worker.py" ]; then BASE_DIR="${SCRIPT_DIR}" INSTALL_MODE="LOCAL" else BASE_DIR="${INSTALL_DIR:-${HOME}/vpsmonitor}" INSTALL_MODE="REMOTE" fi mkdir -p "${BASE_DIR}"/{configs,creds,browser_data,pids,logs,backups} # 若为远程自举模式,从 GitHub Raw 依次拉取 7 个核心代码文件(不触碰已有的 configs/creds) if [ "${INSTALL_MODE}" = "REMOTE" ]; then echo "" echo "======================================================================" echo "🌐 检测到远程一键安装模式,正在从 GitHub 同步核心代码至: ${BASE_DIR}" echo " 仓库源: ${GITHUB_REPO} (分支: ${GITHUB_BRANCH})" echo "======================================================================" CURL_AUTH_ARGS=() if [ -n "${GITHUB_TOKEN}" ]; then CURL_AUTH_ARGS=(-H "Authorization: token ${GITHUB_TOKEN}") fi for fname in "${CORE_FILES[@]}"; do target_url="${GITHUB_RAW_BASE}/${fname}" echo -n " ⬇️ 正在拉取 ${fname} ... " if curl -fsSL "${CURL_AUTH_ARGS[@]}" "${target_url}" -o "${BASE_DIR}/${fname}.tmp"; then mv -f "${BASE_DIR}/${fname}.tmp" "${BASE_DIR}/${fname}" echo "✅" else rm -f "${BASE_DIR}/${fname}.tmp" echo "❌" echo -e "\033[31m[错误] 无法下载 ${target_url},请检查 GITHUB_REPO 地址是否正确或仓库是否可访问!\033[0m" exit 1 fi done fi chmod +x "${BASE_DIR}"/*.sh "${BASE_DIR}"/*.py 2>/dev/null || true # 触发 ctl.sh 自动探测并锁定当前虚拟环境的 Python 路径 rm -f "${BASE_DIR}/.python_bin" bash "${BASE_DIR}/ctl.sh" --selftest >/dev/null 2>&1 || true LOCKED_PY="$(cat "${BASE_DIR}/.python_bin" 2>/dev/null || echo 'python3')" # 注册全局快捷键 mon if [ -w "/usr/local/bin" ]; then cat > /usr/local/bin/mon </dev/null || true echo "alias mon='bash ${BASE_DIR}/panel.sh'" >> "${HOME}/.bashrc" fi echo "" echo "======================================================================" echo "🎉 自动化商品监控面板部署完成!(${INSTALL_MODE} 模式)" echo "======================================================================" echo "📁 安装主目录 : ${BASE_DIR}" echo "🐍 锁定 Python 源 : ${LOCKED_PY}" echo "⌨️ 启动面板快捷键 : 直接在终端任意位置输入 mon 回车即可启动!" echo "======================================================================" echo ""