encodia/laravel-health-env-vars

针对 Spatie's Laravel Health 的自定义检查 - 确保您需要的所有 .env 变量都已设置

1.8.1 2024-06-10 13:49 UTC

This package is auto-updated.

Last update: 2024-09-08 05:53:25 UTC


README

Latest Version on Packagist GitHub Tests Action Status PHPStan GitHub Code Style Action Status Total Downloads

Laravel HealthSpatie 提供,除了提供一些默认检查外,还允许您创建自己的检查。

此包检查您是否已在您的 .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

但不包括 localstagingdemo 或任何其他。

您可以使用多个 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 来执行此检查,无论当前环境如何。

如果您仅在当前环境匹配给定的环境之一时运行此检查,您可以使用 requireVarsForEnvironmentrequireVarsForEnvironments

示例

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)。有关更多信息,请参阅 许可证文件