Files
KnowledgeBase/docker/HEALTH_CHECK_IMPLEMENTATION.md
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

6.8 KiB
Raw Permalink Blame History

健康检查和自动重启机制实现总结

概述

本文档总结了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
  • 重置: 容器健康时自动重置

总结

健康检查和自动重启机制已完全实现,包括:

  1. Web应用HTTP健康检查 - 完整的Laravel健康检查端点
  2. 数据库连接健康检查 - MySQL ping检查
  3. Redis连接健康检查 - Redis ping检查
  4. Meilisearch API健康检查 - 搜索引擎健康API
  5. 容器自动重启策略 - unless-stopped策略
  6. 完整的监控和管理脚本 - 自动化运维工具

所有功能都经过测试验证,可以确保系统的高可用性和自动故障恢复能力。