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:
parent
47d5434c98
commit
da9826b08e
93
deploy.sh
93
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 <action> SSL 证书管理 (Let's Encrypt)
|
||||
action: install - 安装 certbot
|
||||
|
|
|
|||
Loading…
Reference in New Issue