皆さんご存知の通り、symfony2のapp/config/parameters.yml
(以下parameters.yml
)は環境に依存するパラメータを設定する場所です。
DBのパスワード等々保存してますよね。
ciサーバーで自動テスト・自動デプロイが当たり前になってきた昨今、デプロイ先のparameters.yml
も自動化できてますか?
もしsshでログインしてviで編集したり、スクリプトで置換していたらこの記事は見る価値があるかもしれません。
incenteev/composer-parameter-handler
incenteev/composer-parameter-handler の env-map
を使って実現します。
symfony/framework-standard-edition
でsymfonyプロジェクトをセットアップした場合は既にインストールされているのでセットアップ方法は割愛します。
方法
parameters.yml.dist
に 環境依存のパラメータの定義composer.json
に1.
で定義したパラメータに対する環境変数を指定
こうするだけで環境変数を元にparameters.yml
が自動的にビルドされるようになります。
parameters.yml.dist
に環境依存のパラメータの定義
parameters:
database_name: symfony
database_user: root
database_password: ~
composer.json
にパラメータに対する環境変数を指定
{
"extra": {
"incenteev-parameters": {
"file": "app/config/parameters.yml"
}
}
}
symfony/framework-standard-edition
を使用している場合、既にこのような定義があると思います。
ここにパラメータの定義を追加していきます。
{
"extra": {
"incenteev-parameters": {
"file": "app/config/parameters.yml",
"env-map": {
"パラメータのキー": "環境変数名",
"database_name": "APP_DATABASE_NAME",
"database_user": "APP_DATABASE_USER",
"database_password": "APP_DATABASE_PASSWORD"
}
}
}
}
こういった感じでパラメータと環境変数とを紐付けるだけです。
そうすればparameters.yml
ビルド時に環境変数の値が設定されます。
後は実パラメータを環境変数に設定するだけなので、パスワードもバージョン管理等する事なくセキュアな感じに出来ます。
後の具体的な運用…
- ciサーバーのテストスクリプトで環境変数を設定
- デプロイ先のデプロイユーザーの環境変数にDBのパスワードや各種apiのキーなどを設定
具体的な運用方法としては上記のような感じになるかと思います