encodia / laravel-health-env-vars
针对 Spatie's Laravel Health 的自定义检查 - 确保您需要的所有 .env 变量都已设置
Requires
- php: ^8.0
- illuminate/contracts: ^8.75|^9.0|^10.0|^11.0
- spatie/laravel-health: ^1.8
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- larastan/larastan: ^1.0.3|^2.9
- laravel/pint: ^1.4
- nunomaduro/collision: ^5.10|^6.0|^8.0
- orchestra/testbench: ^6.0|^7.0|^8.0|^9.0
- pestphp/pest: ^1.21|^2.34
- pestphp/pest-plugin-laravel: ^1.2|^2.3
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5|^10.5
README
Laravel Health 由 Spatie 提供,除了提供一些默认检查外,还允许您创建自己的检查。
此包检查您是否已在您的 .env
文件中设置了所有需要的变量。
从 v1.8.0 开始,您还可以确保一个变量已被设置为某个特定的值。
一些变量在所有环境中都需要;而其他变量只在特定的环境中需要。例如,您想要确保 BUGSNAG_API_KEY
已在您的生产环境中设置,但在本地开发时不需要此变量。
有人说过“在我的机器上它工作得很好”吗?
谁没有在意识到,比如在 production
环境中,由于一个或多个变量未设置而导致某些事情无法正常工作之前,浪费了几分钟?
要求
encodia/laravel-health-env-vars
需要 PHP 8.0+,Laravel 8.0+。
PHP 8.1+ 需要 Laravel 10。
PHP 8.2+ 需要 Laravel 11。
安装
您可以通过 composer 安装此包
composer require encodia/laravel-health-env-vars
用法
像其他检查一样注册此检查
// typically, in a service provider use Spatie\Health\Facades\Health; use Spatie\Health\Checks\Checks\UsedDiskSpaceCheck; use Encodia\Health\Checks\EnvVars; Health::checks([ // From Spatie's examples UsedDiskSpaceCheck::new() ->warnWhenUsedSpaceIsAbovePercentage(70) ->failWhenUsedSpaceIsAbovePercentage(90), // Many other checks... /* * Check that SOME_API_KEY and MAIL_FROM_ADDRESS variables are * set (no matter in which environment) */ EnvVars::new() ->requireVars([ 'SOME_API_KEY', 'MAIL_FROM_ADDRESS', ]) ]);
需要检查特定环境中是否设置了变量吗?
没问题
use Spatie\Health\Facades\Health; use Encodia\Health\Checks\EnvVars; Health::checks([ // ... // (other checks) // ... /* * Check that SOME_API_KEY and MAIL_FROM_ADDRESS variables are * set (no matter in which environment). * * Only in staging, ensure EXTENDED_DEBUG_MODE has been set. * * Additionally, only in production, * ensure BUGSNAG_API_KEY has been set. */ EnvVars::new() ->requireVars([ 'SOME_API_KEY', 'MAIL_FROM_ADDRESS', ]) ->requireVarsForEnvironment('staging', [ 'EXTENDED_DEBUG_MODE' ]) ->requireVarsForEnvironment('production', [ 'BUGSNAG_API_KEY' ]); ]);
您很可能需要在多个环境中使用一些变量,但不是在所有环境中。
例如,您只需要在这些环境中设置 BUGSNAG_API_KEY
qa
production
但不包括 local
、staging
、demo
或任何其他。
您可以使用多个 requireVarsForEnvironment
调用来连接,但在此情况下,使用 requireVarsForEnvironments
更好。
use Spatie\Health\Facades\Health; use Encodia\Health\Checks\EnvVars; Health::checks([ // ... // (other checks) // ... /* * Check that SOME_API_KEY and MAIL_FROM_ADDRESS variables are * set (no matter in which environment). * * Only in staging, ensure EXTENDED_DEBUG_MODE has been set. * * Additionally, only in qa and production environments, * ensure BUGSNAG_API_KEY has been set. */ EnvVars::new() ->requireVars([ 'SOME_API_KEY', 'MAIL_FROM_ADDRESS', ]) ->requireVarsForEnvironment('staging', [ 'EXTENDED_DEBUG_MODE' ]) ->requireVarsForEnvironments(['qa', 'production'], [ 'BUGSNAG_API_KEY' ]); ]);
需要检查变量是否设置为特定值吗?
从 v1.8.0 开始,您可以使用 requireVarsMatchValues
来执行此检查,无论当前环境如何。
如果您仅在当前环境匹配给定的环境之一时运行此检查,您可以使用 requireVarsForEnvironment
或 requireVarsForEnvironments
。
示例
use Encodia\Health\Checks\EnvVars; use Spatie\Health\Facades\Health; Health::checks([ EnvVars::new() // ... other methods ... ->requireVarsMatchValues([ // Ensure that APP_LOCALE is set to 'en' (no matter which is the current environment) 'APP_LOCALE' => 'en', // Ensure that APP_TIMEZONE is set to 'UTC' (no matter which is the current environment) 'APP_TIMEZONE' => 'UTC', ]) ->requireVarsMatchValuesForEnvironment('staging', [ // Only if current environment is 'staging', we don't want to send e-mails to real customers 'MAIL_MAILER' => 'log', ]) ->requireVarsMatchValuesForEnvironments(['qa', 'production'], [ // Only if current environment is 'qa' or 'production, we want to log 'info' events or above 'LOG_LEVEL' => 'info', // Only if current environment is 'qa' or 'production, we want to store assets to S3 'FILESYSTEM_DISK' => 's3', ]); ]);
⚠️ 当检查值时,请勿存储个人数据、密钥、令牌等!
注意事项
在您的部署过程中,务必在缓存配置之前运行 EnvVars 检查 !
为什么?在运行 php artisan config:cache
之后,任何 env('WHATEVER_NAME')
将返回 null
,因此您的 EnvVars 检查将失败。
请检查
测试
composer test
变更日志
有关最近更改的更多信息,请参阅 CHANGELOG。
贡献
有关详细信息,请参阅 CONTRIBUTING。
安全漏洞
请查看我们如何报告安全漏洞的 安全策略。
鸣谢
许可证
MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件。