欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP框架下配置文件读取k8s环境变量,实现node的custom-environment-variables效果

程序员文章站 2022-07-05 18:32:30
...

如果用过node的话,会发现它的环境配置管理在docker容器集群中使用起来比较方便。

以koa为例,在config下定义好custom-environment-variables.json相关环境变量,比如:

{
  "mysql_host": "MYSQL_HOST",
  "mysql_user": "MYSQL_USER",
  "mysql_password": "MYSQL_PASSWORD",
  "mysql_db": "MYSQL_DB",
  "redis": "REDIS"
}

之后在k8s中配置好对应的环境变量,node就会读取配置的环境变量来运行了,如图:
PHP框架下配置文件读取k8s环境变量,实现node的custom-environment-variables效果

个人比较喜欢这种方式,相比于我们在框架中定义多种环境配置文件而言,此方式更简洁优雅。

既然node都能做到,PHP也肯定可以的啦。

$_ENV配置

要实现这个效果,简单的方法就是使用$_ENV来读取环境变量。

PHP目前主流的运行方式有两种:swoole和php-fpm。 对于swoole而言,大部分的swoole框架是支持读取$_ENV的,
直接按框架方法读取即可,无需额外修改。这里介绍下php-fpm模式下的$_ENV配置。

1.修改php.ini配置

在php.ini的配置文件中找到variables_order这行配置,将GPCS改为EGPCS

2.修改php-fpm配置

在php-fpm的找到clear_env配置,将yes改为no,如果没有,则在[www]配置域下增加这行配置clear_env = no

框架配置

以laravel的数据库配置为例,将database.conf中对应的配置改为如下:

'mysql' => [
    'driver' => 'mysql',
    'url' => env('DATABASE_URL'),
    'host' => $_ENV['DB_HOST']?$_ENV['DB_HOST']:env('DB_HOST', '127.0.0.1'),
    'port' => $_ENV['DB_PORT']?$_ENV['DB_PORT']:env('DB_PORT', '3306'),
    'database' => $_ENV['DB_DATABASE']?$_ENV['DB_DATABASE']:env('DB_DATABASE', 'forge'),
    'username' => $_ENV['DB_USERNAME']?$_ENV['DB_USERNAME']:env('DB_USERNAME', 'forge'),
    'password' => $_ENV['DB_PASSWORD']?$_ENV['DB_PASSWORD']:env('DB_PASSWORD', ''),
    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
    ]) : [],
]

也就是将配置读取的顺序改为:先读取系统环境变量的配置,如果没有则读框架env的配置。

k8s集群配置

在k8s集群对应的应用中添加对应的环境变量,即可实现这个效果了。
PHP框架下配置文件读取k8s环境变量,实现node的custom-environment-variables效果