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 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-24 08:16:07 -08:00
parent 7d9b87ef3c
commit a54b82cab3
1 changed files with 24 additions and 56 deletions

View File

@ -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 <action> 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 # 执行数据库迁移