ueberdosis / laravel-docker-health-check
0.4.0
2024-06-20 14:22 UTC
Requires
- php: ^7.4|^8.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
README
这是一个简单的包,使您在生产环境中与 Laravel 和 Docker 一起工作时更加方便。
安装
使用 composer 安装它
composer require ueberdosis/laravel-docker-health-check
将中间件添加到您的 app/Http/Kernel.php
class Kernel extends HttpKernel { /** * The application's global HTTP middleware stack. * * These middleware are run during every request to your application. * * @var array */ protected $middleware = [ // ... \Ueberdosis\DockerHealthCheck\Middleware\ClearCacheOnInitialRequest::class, ]; // ... }
更新您的健康检查脚本以 cURL 新注册的路由 /docker-health-check
。以下是一个示例健康检查脚本,请更新您的实现
#!/usr/bin/env bash set -e if [ $(curl -o /dev/null -L -s -w "%{http_code}\n" http://localhost/docker-health-check) = "200" ]; then exit 0 else exit 1 fi
这个包解决了什么问题?
当在 production 环境中使用 Laravel 和 Docker 时,您通常会编写一个巨大的 entrypoint 脚本,该脚本运行迁移、清除缓存等。但在 entrypoint 脚本中清除缓存不太有效。为什么?
因为 orchestrator 在将实际流量定向到 Laravel 容器之前会等待该容器成为健康状态。所以当您更新您的堆栈时,旧容器将在您在 entrypoint 中调用 php artisan view:clear
的那一刻处理所有流量,直到新容器变得健康。当流量在那个时刻击中网站时,缓存将在旧容器中重新构建。
这对于大型 dockerized Laravel 应用程序来说非常痛苦。这个包将使用应用根目录中的临时文件在第一个请求到新容器时清除缓存。
并且它方便地为您注册了一个很好的 /docker-health-check
路由,该路由为您的健康检查脚本返回状态码为 200 的响应。
许可证
MIT