Files
KnowledgeBase/docker/test-health-checks.sh
lizhuoran 3c206e9e06 feat: 新增 Docker 部署支持、Swoole/Octane 集成及相关优化
- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境)
- 集成 Laravel Octane (Swoole) 提升性能
- 新增健康检查、监控脚本及部署文档
- 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch)
- 优化文档转换、预览服务及队列任务
- 添加 CreateAdminUser 命令与路由健康检查接口
- 新增 Swoole 队列兼容性测试套件

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 15:51:19 +08:00

283 lines
6.9 KiB
Bash
Executable File

#!/bin/bash
# 健康检查功能测试脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 测试脚本语法
test_script_syntax() {
log_info "测试脚本语法..."
local scripts=(
"docker/check-services.sh"
"docker/monitor-services.sh"
"docker/start-with-monitoring.sh"
"docker/stop-monitoring.sh"
"docker/queue-health-check.sh"
)
local errors=0
for script in "${scripts[@]}"; do
if [ -f "$script" ]; then
if bash -n "$script"; then
log_success "$script 语法正确"
else
log_error "$script 语法错误"
((errors++))
fi
else
log_error "$script 文件不存在"
((errors++))
fi
done
if [ $errors -eq 0 ]; then
log_success "所有脚本语法检查通过"
return 0
else
log_error "发现 $errors 个语法错误"
return 1
fi
}
# 测试脚本权限
test_script_permissions() {
log_info "测试脚本执行权限..."
local scripts=(
"docker/check-services.sh"
"docker/monitor-services.sh"
"docker/start-with-monitoring.sh"
"docker/stop-monitoring.sh"
"docker/queue-health-check.sh"
)
local errors=0
for script in "${scripts[@]}"; do
if [ -f "$script" ]; then
if [ -x "$script" ]; then
log_success "$script 有执行权限"
else
log_error "$script 没有执行权限"
((errors++))
fi
else
log_error "$script 文件不存在"
((errors++))
fi
done
if [ $errors -eq 0 ]; then
log_success "所有脚本权限检查通过"
return 0
else
log_error "发现 $errors 个权限问题"
return 1
fi
}
# 测试Docker配置文件
test_docker_configs() {
log_info "测试Docker配置文件..."
local configs=(
"docker-compose.yml"
"Dockerfile"
"docker/php/php.ini"
"docker/supervisor/supervisord.conf"
"docker/redis/redis.conf"
"docker/mysql/my.cnf"
"docker/supervisor/supervisord.conf"
)
local errors=0
for config in "${configs[@]}"; do
if [ -f "$config" ]; then
log_success "$config 存在"
else
log_error "$config 不存在"
((errors++))
fi
done
# 测试docker-compose语法
if command -v docker-compose >/dev/null 2>&1; then
if docker-compose config >/dev/null 2>&1; then
log_success "docker-compose.yml 语法正确"
else
log_error "docker-compose.yml 语法错误"
((errors++))
fi
else
log_warning "docker-compose 未安装,跳过语法检查"
fi
if [ $errors -eq 0 ]; then
log_success "所有配置文件检查通过"
return 0
else
log_error "发现 $errors 个配置问题"
return 1
fi
}
# 测试健康检查端点配置
test_healthcheck_configs() {
log_info "测试健康检查配置..."
local errors=0
# 检查docker-compose中的健康检查配置
if grep -q "healthcheck:" docker-compose.yml; then
log_success "docker-compose.yml 包含健康检查配置"
else
log_error "docker-compose.yml 缺少健康检查配置"
((errors++))
fi
# 检查Laravel健康检查路由
if grep -q "/health" routes/web.php; then
log_success "Laravel 健康检查路由已配置"
else
log_error "Laravel 健康检查路由未配置"
((errors++))
fi
# 检查队列健康检查脚本
if [ -f "docker/queue-health-check.sh" ] && [ -x "docker/queue-health-check.sh" ]; then
log_success "队列健康检查脚本存在且可执行"
else
log_error "队列健康检查脚本问题"
((errors++))
fi
if [ $errors -eq 0 ]; then
log_success "健康检查配置检查通过"
return 0
else
log_error "发现 $errors 个健康检查配置问题"
return 1
fi
}
# 测试存储目录结构
test_storage_structure() {
log_info "测试存储目录结构..."
local required_dirs=(
"./storage"
"./storage/logs"
)
local errors=0
for dir in "${required_dirs[@]}"; do
if [ -d "$dir" ]; then
log_success "目录存在: $dir"
else
log_warning "目录不存在,将创建: $dir"
mkdir -p "$dir"
if [ -d "$dir" ]; then
log_success "成功创建目录: $dir"
else
log_error "无法创建目录: $dir"
((errors++))
fi
fi
done
if [ $errors -eq 0 ]; then
log_success "存储目录结构检查通过"
return 0
else
log_error "发现 $errors 个存储目录问题"
return 1
fi
}
# 主测试函数
main() {
echo "========================================"
echo "健康检查功能测试"
echo "时间: $(date)"
echo "========================================"
local total_tests=0
local failed_tests=0
# 执行所有测试
tests=(
"test_script_syntax:脚本语法测试"
"test_script_permissions:脚本权限测试"
"test_docker_configs:Docker配置测试"
"test_healthcheck_configs:健康检查配置测试"
"test_storage_structure:存储目录测试"
)
for test in "${tests[@]}"; do
IFS=':' read -ra TEST_PARTS <<< "$test"
local test_func="${TEST_PARTS[0]}"
local test_name="${TEST_PARTS[1]}"
((total_tests++))
echo ""
log_info "开始 $test_name..."
if $test_func; then
log_success "$test_name 通过"
else
log_error "$test_name 失败"
((failed_tests++))
fi
done
# 输出总结
echo ""
echo "========================================"
echo "测试完成"
echo "总测试数: $total_tests"
echo "失败: $failed_tests"
echo "成功: $((total_tests - failed_tests))"
echo "========================================"
if [ $failed_tests -gt 0 ]; then
log_error "发现 $failed_tests 个问题,请检查配置"
exit 1
else
log_success "所有测试通过,健康检查功能配置正确"
exit 0
fi
}
# 如果脚本被直接执行
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi