From a54b82cab38723ef546a8fe78798e896b9a5268c Mon Sep 17 00:00:00 2001 From: hailin Date: Sat, 24 Jan 2026 08:16:07 -0800 Subject: [PATCH] fix(deploy): full-reset now only resets data, not rebuild - Remove image deletion and rebuild steps - Only delete database volumes and restart services - TypeORM synchronize:true handles schema creation - Much faster: no recompilation needed Co-Authored-By: Claude Opus 4.5 --- deploy.sh | 80 +++++++++++++++++-------------------------------------- 1 file changed, 24 insertions(+), 56 deletions(-) diff --git a/deploy.sh b/deploy.sh index 0f1c2ce..c474b91 100755 --- a/deploy.sh +++ b/deploy.sh @@ -907,96 +907,64 @@ do_deploy_full() { } #=============================================================================== -# 完整重置 (危险操作) +# 数据重置 (只删除数据,不重新编译) #=============================================================================== do_full_reset() { echo -e "${RED}╔═══════════════════════════════════════════════════════════════════════════════╗${NC}" echo -e "${RED}║ ⚠️ 警告 ⚠️ ║${NC}" echo -e "${RED}║ ║${NC}" - echo -e "${RED}║ 这将删除所有数据并重置系统,包括: ║${NC}" - echo -e "${RED}║ - PostgreSQL 数据库中的所有数据 ║${NC}" + echo -e "${RED}║ 这将删除所有数据库数据,包括: ║${NC}" + echo -e "${RED}║ - PostgreSQL 数据库中的所有表和数据 ║${NC}" echo -e "${RED}║ - Redis 缓存数据 ║${NC}" echo -e "${RED}║ - Neo4j 图数据库中的所有数据 ║${NC}" - echo -e "${RED}║ - 所有 Docker 镜像和容器 ║${NC}" - echo -e "${RED}║ - 所有构建产物 ║${NC}" echo -e "${RED}║ ║${NC}" - echo -e "${RED}║ SSL 证书将被保留(存储在 /etc/letsencrypt/) ║${NC}" + echo -e "${RED}║ 不会删除:Docker镜像、代码、构建产物 ║${NC}" echo -e "${RED}║ 此操作不可撤销! ║${NC}" echo -e "${RED}╚═══════════════════════════════════════════════════════════════════════════════╝${NC}" echo "" - read -p "确认要完全重置系统吗?请输入 YES 确认: " confirm + read -p "确认要重置所有数据吗?请输入 YES 确认: " confirm if [ "$confirm" != "YES" ]; then log_info "操作已取消" exit 0 fi - log_warning "开始完整重置..." + log_warning "开始数据重置..." - # 1. 停止所有服务 + # 1. 停止所有服务 (保留镜像,只删除数据卷) log_step "停止所有服务..." - $DOCKER_COMPOSE down -v --remove-orphans 2>/dev/null || true - log_success "服务已停止" + $DOCKER_COMPOSE down -v 2>/dev/null || true + log_success "服务已停止,数据卷已删除" - # 2. 清理 Docker 资源 - log_step "清理 Docker 资源..." - docker system prune -af --volumes 2>/dev/null || true - docker volume prune -f 2>/dev/null || true - log_success "Docker 资源已清理" - - # 3. 清理构建产物和依赖 - log_step "清理构建产物..." - rm -rf node_modules 2>/dev/null || true - for dir in "${SERVICE_DIRS[@]}"; do - rm -rf "$PROJECT_ROOT/$dir/dist" 2>/dev/null || true - rm -rf "$PROJECT_ROOT/$dir/node_modules" 2>/dev/null || true - done - log_success "构建产物已清理" - - # 4. 重新构建所有服务 - log_step "重新构建所有服务..." - do_build all - - # 5. 启动基础设施 + # 2. 启动基础设施 (数据库会自动初始化为空) log_step "启动基础设施..." do_start infra docker - # 6. 等待数据库就绪 + # 3. 等待数据库就绪 wait_for_service localhost 5432 "PostgreSQL" wait_for_service localhost 6379 "Redis" wait_for_service localhost 7474 "Neo4j" - # 7. 执行数据库迁移 - log_step "执行数据库迁移..." - sleep 5 # 等待数据库完全初始化 - do_db migrate + # 4. 初始化数据库 (创建数据库和用户) + log_step "初始化数据库..." + sleep 3 + init_database 2>/dev/null || true - # 7.1 备用:确保 V2 咨询流程数据库列存在(迁移可能因各种原因失败) - # 这些 ALTER 语句使用 IF NOT EXISTS,与 TypeORM 迁移保持一致 - log_step "验证 V2 数据库列..." - docker exec -i iconsulting-postgres psql -U postgres -d iconsulting -c " - ALTER TABLE conversations ADD COLUMN IF NOT EXISTS consulting_stage VARCHAR(30) DEFAULT 'greeting'; - ALTER TABLE conversations ADD COLUMN IF NOT EXISTS consulting_state JSONB; - ALTER TABLE conversations ADD COLUMN IF NOT EXISTS collected_info JSONB; - ALTER TABLE conversations ADD COLUMN IF NOT EXISTS recommended_programs TEXT[]; - ALTER TABLE conversations ADD COLUMN IF NOT EXISTS conversion_path VARCHAR(30); - ALTER TABLE conversations ADD COLUMN IF NOT EXISTS device_info JSONB; - CREATE INDEX IF NOT EXISTS idx_conversations_consulting_stage ON conversations (consulting_stage); - CREATE INDEX IF NOT EXISTS idx_conversations_conversion_path ON conversations (conversion_path); - " 2>/dev/null && log_success "V2 数据库列已验证" || log_warning "V2 数据库列验证跳过" - - # 8. 启动所有后端服务 + # 5. 启动所有后端服务 (TypeORM synchronize:true 会自动创建表) log_step "启动后端服务..." do_start backend docker - # 9. 配置 Kong (如果需要) + # 6. 等待服务就绪 + sleep 5 + + # 7. 配置 Kong (如果需要) if docker ps | grep -q kong; then log_step "配置 Kong API 网关..." - sleep 5 + sleep 3 do_kong setup 2>/dev/null || log_warning "Kong 配置跳过" fi - log_success "完整重置完成!" + log_success "数据重置完成!" echo "" do_status } @@ -1423,7 +1391,7 @@ show_help() { deploy-full 完整部署 (含 SSL 证书自动申请) - full-reset ⚠️ 完整重置 (删除所有数据,重建系统,保留SSL证书) + full-reset ⚠️ 数据重置 (只删除数据库数据,不重新编译) ssl SSL 证书管理 (Let's Encrypt) action: install - 安装 certbot @@ -1454,7 +1422,7 @@ show_help() { ./deploy.sh restart user docker # 重启用户服务 (Docker) ./deploy.sh logs conversation 200 # 查看对话服务最近200行日志 ./deploy.sh clean all # 清理所有构建产物和依赖 - ./deploy.sh full-reset # ⚠️ 完整重置系统 (危险操作) + ./deploy.sh full-reset # ⚠️ 重置所有数据库数据 ./deploy.sh db init # 初始化数据库 (首次部署) ./deploy.sh db backup # 备份数据库 ./deploy.sh db migrate # 执行数据库迁移