我正在使用领事进行服务发现。我有一个简单的基于PHP / MySQL的Web应用程序,在其中我将consul用作我的PHP应用程序到数据库的服务发现。
在12 factor app之后,建议将配置(在这种情况下,例如数据库主机和端口)保存到环境变量中。我无法将数据库服务地址和端口设置为环境变量。
但是,我可以使用consul template来填充一个配置文件,该文件可以包含在我的代码中并读取变量。
我的示例应用程序如下所示:
include_once('db.php');
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname;port=$port", $user, $pass);
foreach($dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
其中db.php
保存配置变量。领事模板文件db.ctmpl
如下所示:
<?php
{{range $index, $element := service "db"}}
{{if eq $index 0}}
$hostname = '{{.Address}}';
$port = {{.Port}};
{{end}}
{{else}}
$hostname = 'localhost';
$port = 3306;
{{end}}
$dbname = 'example';
$user = 'root';
$pass = 'root';
?>
在使用领事模板时会成功生成一个db.php,其中填充了地址和端口。
consul-template -consul=$CONSUL_URL -template="/templates/db.ctmpl:/var/www/html/db.php"
我想知道如何使用consul模板将其加载到数据库中,这样我就可以从代码中的环境变量中读取内容,而不必包含额外的文件了?