【问题标题】:Setting PHP $_ENV variables in Elastic Beanstalk docker container在 Elastic Beanstalk docker 容器中设置 PHP $_ENV 变量
【发布时间】:2016-05-20 21:16:26
【问题描述】:

我有一个使用 supervisord 运行 nginx 和 php-fpm 的 Docker 容器。 我正在尝试使用 .ebextensions/*.config 来设置环境变量。

虽然变量是在容器中设置的(例如# echo $VAR 打印预期值),但我找不到一种简单的方法让它们可用于 PHP。恕我直言,我只能编写一个 bash 脚本来读取变量并将其复制到 www.conf 或作为 fcgi_param 复制到 nginx 主机配置。但是这个脚本需要知道要复制哪些变量... .

我想知道是否有人找到了更简单的方法。

【问题讨论】:

    标签: php amazon-web-services amazon-elastic-beanstalk


    【解决方案1】:

    我编写了 bash 脚本,它将以前缀列表开头的环境变量复制到 fpm 的 www.conf 文件中,并将其烘焙到我的图像的 start.sh 脚本中。

    这仍然不会将变量放入 $_ENV :( 但会将它们添加到 $_SERVER 并可通过getenv() 获得。

    脚本在这里:adrian7/php-transfer-vars.sh

    【讨论】:

    • 如果变量的值是通过 UI 或 API 更新的怎么办?不好的做法。
    • 仅供参考,脚本在启动时在容器内运行。我们已经使用了一年多,还没有遇到任何问题。
    【解决方案2】:

    有两种方法可以保证可靠性。对于所有 web 端的东西,在 .htaccess 文件中设置环境变量。您可以为您的数据库连接信息执行此操作,例如:

    # environment variables
    SetEnv DBL "mysql:dbname=mydatabase;host=localhost;port=3306"
    SetEnv DB_USER "root"
    SetEnv DB_PASS "fruitygoodness"
    

    将 .htaccess 文件放在容器的 Web 根目录中。当您需要环境变量时,您可以使用 PHP 的 getenv() 检索它们。

    define('DBL', getenv('DBL'));
    define('USER', getenv('DB_USER'));
    define('PASS', getenv('DB_PASS'));
    

    对于容器内的 PHP-CLI,您可以在 Docker run 命令中指定环境变量,方法是在每个变量之前指定选项 -e。这是一个例子:

    sudo docker run --name mysite -e "DBL=mysql:dbname=mydatabase;host=localhost;port=3306" -e "DB_USER=root" -e "DB_PASS=fruitgoodness" -p 80:80 -p 443:443 -P -d  repo/mysite
    

    这样做会使环境变量对容器可用但对容器中运行的 Web 服务器不可用

    【讨论】:

      猜你喜欢
      • 2017-12-26
      • 2015-04-26
      • 2017-07-26
      • 2015-08-05
      • 2016-01-09
      • 2017-07-04
      • 1970-01-01
      • 2017-06-29
      • 2018-06-20
      相关资源
      最近更新 更多