開発

2016.02.16

Symfonyで環境変数が読み込まれなくて困った話

あらすじ

こんにちは。エンジニアの下田です。

これは、DB設定やAWSキーなど、秘匿情報をgitに入れたくなかったけど色々とハマったので頑張った話です。

 

前提

Symfony公式マニュアルによると、DB情報などのセンシティブな情報は環境変数から読みだすようにすることが可能、との記述があります。

$ export SYMFONY__DATABASE__USER=user
$ export SYMFONY__DATABASE__PASSWORD=secret

 

ということで、早速こんな感じで環境変数を設定できるようにしておいたのですが、

 

parameters:

 # see Apache config file
 # /etc/httpd/conf.d/vhost.conf
 database_user: "%database.user%"
 database_password: "%database.password%"

いろんなパターンで環境変数が読み込まれず困ったことになりました。

server:run

まずはローカル開発環境。

確かにexportしていてセットされているのに、ビルトインサーバから読めていません。

 

$ env | grep SYMFONY
SYMFONY__DATABASE__NAME=user
SYMFONY__DATABASE__PASSWORD=secret
$ php -i | grep SYMFONY
_SERVER["SYMFONY__DATABASE__USER"] => user
_SERVER["SYMFONY__DATABASE__PASSWORD"] => secret

これ、$_SERVERに入っていてもSymfonyから読めていないようで、

php.iniにてvariables_orderの値を変更して$_ENVへ入れておかないといけないようです。

php.ini

 

variables_order = "EGPCS"
$ php -i | grep variables_order
variables_order => EGPCS => EGPCS

これでOK!

 

CircleCI

ローカルでの開発はこれで問題なくなりましたが、今度はデプロイ時に時に失敗する現象が発生しました。

CircleCI内でのcomposer installが失敗してしまいます。

 

結論から言うと、CircleCIの設定画面から環境変数を設定してあげればOKです。

Project画面右上の「project setting」のリンクから「Environment variables」をクリック。

 

CircleCI

composer installを通すためだけなので、値はダミーでよく、セットさえされていればOKです。

symfonyenv

 

Capistrano + CircleCI

ところがまだデプロイで失敗します。

今度はCapistranoでのデプロイ中のcomposer updateがうまくいかない現象。

error何回見ても嫌ですね、この色…

 

Capostrano実行中なので、deploy.rbにて環境変数を設定してあげれば良いのですが、

そもそもdeploy.rbをバージョン管理している場合だと、結局また秘匿情報がバージョン管理下に置かれてしまいます。

また、ここはデプロイ先の環境に即した本当の値を設定しなくてはなりません。

 

そこで、

以下のように、先ほどのCircleCI内の環境変数で環境ごとの値を別途設定しておき、

circleCItestsetting

deploy.rb内ではその環境変数を読みだすように設定することで、本来の環境変数をセットしてデプロイ時に用いることができます。defaultenv

参考:http://capistranorb.com/documentation/getting-started/configuration/

Share on FacebookTweet about this on TwitterShare on Google+Share on Tumblr

この記事を書いた人

staff エンジニア:下田敬祐
一覧に戻る

[ WANTED! ]

共に地方を創る仲間を、随時募集中です