将环境variables暴露给Apache和PHP

背景

我正在尝试使用Wercker来运行我的PHP应用程序的testing。 Wercker使用Docker容器来设置testing环境来执行testing。它使用环境variables来公开任何连接服务(如MySQL和Elasticsearch)的连接参数。 示例MYSQL_PORT_3306_TCP_ADDR = 127.0.1.1

我的核心Docker容器运行Ubuntu 14.04,PHP和Apache已经安装在容器上。

问题

我似乎无法通过php $ _SERVER或$ _ENV通过Apache运行时访问环境variables。 如果我通过CLI php ./db_connect.php运行脚本,或者如果我使用其在服务器php -S localhost:8000版本运行PHP,它工作正常。 但是,如果我尝试通过Apache虚拟主机访问一个页面,则环境variables不可用。

进展

我已经安装了Apache,用于允许环境variables的mod“我认为”

 sudo a2enmod env sudo service apache2 restart 

我试图访问我的脚本中的环境variables。

 $database_host = $_SERVER["MYSQL_PORT_3306_TCP_ADDR"]; $database_username = $_SERVER["MYSQL_ENV_MYSQL_USER"]; $database_password = $_SERVER["MYSQL_ENV_MYSQL_PASSWORD"]; $database_name = $_SERVER["MYSQL_ENV_MYSQL_DATABASE"]; $elasticsearch_host = $_SERVER["ELASTICSEARCH_PORT_9300_TCP_ADDR"]; 

我可以在我的.htaccess中添加新的variables,我只是没有得到所有的系统环境variables。

 SetEnv TEST_VAR test 

我已经读过这个问题如何在运行CLI和Apache2Handler时将系统环境variables导入到PHP中? 但我不确定它的build议。

如何将系统环境variables暴露给Apache和PHP?

使用docker-compose,你可以通过php的$_ENVvariables检索docker-compose.yml文件environment选项设置的操作系统的环境variables。

 version: 2 services: web: build: php:5.6-apache environment: MYSQL_USER: "user" MYSQL_PASSWORD: "passwd" 

应该给你

 $_ENV['MYSQL_USER'] = user $_ENV['MYSQL_PASSWORD'] = passwd 

我不确定Wercker如何将环境variables映射到容器,但是我认为这可能会有所帮助https://github.com/wercker/wercker/issues/63