[英]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.