有关在PHP脚本中使用docker机密的最佳做法是什么?
使用案例:我有一个Docker堆栈,它由(1)基于图像的 web 服务组成,该图像将php与apache服务器耦合,以及(2) db 基于最新mysql映像的服务。
在 web 服务的/ var / www / html中,我有一个config.php,它定义了许多表示数据库连接参数(用户名,密码等)的变量。此config.php文件包含在整个代码库中建立数据库连接的任何位置。我有对应于我想在config.php中定义的每个参数定义的docker机密 - 在config.php的定义中使用这些机密的最佳方法是什么?
默认情况下,每个泊坞窗密钥都会挂载到文件/run/secrets/<secret name>
。
我天真的解决方案只是使用fopen()和fgets(),如下所示:
function getSecret($secret){
$secret_file = fopen("/run/secrets/{$secret}");
$secret = fgets($secret_file);
fclose($secret_file);
return $secret;
}
的config.php:
return [
'database' => [
'host' => getSecret('db_host'),
'user' => getSecret('db_user'),
'password' => getSecret('db_password),
...
]
];
这看起来是一种明智的做法吗?
答案 0 :(得分:2)
我最终选择了file_get_contents("/run/secrets/...");
这是一个未记录的“功能”,默认情况下它会在文件末尾添加换行符(0x0a
),因此需要进行修剪。
最终结果是:
$dbpasswd = rtrim(file_get_contents("/run/secrets/mysql_password"));
优点是您无需处理打开和关闭文件 修剪的需要虽然令人烦恼。