Переменные среды OpsWorks доступны для PHP CLI

Мы внедряем приложение на основе Laravel в AWS с помощью OpsWorks. Мы определили переменные среды через консоль OpsWorks, и они правильно видны Apache. Однако при выполнении задач CLI, таких как artisan Команды, они не установлены.

Я понимаю, что это связано с тем, что переменные среды устанавливаются в файлах конфигурации виртуального хоста Apache. Я думал, что смогу решить проблему, запустив ловушку развертывания, которая отображает эти переменные и добавляет их к /etc/environment, но это не работает (и даже если бы это произошло, это было бы невероятно слабым).

Есть ли другой способ добиться этого? Разрешает ли OpsWorks это конкретное требование?

Благодарю.

2 ответа

Вот как нам удалось решить эту проблему (хотя она и не идеальна, она делает свое дело):

  • использование getenv() получить доступ ко всем переменным среды: Apache не увидит их при использовании $_ENV,
  • Используйте хук развертывания OpsWorks, чтобы записать все переменные среды в .env.php, Файл конфигурации Laravel для производственной среды. Переменные среды будут доступны для кода подключения через node[:deploy]['<short_app_name>'][:environment_variables][:<VAR_NAME>],
  • Запустите ремесленные команды, определяющие производственную среду: php artisan --env=production --force <command-to-be-run>,

В основном мы используем вышеупомянутое для запуска миграций из первого экземпляра в очереди развертывания.

Если вы также используете пользовательские поваренные книги Chef, вы можете установить свойства из переменных приложения JSON или OpsWorks во время выполнения с помощью шаблона Chef. Ниже приведен пример config.php для установки Moodle, и предполагается, что у вас есть приложение под названием webapp с настроенными атрибутами, такими как moodle_dbhost, moodle_dbname, moodle_dbuser и т. Д.

CFG->dbtype    = 'pgsql';
$CFG->dblibrary = 'native';
$CFG->dbhost    = '<%= node['deploy']['webapp']['environment']['moodle_dbhost'] %>';
$CFG->dbname    = '<%= node['deploy']['webapp']['environment']['moodle_dbname'] %>';
$CFG->dbuser    = '<%= node['deploy']['webapp']['environment']['moodle_dbuser'] %>';
$CFG->dbpass    = '<%= node['deploy']['webapp']['environment']['moodle_dbpwd'] %>';
$CFG->prefix    = 'mdl_';
$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '<%= node['deploy']['webapp']['environment']['moodle_dbport'] %>',
  'dbsocket' => 0,
);

$CFG->wwwroot   = 'http://example.com/moodle/';
$CFG->dataroot  = '/var/www/moodle-data/';
Другие вопросы по тегам