如何将领事服务地址和端口加载到环境变量中

时间:2019-01-21 06:34:21

标签: consul service-discovery consul-template

我正在使用领事进行服务发现。我有一个简单的基于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模板将其加载到数据库中,这样我就可以从代码中的环境变量中读取内容,而不必包含额外的文件了?

0 个答案:

没有答案