php - 使用 Docker 将 Elastic Beanstalk 环境变量公开给 Laravel 的 artisan

标签 php laravel amazon-web-services docker amazon-elastic-beanstalk

我第一次尝试使用 Elastic Beanstalk 将我的应用程序部署到生产环境中,并且我已经创建了一个 RDS 实例以及我的 Elastic beanstalk 应用程序。由于我的应用程序使用 PHP5-FPM,因此我必须像这样在 Dockerfile 中公开这些环境变量:

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 环境变量。我已经通过在 artisan 脚本的顶部执行 die(var_dump($_SERVER)); 确认了这一点,正如我所料,RDS 环境变量不存在.

为了尝试获取 PHP CLI 的环境变量,我尝试在我的 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

但是,同样,环境变量不存在。

如何让 PHP 命令行解释器访问我的 RDS 环境变量?

我能想到的唯一其他选择是在我的应用程序配置中硬编码我的 RDS 凭据,我相信您明白这是我不想做的事情。

最佳答案

您可以在 beantalk 应用程序的配置中设置环境变量。转到您的应用程序,单击左侧菜单上的配置,然后查找软件配置部分并单击编辑图标,一个看起来像齿轮的东西。在此页面上,您可以添加所需的所有环境变量并随时更改它们。我相信您也可以在 .elasticbeanstalk/config.yml 中执行此操作,但我通常只是从 Web 界面执行此操作。

关于php - 使用 Docker 将 Elastic Beanstalk 环境变量公开给 Laravel 的 artisan ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609937/

相关文章:

amazon-web-services - Amazon S3存储桶策略: How to lock down access to only your EC2 Instances

php - Xero API - 如何获取两个日期之间的发票

php - Ubuntu 在终端输入 'php' 显示很多错误

php - 一般编程知识?

amazon-web-services - 标记 ECS 任务的最佳实践?

linux - 允许 RTMP 流到 AWS?

php - 无法使用模态内的表单在 JSGrid 上过滤和显示数据

php - Laravel 与 Symfony |模型属性

php - laravel 5.1 以多对多关系获取每个类别的 5 个新闻

PHP RegEx 允许 mailto : http://and tel: hyperlinks