Разоблачение переменных среды Elastic Beanstalk для мастера Laravel с помощью Docker

Я впервые пытаюсь развернуть свое приложение в рабочей среде, используя 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

Это терпит неудачу, поскольку переменные среды RDS не существуют для PHP в командной строке. Я подтвердил это, сделав die(var_dump($_SERVER)); на вершине artisan сценарий, и, как я ожидал, переменных среды 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 в конфигурации моего приложения, что, как я уверен, вы понимаете, является тем, что я не хочу делать.

3

Решение

Вы можете установить переменные окружения в конфигурации приложения beanstalk. Перейдите в свое приложение, щелкните «Конфигурация» в левом меню, затем найдите раздел «Конфигурация программного обеспечения» и щелкните значок редактирования, который выглядит как шестеренка. На этой странице вы можете добавить все переменные окружения, которые вы хотите, и изменить их в любое время. Я полагаю, что вы также можете сделать это в вашем .elasticbeanstalk / config.yml, однако я обычно делаю это из веб-интерфейса.

0

Другие решения

Скорее всего, 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
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector