将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
- Dockerrun.aws.json文件的私人dockerhub图像
- 在AWS Elastic Beanstalk应用程序中运行Tomcat Docker时进行端口转发
- 如何设置运行Django的AWS Elastic Beanstalk Docker平台?
- Elastic Beanstalk和Docker启动错误
- Elastic Beanstalk多容器Docker环境:在两个API之间redirect请求
- Elasticbeanstalk – 使用Nginx在Docker容器上强制HTTPs
- 将Perl Docker容器部署到Elastic Beanstalk
- 如何在Elastic Beanstalk中增加Docker中的ulimit?
- ElasticBeanstalk Docker主机networking模式