From 47d5434c9898ac1f5b9cdb98f69cedbcc17e9d24 Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 24 Jan 2026 20:25:40 -0800 Subject: [PATCH] feat(deploy): add nuke command for complete Docker cleanup Add nuclear option to completely remove: - All Docker containers - All Docker images - All Docker volumes (database data) - All Docker networks - All build cache Co-Authored-By: Claude Opus 4.5 --- deploy.sh | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/deploy.sh b/deploy.sh index 05df492..8f78e64 100755 --- a/deploy.sh +++ b/deploy.sh @@ -959,6 +959,75 @@ do_deploy_full() { echo "" } +#=============================================================================== +# 核弹级清理 (彻底删除所有Docker资源) +#=============================================================================== +do_nuke() { + echo -e "${RED}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}" + echo -e "${RED}║ ☢️ 核弹级清理 ☢️ ║${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}║ ║${NC}" + echo -e "${RED}║ 此操作不可撤销!所有数据将永久丢失! ║${NC}" + echo -e "${RED}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}" + echo "" + read -p "确认要执行核弹级清理吗?请输入 NUKE 确认: " confirm + + if [ "$confirm" != "NUKE" ]; then + log_info "操作已取消" + exit 0 + fi + + log_warning "开始核弹级清理..." + + # 1. 停止并删除所有项目容器和数据卷 + log_step "停止并删除项目容器..." + $DOCKER_COMPOSE down -v --rmi all 2>/dev/null || true + + # 2. 停止所有运行中的容器 + log_step "停止所有运行中的容器..." + docker stop $(docker ps -aq) 2>/dev/null || true + + # 3. 删除所有容器 + log_step "删除所有容器..." + docker rm -f $(docker ps -aq) 2>/dev/null || true + + # 4. 删除所有镜像 + log_step "删除所有镜像..." + docker rmi -f $(docker images -aq) 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. 清理本地构建产物 + log_step "清理本地构建产物..." + do_clean build 2>/dev/null || true + + log_success "核弹级清理完成!Docker 环境已完全重置。" + echo "" + echo -e "${CYAN}重新部署请执行:${NC}" + echo " ./deploy.sh deploy" + echo "" +} + #=============================================================================== # 数据重置 (只删除数据,不重新编译) #=============================================================================== @@ -1455,6 +1524,9 @@ show_help() { full-reset ⚠️ 数据重置 (只删除数据库数据,不重新编译) + nuke ☢️ 核弹级清理 (彻底删除所有Docker资源: + 容器、镜像、数据卷、网络、构建缓存) + ssl SSL 证书管理 (Let's Encrypt) action: install - 安装 certbot obtain - 申请证书 @@ -1485,6 +1557,7 @@ show_help() { ./deploy.sh logs conversation 200 # 查看对话服务最近200行日志 ./deploy.sh clean all # 清理所有构建产物和依赖 ./deploy.sh full-reset # ⚠️ 重置所有数据库数据 + ./deploy.sh nuke # ☢️ 彻底删除所有Docker资源 ./deploy.sh rebuild conversation # 重新构建对话服务镜像 (使用缓存) ./deploy.sh rebuild conversation --no-cache # 完全重新构建 (忽略缓存) ./deploy.sh db init # 初始化数据库 (首次部署) @@ -1550,6 +1623,9 @@ main() { full-reset) do_full_reset ;; + nuke) + do_nuke + ;; ssl) do_ssl "$@" ;;