将Elastic Beanstalk环境variables暴露给使用Docker的Laravel的技术人员

我试图首次使用Elastic Beanstalk将我的应用程序部署到生产环境中,并创build了一个RDS实例以及我的Elastic Beanstalk应用程序。 由于我的应用程序使用PHP5-FPM,因此我必须在Dockerfile公开这些环境variables,如下所示:

 RUN echo 'env[RDS_HOSTNAME] = $RDS_HOSTNAME' >> /etc/php5/fpm/pool.d/www.conf RUN echo 'env[RDS_PORT] = $RDS_PORT' >> /etc/php5/fpm/pool.d/www.conf RUN echo 'env[RDS_DB_NAME] = $RDS_DB_NAME' >> /etc/php5/fpm/pool.d/www.conf RUN echo 'env[RDS_USERNAME] = $RDS_USERNAME' >> /etc/php5/fpm/pool.d/www.conf RUN echo 'env[RDS_PASSWORD] = $RDS_PASSWORD' >> /etc/php5/fpm/pool.d/www.conf 

这工作正常,我的PHP脚本可以访问我的RDS数据库。 不过,我也需要在部署时迁移数据库,所以我将这一行添加到我的Dockerfile

 # Run artisan migrations RUN php /var/www/artisan migrate --force 

这会失败,因为在命令行上PHP不存在RDS环境variables。 我已经通过做die(var_dump($_SERVER));确认了这一点die(var_dump($_SERVER));artisan脚本的顶部,正如我所预期的RDS环境variables不存在。

尝试获取环境variables到PHP CLI我试图在我的Dockerfile做到这Dockerfile

 RUN echo 'RDS_HOSTNAME=$RDS_HOSTNAME' >> /etc/environment RUN echo 'RDS_PORT=$RDS_PORT' >> /etc/environment RUN echo 'RDS_DB_NAME=$RDS_DB_NAME' >> /etc/environment RUN echo 'RDS_USERNAME=$RDS_USERNAME' >> /etc/environment RUN echo 'RDS_PASSWORD=$RDS_PASSWORD' >> /etc/environment RUN source /etc/environment 

但是,环境variables也不存在。

我怎样才能让PHP命令行解释器访问我的RDS环境variables?

我能想到的唯一的另一个select是在我的应用程序configuration中对我的RDS凭证进行硬编码,正如我确信你明白的是我不想做的事情。

您可以在beanstalk应用程序的configuration中设置环境variables。 转到您的应用程序,单击左侧菜单中的configuration,然后查找软件configuration部分,然后单击编辑图标,一个齿轮看东西。 在此页面上,您可以随时添加所需的所有环境variables并进行更改。 我相信你也可以在你的.elasticbeanstalk / config.yml中做到这一点,但是我通常只是通过web界面来做到这一点。

最有可能的mod_env不会将这些variables传递给你的应用程序。 在您的/var/apache2/sites-enabled/000-default.conf或其他负责您的应用程序的文件中,您需要指定应传递的所有环境参数,如下例所示:

 <VirtualHost *:80> DocumentRoot "${APP_DOCUMENT_ROOT}" <Directory "${APP_DOCUMENT_ROOT}"> AllowOverride AuthConfig FileInfo Indexes Limit Options=All,MultiViews Options FollowSymLinks MultiViews Require all granted </Directory> CustomLog ${APACHE_LOG_DIR}/access.log combined ErrorLog ${APACHE_LOG_DIR}/error.log #here the magic begins: PassEnv APP_RUN_MODE PassEnv RDS_HOSTNAME PassEnv RDS_PORT PassEnv RDS_DB_NAME PassEnv RDS_USERNAME PassEnv RDS_PASSWORD </VirtualHost> 

正如你所看到的 – 最重要的是PassEnv命令。

您可以创build一个名为000-default.conf的文件,并将其放到项目的docker文件夹中。 然后添加到Dockerfile

 ADD docker/000-default.conf /etc/apache2/sites-available/000-default.conf