繁体   English   中英

使用Docker将Elastic Beanstalk环境变量暴露给Laravel的工匠

[英]Exposing Elastic Beanstalk environment variables to Laravel's artisan using Docker

我正在尝试使用Elastic Beanstalk首次将我的应用程序部署到生产环境,并且我已经使用我的Elastic beanstalk应用程序创建了一个RDS实例。 由于我的应用程序使用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环境变量。 我已经通过die(var_dump($_SERVER));确认了这一点die(var_dump($_SERVER)); artisan脚本的顶部,正如我所料,RDS环境变量不存在。

要尝试将环境变量提供给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

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

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

我能想到的唯一另一个选择是在我的应用程序配置中硬编码我的RDS凭据,我确信你理解这是我不想做的事情。

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

mod_env很可能不会将这些变量传递给您的应用程序。 /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命令。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM