OpsWorksを使用してLaravelベースのアプリケーションをAWSにデプロイしています。 OpsWorksコンソールを介して環境変数を定義しました。これらはApacheによって正しく表示されます。ただし、artisan
コマンドなどのCLIタスクを実行する場合、それらは設定されません。
これは、Apacheの仮想ホスト構成ファイルに設定されている環境変数が原因であると理解しています。これらの変数をエコーして/etc/environment
に追加するデプロイフックを実行することで問題を修正できると思いましたが、これは機能しません(機能したとしても、信じられないほど弱いでしょう)。
これを達成する他の方法はありますか? OpsWorksはこの特定の要件を許可しますか?
ありがとう。
これをどのように解決したかを次に示します(理想的ではありませんが、うまくいきます)。
getenv()
を使用してすべての環境変数にアクセスします。$_ENV
を使用している場合、Apacheはそれらを認識しません。.env.php
(本番環境用のLaravelの構成ファイル)に書き込みます。環境変数は、node[:deploy]['<short_app_name>'][:environment_variables][:<VAR_NAME>]
を介してデプロイフックコードで使用できます。php artisan --env=production --force <command-to-be-run>
。主に上記を使用して、デプロイメントキューの最初のインスタンスから移行を実行します。
カスタムChefクックブックも使用している場合は、実行時にChefテンプレートを使用してJSONまたはOpsWorksアプリケーション変数からプロパティを設定できます。以下は、Moodleセットアップのconfig.phpの例であり、moodle_dbhost、moodle_dbname、moodle_dbuserなどの属性が構成されたwebappというアプリケーションがあることを前提としています。
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/';