我正在运行一些docker容器上的aws ecs,所有运行在php Yii应用程序。
应用程序需要连接到AWS RDS数据库。目前,数据库名称、主机、用户名和密码硬编码在文件“main-local.php”中
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=dbinstancename.xxxxx.region.rds.amazonaws.com;dbname=xxxxxxx',
'username' => 'xxxxxxxx',
'password' => 'xxxxxxxx',
'charset' => 'utf8',
],
我知道在Docker容器中硬编码数据库细节不是最佳做法。我可以在运行时将环境变量传递到Docker中,例如“DB_HOST”、“DB_NAME”、“DB_USER”、“DB_PASSWORD”具有相应的值。我可以在Docker容器中键入命令“env”看到相同的细节。
如何在main-local.php中使用它?我们可以直接用env变量替换代码中的db细节吗?这是开发人员端要做的事情吗?
1条答案
按热度按时间ztigrdn81#
要添加env支持,您可以使用此扩展名https://github.com/vlucas/phpdotenv
只需安装即可
创建
.env
文件。该文件应该在.gitignore
中,并且不能从Web访问。如果您使用基本或高级模板,请将其与yii.bat
一起放入项目根目录中。您也可以使用空变量创建.env.example
。然后将其添加到index.php中,如下所示
我建议只使用EnvConstAdapter。导致
$_SERVER
变量被记录,并且getenv()
有时在并发请求中具有空值。对
bool
,null
和空字符串进行了小改进在$factory
示例化之前添加此内容,并使用env()
而不是$_ENV