106 lines
4.3 KiB
Bash
106 lines
4.3 KiB
Bash
|
|
#!/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 ""
|