#!/usr/bin/env bash # ═══════════════════════════════════════════════════════════════════════════════ # 天工智能体平台 — 卸载清理脚本 # 用法: bash uninstall.sh # ═══════════════════════════════════════════════════════════════════════════════ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' info() { echo -e "${GREEN}[✓]${NC} $*"; } warn() { echo -e "${YELLOW}[!]${NC} $*"; } error() { echo -e "${RED}[✗]${NC} $*"; exit 1; } COMPOSE_FILE="./docker-compose.prod.yml" if docker compose version &>/dev/null; then COMPOSE="docker compose" elif command -v docker-compose &>/dev/null; then COMPOSE="docker-compose" else error "未找到 Docker Compose" fi echo "" echo -e "${RED}╔══════════════════════════════════════╗${NC}" echo -e "${RED}║ 天工智能体平台 — 卸载清理 ║${NC}" echo -e "${RED}╚══════════════════════════════════════╝${NC}" echo "" echo -e "${RED}⚠ 警告:此操作将停止并删除所有服务容器!${NC}" echo "" # ─── 1. 确认 ───────────────────────────────────────────────────────────────── read -r -p "是否继续?(y/N): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy] ]]; then info "已取消卸载" exit 0 fi # ─── 2. 停止并删除容器 ─────────────────────────────────────────────────────── echo "" info "正在停止并删除容器..." $COMPOSE -f "$COMPOSE_FILE" down --remove-orphans 2>/dev/null || true # ─── 3. 询问是否删除数据卷 ─────────────────────────────────────────────────── echo "" echo -e "${YELLOW}是否同时删除数据卷?${NC}" echo " 这将删除 MySQL、Redis、工作区文件、上传文件、日志等所有数据。" echo "" read -r -p "删除数据卷?(y/N): " REMOVE_VOLS if [[ "$REMOVE_VOLS" =~ ^[Yy] ]]; then info "正在删除数据卷..." $COMPOSE -f "$COMPOSE_FILE" down -v 2>/dev/null || true # 同时清理项目相关的已命名卷 docker volume rm -f aiagent_mysql_data aiagent_redis_data \ aiagent_agent_workspaces aiagent_uploads aiagent_logs 2>/dev/null || true info "数据卷已删除" else info "保留数据卷(重新安装时可恢复数据)" echo " 手动删除数据卷:" echo " docker volume rm aiagent_mysql_data aiagent_redis_data" fi # ─── 4. 清理镜像 ───────────────────────────────────────────────────────────── echo "" read -r -p "是否删除构建的镜像?(y/N): " REMOVE_IMGS if [[ "$REMOVE_IMGS" =~ ^[Yy] ]]; then info "正在删除镜像..." docker images --filter "label=com.docker.compose.project=aiagent" -q 2>/dev/null | \ xargs -r docker rmi -f 2>/dev/null || true info "镜像已删除" else info "保留镜像" fi # ─── 5. 总结 ───────────────────────────────────────────────────────────────── echo "" echo -e "${GREEN}卸载完成。${NC}" echo "" echo "已删除的内容:" echo " - 所有服务容器" if [[ "${REMOVE_VOLS:-no}" =~ ^[Yy] ]]; then echo " - 数据卷(MySQL/Redis/工作区/上传/日志)" fi if [[ "${REMOVE_IMGS:-no}" =~ ^[Yy] ]]; then echo " - Docker 镜像" fi echo "" echo "保留的文件(需手动删除):" echo " - 项目源码: $SCRIPT_DIR" echo " - 配置文件: $SCRIPT_DIR/backend/.env" echo " - 备份目录: $SCRIPT_DIR/backups/" echo ""