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 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-24 20:27:04 -08:00
parent 47d5434c98
commit da9826b08e
1 changed files with 51 additions and 42 deletions

View File

@ -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 <action> SSL 证书管理 (Let's Encrypt)
action: install - 安装 certbot