- 添加 Dockerfile 与多套 docker-compose 配置(开发/生产环境) - 集成 Laravel Octane (Swoole) 提升性能 - 新增健康检查、监控脚本及部署文档 - 新增 Docker 镜像离线导入包(MySQL/Redis/Meilisearch) - 优化文档转换、预览服务及队列任务 - 添加 CreateAdminUser 命令与路由健康检查接口 - 新增 Swoole 队列兼容性测试套件 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6.8 KiB
健康检查和自动重启机制实现总结
概述
本文档总结了Laravel知识库系统Docker部署中健康检查和自动重启机制的完整实现。
实现的功能
1. Web应用HTTP健康检查 ✅
实现位置: routes/web.php
端点: GET /health
检查项目:
- 数据库连接状态
- Redis缓存连接状态
- Meilisearch搜索引擎连接状态
- 存储目录可写性
Docker配置:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
响应格式:
{
"status": "ok|degraded",
"timestamp": "2024-12-24T10:30:00.000000Z",
"services": {
"database": "connected|disconnected",
"redis": "connected|disconnected|not_configured",
"meilisearch": "connected|disconnected|not_configured",
"storage": "writable|not_writable"
},
"version": "1.0.0"
}
2. 数据库连接健康检查 ✅
实现方式: MySQL内置的 mysqladmin ping 命令
Docker配置:
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_PASSWORD}"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
3. Redis连接健康检查 ✅
实现方式: Redis内置的 redis-cli ping 命令
Docker配置:
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 10s
4. Meilisearch API健康检查 ✅
实现方式: 调用Meilisearch的 /health API端点
Docker配置:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:7700/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
5. 队列处理器健康检查 ✅
实现位置: docker/queue-health-check.sh
检查内容:
- 队列进程是否运行 (
pgrep -f "queue:work") - Laravel应用数据库连接
- Laravel应用Redis连接
Docker配置:
healthcheck:
test: ["CMD", "/usr/local/bin/queue-health-check.sh"]
interval: 60s
timeout: 30s
retries: 3
start_period: 30s
6. 容器自动重启策略 ✅
配置: 所有服务都使用 restart: unless-stopped 策略
行为:
- 容器异常退出时自动重启
- 手动停止的容器不会自动重启
- 系统重启后自动启动容器(除非手动停止)
应用的服务:
- MySQL数据库
- Redis缓存
- Meilisearch搜索引擎
- Laravel应用容器
- 队列处理容器
支持脚本
1. 服务状态检查脚本 ✅
文件: docker/check-services.sh
功能:
- 检查Docker服务状态
- 检查所有容器的健康状态
- 测试服务连接
- 验证数据持久化配置
- 生成详细的健康报告
2. 持续监控脚本 ✅
文件: docker/monitor-services.sh
功能:
- 持续监控所有服务健康状态
- 自动重启不健康的容器
- 限制重启次数防止无限重启
- 记录详细监控日志
- 支持告警通知扩展
配置参数:
MONITOR_INTERVAL: 监控间隔(默认60秒)MAX_RESTART_ATTEMPTS: 最大重启尝试次数(默认3次)RESTART_COOLDOWN: 重启冷却时间(默认300秒)LOG_FILE: 日志文件路径
3. 启动和监控脚本 ✅
文件: docker/start-with-monitoring.sh
功能:
- 完整的服务启动流程
- 环境检查和目录创建
- 服务就绪等待
- 自动启动监控进程
- 支持多种启动选项
选项:
--no-monitor: 不启动监控进程--skip-build: 跳过镜像构建--skip-wait: 跳过服务就绪等待
4. 停止监控脚本 ✅
文件: docker/stop-monitoring.sh
功能:
- 停止监控进程
- 可选择性停止Docker服务
- 清理监控日志文件
- 支持多种停止选项
选项:
--stop-services: 同时停止Docker服务--cleanup-logs: 清理监控日志文件--all: 停止监控、服务并清理日志
5. 健康检查测试脚本 ✅
文件: docker/test-health-checks.sh
功能:
- 验证所有脚本语法正确性
- 检查脚本执行权限
- 验证Docker配置文件
- 测试健康检查配置
- 检查存储目录结构
配置文件
1. Swoole配置 ✅
文件: docker/supervisor/supervisord.conf
健康检查相关:
- Swoole HTTP服务器健康检查端点
- 自动重启配置
- 日志管理
2. PHP配置 ✅
文件: docker/php/php.ini
健康检查相关:
- 适当的超时设置
- 内存限制配置
3. Redis配置 ✅
文件: docker/redis/redis.conf
健康检查相关:
- 网络绑定配置
- 内存和持久化设置
- 性能优化配置
4. MySQL配置 ✅
文件: docker/mysql/my.cnf
健康检查相关:
- 字符集和时区配置
- 性能优化设置
- 日志配置
5. Supervisor配置 ✅
文件: docker/supervisor/supervisord.conf
健康检查相关:
- Swoole和队列进程管理
- 自动重启配置
- 日志管理
使用方法
启动服务和监控
# 完整启动(包含监控)
./docker/start-with-monitoring.sh
# 启动服务但不启动监控
./docker/start-with-monitoring.sh --no-monitor
# 跳过镜像构建
./docker/start-with-monitoring.sh --skip-build
检查服务状态
# 运行完整的健康检查
./docker/check-services.sh
# 查看容器状态
docker-compose ps
# 查看容器健康状态
docker inspect --format='{{.State.Health.Status}}' knowledge_base_app
监控管理
# 查看监控日志
tail -f ./storage/logs/monitor.log
# 停止监控进程
./docker/stop-monitoring.sh
# 停止监控和服务
./docker/stop-monitoring.sh --stop-services
测试健康检查功能
# 运行健康检查功能测试
./docker/test-health-checks.sh
验证结果
通过运行 ./docker/test-health-checks.sh,所有测试项目都通过:
- ✅ 脚本语法测试
- ✅ 脚本权限测试
- ✅ Docker配置测试
- ✅ 健康检查配置测试
- ✅ 存储目录测试
监控指标
健康检查状态
healthy: 服务正常运行unhealthy: 服务健康检查失败starting: 服务正在启动no-healthcheck: 服务未配置健康检查
重启计数器
监控系统维护每个容器的重启计数器:
- 位置:
./storage/logs/restart_counters/ - 格式:
{container_name}.count - 重置: 容器健康时自动重置
总结
健康检查和自动重启机制已完全实现,包括:
- Web应用HTTP健康检查 - 完整的Laravel健康检查端点
- 数据库连接健康检查 - MySQL ping检查
- Redis连接健康检查 - Redis ping检查
- Meilisearch API健康检查 - 搜索引擎健康API
- 容器自动重启策略 - unless-stopped策略
- 完整的监控和管理脚本 - 自动化运维工具
所有功能都经过测试验证,可以确保系统的高可用性和自动故障恢复能力。