Files
wwjcloud/docker/docker-test-migration.sh
wanwu 2285206b3f feat: WWJCloud 企业级全栈框架 v0.3.5 完整更新
🚀 核心更新:
-  完善 NestJS 企业级架构设计
-  优化配置中心和基础设施层
-  增强第三方服务集成能力
-  完善多租户架构支持
- 🎯 对标 Java Spring Boot 和 PHP ThinkPHP

📦 新增文件:
- wwjcloud-nest 完整框架结构
- Docker 容器化配置
- 管理后台界面
- 数据库迁移脚本

🔑 Key: ebb38b43ec39f355f071294fd1cf9c42
2025-10-13 01:27:37 +08:00

362 lines
11 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ========================================
# Docker 迁移功能自动测试脚本
# ========================================
set -e # 遇到错误立即退出
echo "🚀 开始Docker迁移功能自动测试..."
echo "=================================================="
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 错误计数
ERROR_COUNT=0
# 记录错误函数
record_error() {
echo -e "${RED}❌ 错误: $1${NC}"
ERROR_COUNT=$((ERROR_COUNT + 1))
}
# 记录成功函数
record_success() {
echo -e "${GREEN}✅ 成功: $1${NC}"
}
# 记录警告函数
record_warning() {
echo -e "${YELLOW}⚠️ 警告: $1${NC}"
}
# 记录信息函数
record_info() {
echo -e "${BLUE} 信息: $1${NC}"
}
############################################################
# 使用脚本所在目录的 docker-compose.yml
############################################################
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
export COMPOSE_FILE="$SCRIPT_DIR/docker-compose.yml"
record_info "使用的 Compose 文件: $COMPOSE_FILE"
# 清理旧容器与孤儿,确保干净环境
record_info "清理旧容器与孤儿..."
docker-compose down -v --remove-orphans >/dev/null 2>&1 || true
record_success "环境清理完成"
echo "📋 测试阶段1: 环境准备"
echo "=================================================="
# 检查Docker是否运行
if ! docker info > /dev/null 2>&1; then
record_error "Docker未运行请启动Docker"
exit 1
fi
record_success "Docker运行正常"
# 检查Docker Compose是否可用
if ! docker-compose --version > /dev/null 2>&1; then
record_error "Docker Compose不可用"
exit 1
fi
record_success "Docker Compose可用"
# 停止并清理现有容器
record_info "清理现有容器..."
docker-compose down -v --remove-orphans > /dev/null 2>&1 || true
record_success "现有容器已清理"
echo ""
echo "📋 测试阶段2: 迁移工具测试"
echo "=================================================="
# 测试迁移工具
record_info "测试迁移工具..."
cd "$SCRIPT_DIR/../../tools"
# 测试PHP文件发现工具
if node -e "const PHPFileDiscovery = require('./php-file-discovery.js'); const discovery = new PHPFileDiscovery(); discovery.run(); console.log('PHP文件发现工具测试通过');" 2>/dev/null; then
record_success "PHP文件发现工具正常"
else
record_error "PHP文件发现工具失败"
fi
# 测试业务逻辑转换器
if node -e "const BusinessLogicConverter = require('./generators/business-logic-converter.js'); const converter = new BusinessLogicConverter(); console.log('业务逻辑转换器测试通过');" 2>/dev/null; then
record_success "业务逻辑转换器正常"
else
record_error "业务逻辑转换器失败"
fi
# 测试控制器生成器
if node -e "const ControllerGenerator = require('./generators/controller-generator.js'); const generator = new ControllerGenerator(); console.log('控制器生成器测试通过');" 2>/dev/null; then
record_success "控制器生成器正常"
else
record_error "控制器生成器失败"
fi
# 测试服务生成器
if node -e "const ServiceGenerator = require('./generators/service-generator.js'); const generator = new ServiceGenerator(); console.log('服务生成器测试通过');" 2>/dev/null; then
record_success "服务生成器正常"
else
record_error "服务生成器失败"
fi
# 测试实体生成器
if node -e "const EntityGenerator = require('./generators/entity-generator.js'); const generator = new EntityGenerator(); console.log('实体生成器测试通过');" 2>/dev/null; then
record_success "实体生成器正常"
else
record_error "实体生成器失败"
fi
# 测试迁移协调器
if node -e "const MigrationCoordinator = require('./migration-coordinator.js'); const coordinator = new MigrationCoordinator(); console.log('迁移协调器测试通过');" 2>/dev/null; then
record_success "迁移协调器正常"
else
record_error "迁移协调器失败"
fi
cd "$SCRIPT_DIR/../.."
echo ""
echo "📋 测试阶段3: 构建Docker镜像"
echo "=================================================="
# 构建NestJS后端镜像
record_info "构建NestJS后端镜像..."
if docker-compose build nestjs-backend; then
record_success "NestJS后端镜像构建成功"
else
record_error "NestJS后端镜像构建失败"
fi
# 构建Admin前端镜像
record_info "构建Admin前端镜像..."
if docker-compose build admin-frontend; then
record_success "Admin前端镜像构建成功"
else
record_error "Admin前端镜像构建失败"
fi
echo ""
echo "📋 测试阶段4: 启动服务"
echo "=================================================="
# 启动基础服务MySQL和Redis
record_info "启动MySQL和Redis服务..."
if docker-compose up -d mysql redis; then
record_success "MySQL和Redis服务启动成功"
else
record_error "MySQL和Redis服务启动失败"
fi
# 等待数据库就绪
record_info "等待数据库就绪..."
sleep 30
# 检查MySQL健康状态
if docker-compose exec -T mysql mysqladmin ping -h localhost -u root -proot123456 > /dev/null 2>&1; then
record_success "MySQL数据库连接正常"
else
record_error "MySQL数据库连接失败"
fi
# 检查Redis健康状态
if docker-compose exec -T redis redis-cli -a redis123456 ping > /dev/null 2>&1; then
record_success "Redis缓存连接正常"
else
record_error "Redis缓存连接失败"
fi
echo ""
echo "📋 测试阶段5: 启动NestJS后端"
echo "=================================================="
# 启动NestJS后端
record_info "启动NestJS后端服务..."
if docker-compose up -d nestjs-backend; then
record_success "NestJS后端服务启动成功"
else
record_error "NestJS后端服务启动失败"
fi
# 等待NestJS服务就绪
record_info "等待NestJS服务就绪..."
sleep 60
# 检查NestJS健康状态
if curl -f http://localhost:3000/health > /dev/null 2>&1; then
record_success "NestJS后端健康检查通过"
else
record_error "NestJS后端健康检查失败"
# 显示NestJS日志
record_info "NestJS服务日志:"
docker-compose logs nestjs-backend --tail=50
fi
echo ""
echo "📋 测试阶段6: 启动Admin前端"
echo "=================================================="
# 启动Admin前端
record_info "启动Admin前端服务..."
if docker-compose up -d admin-frontend; then
record_success "Admin前端服务启动成功"
else
record_error "Admin前端服务启动失败"
fi
# 等待Admin前端就绪
record_info "等待Admin前端就绪..."
sleep 30
# 检查Admin前端健康状态
if curl -f http://localhost/ > /dev/null 2>&1; then
record_success "Admin前端健康检查通过"
else
record_error "Admin前端健康检查失败"
# 显示Admin前端日志
record_info "Admin前端服务日志:"
docker-compose logs admin-frontend --tail=50
fi
echo ""
echo "📋 测试阶段7: API接口测试"
echo "=================================================="
# 测试关键API接口
record_info "测试关键API接口..."
# 测试健康检查接口
if curl -f http://localhost:3000/health > /dev/null 2>&1; then
record_success "健康检查接口正常"
else
record_error "健康检查接口失败"
fi
# 测试API根路径
if curl -f http://localhost:3000/api > /dev/null 2>&1; then
record_success "API根路径正常"
else
record_warning "API根路径可能未配置"
fi
# 测试Admin API路径
if curl -f http://localhost:3000/adminapi > /dev/null 2>&1; then
record_success "Admin API路径正常"
else
record_warning "Admin API路径可能未配置"
fi
echo ""
echo "📋 测试阶段8: 数据库连接测试"
echo "=================================================="
# 测试数据库连接
record_info "测试数据库连接..."
if docker-compose exec -T nestjs-backend node -e "
const mysql = require('mysql2/promise');
async function test() {
try {
const connection = await mysql.createConnection({
host: 'mysql',
user: 'wwjcloud',
password: 'wwjcloud123',
database: 'wwjcloud'
});
await connection.execute('SELECT 1');
await connection.end();
console.log('数据库连接测试成功');
} catch (error) {
console.error('数据库连接测试失败:', error.message);
process.exit(1);
}
}
test();
" 2>/dev/null; then
record_success "数据库连接测试通过"
else
record_error "数据库连接测试失败"
fi
echo ""
echo "📋 测试阶段9: 服务状态检查"
echo "=================================================="
# 检查所有服务状态
record_info "检查所有服务状态..."
docker-compose ps
echo ""
echo "📋 测试阶段10: 日志检查"
echo "=================================================="
# 检查NestJS日志中的错误
record_info "检查NestJS服务日志..."
NESTJS_ERRORS=$(docker-compose logs nestjs-backend 2>&1 | grep -i "error\|exception\|failed" | wc -l)
if [ "$NESTJS_ERRORS" -eq 0 ]; then
record_success "NestJS服务无错误日志"
else
record_warning "NestJS服务发现 $NESTJS_ERRORS 个错误日志"
docker-compose logs nestjs-backend 2>&1 | grep -i "error\|exception\|failed" | head -10
fi
# 检查Admin前端日志中的错误
record_info "检查Admin前端日志..."
ADMIN_ERRORS=$(docker-compose logs admin-frontend 2>&1 | grep -i "error\|exception\|failed" | wc -l)
if [ "$ADMIN_ERRORS" -eq 0 ]; then
record_success "Admin前端无错误日志"
else
record_warning "Admin前端发现 $ADMIN_ERRORS 个错误日志"
docker-compose logs admin-frontend 2>&1 | grep -i "error\|exception\|failed" | head -10
fi
echo ""
echo "📊 测试结果汇总"
echo "=================================================="
if [ $ERROR_COUNT -eq 0 ]; then
echo -e "${GREEN}🎉 所有测试通过!迁移功能完全正常!${NC}"
echo -e "${GREEN}✅ 错误数量: 0${NC}"
echo -e "${GREEN}✅ 迁移工具: 正常${NC}"
echo -e "${GREEN}✅ Docker构建: 成功${NC}"
echo -e "${GREEN}✅ 服务启动: 成功${NC}"
echo -e "${GREEN}✅ API接口: 正常${NC}"
echo -e "${GREEN}✅ 数据库连接: 正常${NC}"
else
echo -e "${RED}❌ 测试发现问题!${NC}"
echo -e "${RED}❌ 错误数量: $ERROR_COUNT${NC}"
echo -e "${YELLOW}⚠️ 请检查上述错误信息并修复${NC}"
fi
echo ""
echo "📋 服务访问信息"
echo "=================================================="
echo -e "${BLUE}🌐 Admin前端: http://localhost${NC}"
echo -e "${BLUE}🔧 NestJS后端: http://localhost:3000${NC}"
echo -e "${BLUE}💾 MySQL数据库: localhost:3306${NC}"
echo -e "${BLUE}🗄️ Redis缓存: localhost:6379${NC}"
echo ""
echo "📋 清理命令"
echo "=================================================="
echo -e "${YELLOW}停止所有服务: docker-compose down${NC}"
echo -e "${YELLOW}停止并清理数据: docker-compose down -v${NC}"
echo -e "${YELLOW}查看服务日志: docker-compose logs [service-name]${NC}"
# 如果测试失败退出码为1
if [ $ERROR_COUNT -gt 0 ]; then
exit 1
fi
echo ""
echo -e "${GREEN}🎊 Docker迁移功能自动测试完成${NC}"