#!/usr/bin/env bash # # 云端浏览器一键卸载脚本 # 安装路径: /opt/cloud-browser # 运行用户: root # set -eu INSTALL_DIR="/opt/cloud-browser" FORCE=0 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log() { echo -e "${GREEN}[INFO]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } err() { echo -e "${RED}[ERROR]${NC} $*" >&2; } usage() { echo "用法: bash uninstall.sh [-y]" echo " -y 跳过确认,直接删除" } while getopts ":yh" opt; do case "$opt" in y) FORCE=1 ;; h) usage; exit 0 ;; *) usage; exit 1 ;; esac done if [ "$(id -u)" -ne 0 ]; then err "请使用 root 用户运行此脚本" exit 1 fi if [ ! -d "${INSTALL_DIR}" ]; then warn "目录不存在: ${INSTALL_DIR},无需卸载" exit 0 fi echo "" echo "即将卸载云端浏览器:" echo " - 停止并删除 Docker 容器" echo " - 删除本地构建的镜像" echo " - 删除目录 ${INSTALL_DIR}(含 data 账号数据)" echo "" if [ "$FORCE" -ne 1 ]; then printf "确认删除?输入 yes 继续: " read -r confirm if [ "$confirm" != "yes" ]; then log "已取消" exit 0 fi fi stop_containers() { if ! command -v docker >/dev/null 2>&1; then warn "未检测到 Docker,跳过容器停止" return fi if [ ! -f "${INSTALL_DIR}/docker-compose.yml" ]; then warn "未找到 docker-compose.yml,跳过容器停止" return fi log "停止并删除容器..." (cd "${INSTALL_DIR}" && docker compose down -v --rmi local 2>/dev/null) \ || (cd "${INSTALL_DIR}" && docker compose down -v) \ || warn "容器停止失败,将继续删除文件" } remove_directory() { log "删除安装目录 ${INSTALL_DIR} ..." rm -rf "${INSTALL_DIR}" } main() { log "开始卸载云端浏览器..." stop_containers remove_directory echo "" echo "==========================================" echo " 云端浏览器已卸载" echo "==========================================" echo " 如需重新安装:" echo " git clone https://git.bz121.com/dekun/cloud-browser.git ${INSTALL_DIR}" echo " bash ${INSTALL_DIR}/deploy.sh" echo "==========================================" } main "$@"