簡體   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