From da9826b08e093fba7cb2189daea6e0e801b09bdb Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 24 Jan 2026 20:27:04 -0800 Subject: [PATCH] fix(deploy): nuke command only deletes project resources Changed nuke command to only delete iConsulting project resources: - Only project containers (via docker-compose down) - Only project images (iconsulting-*, *-service) - Only project volumes (postgres_data, redis_data, etc.) - Only project networks (iconsulting-network) Does NOT affect other projects on the same Docker host. Co-Authored-By: Claude Opus 4.5 --- deploy.sh | 93 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/deploy.sh b/deploy.sh index 8f78e64..b16b2cd 100755 --- a/deploy.sh +++ b/deploy.sh @@ -960,20 +960,24 @@ do_deploy_full() { } #=============================================================================== -# 核弹级清理 (彻底删除所有Docker资源) +# 核弹级清理 (只删除本项目的Docker资源) #=============================================================================== do_nuke() { + # 获取项目名称 (docker-compose 使用目录名作为前缀) + local project_name=$(basename "$PROJECT_ROOT" | tr '[:upper:]' '[:lower:]' | sed 's/[^a-z0-9]//g') + echo -e "${RED}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}" - echo -e "${RED}║ ☢️ 核弹级清理 ☢️ ║${NC}" + echo -e "${RED}║ ☢️ iConsulting 核弹级清理 ☢️ ║${NC}" echo -e "${RED}║ ║${NC}" - echo -e "${RED}║ 这将彻底删除: ║${NC}" - echo -e "${RED}║ - 所有 Docker 容器 (包括运行中的) ║${NC}" - echo -e "${RED}║ - 所有 Docker 镜像 (包括基础镜像) ║${NC}" - echo -e "${RED}║ - 所有 Docker 数据卷 (PostgreSQL, Redis, Neo4j 数据) ║${NC}" - echo -e "${RED}║ - 所有 Docker 网络 ║${NC}" - echo -e "${RED}║ - 所有构建缓存 ║${NC}" + echo -e "${RED}║ 这将彻底删除本项目 (${project_name}) 的所有资源: ║${NC}" + echo -e "${RED}║ - 项目容器 (postgres, redis, neo4j, 各微服务等) ║${NC}" + echo -e "${RED}║ - 项目镜像 (iconsulting-*, *-service 等) ║${NC}" + echo -e "${RED}║ - 项目数据卷 (postgres_data, redis_data, neo4j_data 等) ║${NC}" + echo -e "${RED}║ - 项目网络 (iconsulting-network) ║${NC}" + echo -e "${RED}║ - 构建缓存 (iconsulting-builder, pnpm-store) ║${NC}" echo -e "${RED}║ ║${NC}" - echo -e "${RED}║ 此操作不可撤销!所有数据将永久丢失! ║${NC}" + echo -e "${RED}║ ⚠️ 不会影响其他项目的 Docker 资源 ║${NC}" + echo -e "${RED}║ 此操作不可撤销!项目数据将永久丢失! ║${NC}" echo -e "${RED}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}" echo "" read -p "确认要执行核弹级清理吗?请输入 NUKE 确认: " confirm @@ -983,45 +987,50 @@ do_nuke() { exit 0 fi - log_warning "开始核弹级清理..." + log_warning "开始清理 iConsulting 项目资源..." - # 1. 停止并删除所有项目容器和数据卷 - log_step "停止并删除项目容器..." - $DOCKER_COMPOSE down -v --rmi all 2>/dev/null || true + # 1. 使用 docker-compose 停止并删除项目容器、网络、数据卷、镜像 + log_step "停止并删除项目容器、网络、数据卷..." + $DOCKER_COMPOSE down -v --rmi all --remove-orphans 2>/dev/null || true - # 2. 停止所有运行中的容器 - log_step "停止所有运行中的容器..." - docker stop $(docker ps -aq) 2>/dev/null || true + # 2. 删除项目相关镜像 (可能有残留) + log_step "清理项目镜像..." + # 删除 iconsulting 相关镜像 + docker images --format "{{.Repository}}:{{.Tag}}" | grep -E "^${project_name}|iconsulting|iconsulting-" | while read img; do + docker rmi -f "$img" 2>/dev/null || true + done + # 删除 *-service 镜像 + docker images --format "{{.Repository}}:{{.Tag}}" | grep -E "user-service|payment-service|knowledge-service|conversation-service|evolution-service|file-service" | while read img; do + docker rmi -f "$img" 2>/dev/null || true + done + # 删除 builder 镜像 + docker rmi -f iconsulting-builder:latest 2>/dev/null || true - # 3. 删除所有容器 - log_step "删除所有容器..." - docker rm -f $(docker ps -aq) 2>/dev/null || true + # 3. 删除项目数据卷 (可能有残留) + log_step "清理项目数据卷..." + docker volume ls -q | grep -E "^${project_name}_|postgres_data|redis_data|neo4j_data|neo4j_logs|minio_data|pnpm-store" | while read vol; do + docker volume rm -f "$vol" 2>/dev/null || true + done - # 4. 删除所有镜像 - log_step "删除所有镜像..." - docker rmi -f $(docker images -aq) 2>/dev/null || true + # 4. 删除项目网络 (可能有残留) + log_step "清理项目网络..." + docker network ls -q --filter name="${project_name}" | while read net; do + docker network rm "$net" 2>/dev/null || true + done + docker network rm iconsulting-network 2>/dev/null || true - # 5. 删除所有数据卷 - log_step "删除所有数据卷..." - docker volume rm -f $(docker volume ls -q) 2>/dev/null || true - - # 6. 删除所有网络 (保留默认网络) - log_step "删除自定义网络..." - docker network rm $(docker network ls -q --filter type=custom) 2>/dev/null || true - - # 7. 清理构建缓存 - log_step "清理构建缓存..." - docker builder prune -af 2>/dev/null || true - - # 8. 系统级清理 - log_step "执行系统级清理..." - docker system prune -af --volumes 2>/dev/null || true - - # 9. 清理本地构建产物 + # 5. 清理本地构建产物 log_step "清理本地构建产物..." do_clean build 2>/dev/null || true - log_success "核弹级清理完成!Docker 环境已完全重置。" + # 6. 显示清理结果 + echo "" + log_success "iConsulting 项目资源清理完成!" + echo "" + echo -e "${CYAN}清理后状态:${NC}" + echo " 项目容器: $(docker ps -a --filter name=${project_name} -q | wc -l | tr -d ' ') 个" + echo " 项目镜像: $(docker images --format '{{.Repository}}' | grep -E "${project_name}|iconsulting" | wc -l | tr -d ' ') 个" + echo " 项目数据卷: $(docker volume ls -q | grep -E "${project_name}_|postgres_data|redis_data" | wc -l | tr -d ' ') 个" echo "" echo -e "${CYAN}重新部署请执行:${NC}" echo " ./deploy.sh deploy" @@ -1524,8 +1533,8 @@ show_help() { full-reset ⚠️ 数据重置 (只删除数据库数据,不重新编译) - nuke ☢️ 核弹级清理 (彻底删除所有Docker资源: - 容器、镜像、数据卷、网络、构建缓存) + nuke ☢️ 核弹级清理 (只删除本项目的Docker资源: + 容器、镜像、数据卷、网络,不影响其他项目) ssl SSL 证书管理 (Let's Encrypt) action: install - 安装 certbot