#!/usr/bin/env bash # deploy/lib/uninstall.sh — 停容器;可选删 volume;备份 .env;删除安装目录 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" main_uninstall() { require_root local root="" if ! root="$(resolve_repo_root)"; then if [[ -d "${INSTALL_ROOT}" ]]; then root="${INSTALL_ROOT}" else die "未找到安装目录 ${INSTALL_ROOT}" fi fi REPO_ROOT="${root}" echo "" echo "将卸载 比特骆驼行情采集分析 (market_intel):" echo " - 停止并移除 Compose 容器" echo " - 备份 .env 到 ${BACKUP_ROOT}" echo " - 删除安装目录: ${INSTALL_ROOT}" echo " - 可选:删除 data volume" echo "" if ! confirm_yes "确认卸载并删除 ${INSTALL_ROOT}?"; then log "已取消卸载" return 0 fi local remove_volume=0 if confirm_yes "是否同时删除 Docker data volume (mi_data)?"; then remove_volume=1 fi local stamp backup_dir stamp="$(TZ="${TZ_NAME}" date +%Y%m%d-%H%M%S)" backup_dir="${BACKUP_ROOT}/pre-uninstall-${stamp}" mkdir -p "${backup_dir}" step "备份 .env" if [[ -f "${REPO_ROOT}/.env" ]]; then cp -a "${REPO_ROOT}/.env" "${backup_dir}/.env" fi { echo "created_at=${stamp}" echo "install_root=${INSTALL_ROOT}" echo "remove_volume=${remove_volume}" echo "action=rm_rf_install_root" } >"${backup_dir}/uninstall.manifest" step "停止并移除容器" if command -v docker >/dev/null 2>&1 && [[ -f "${REPO_ROOT}/docker-compose.yml" ]]; then if [[ "${remove_volume}" -eq 1 ]]; then (cd "${REPO_ROOT}" && docker compose down -v) || true else (cd "${REPO_ROOT}" && docker compose down) || true fi fi step "删除安装目录 ${INSTALL_ROOT}" if [[ -d "${INSTALL_ROOT}" ]]; then case "${INSTALL_ROOT}" in /opt/market_intel|/opt/market_intel/) rm -rf "${INSTALL_ROOT}" log "已删除: ${INSTALL_ROOT}" ;; *) if [[ "${ALLOW_UNSAFE_UNINSTALL:-}" == "1" ]]; then rm -rf "${INSTALL_ROOT}" log "已删除(ALLOW_UNSAFE_UNINSTALL=1): ${INSTALL_ROOT}" else die "拒绝删除非默认路径 ${INSTALL_ROOT};若确认,设置 ALLOW_UNSAFE_UNINSTALL=1" fi ;; esac else log "安装目录不存在,跳过删除" fi local leftover for leftover in /opt/market_intel.removed.* /opt/market_intel.old.*; do if [[ -e "${leftover}" ]]; then rm -rf "${leftover}" log "已清理残留: ${leftover}" fi done echo "" echo "卸载完成." echo " 配置备份: ${backup_dir}" echo " volume 已删除: $([[ ${remove_volume} -eq 1 ]] && echo yes || echo no)" echo "" echo "重新部署:" echo " curl -fsSL https://git.bz121.com/dekun/market_intel/raw/branch/main/deploy/manage.sh | bash" } main_uninstall "$@"