2016-10-10 10 views
1

デフォルトでは、Laravel gitは環境設定と構成を含む.envファイルを無視します。Laravel環境変数5.3 setup

ローカルの.envとプロダクション.envを使用して私のサーバーにコミットできます。プロダクション設定を手動で作成する必要はなく、.envファイルを手作業で入力する必要はなく、プッシュを使用できます技術を展開する。

誰でもこれに適した解決策がありますか?開発者が常にプロダクション設定を1つのファイルに手動で作成し、プロダクションとローカルの設定を簡単に切り替えることができないようにすることは設計上の奇妙な選択です。私はgitフックを使用して.envに.productionの名前を変更することを検討していましたが、これは過剰なもののようですが、この機能が利用できないことをチェックしたいと思います。

なぜ3つのファイル.local.env,.production.env.env(2つのファイルを切り替える)ファイルが悪い考えであり、元のチームが回避した理由を説明するためのボーナスポイント。

最新バージョンのLaravel(5.3)を使用しています。

答えて

2

この設計の背後にある理由は、主に以下のとおりです。

  • セキュリティは
  • 異なる環境が

異なる設定が必要になることがありますLaravelは .envを提供するために、バンスルーカスによって DotEnv PHPライブラリを使用する懸念します機能については、公式のLaravelのドキュメントと同様に、その詳細を読むことができます:

あなたのアプリケーションを使用して 各開発者/サーバは異なる環境設定を 必要とする可能性があるため

あなた.envファイルは、アプリケーションのソース 制御にコミットすべきではありません。

チームで開発する場合は、 .env.exampleファイルをアプリケーションに引き続き含めることができます。プレースホルダ の値を設定ファイルの例に入れることによって、 チームの他の開発者は、アプリケーションを実行するために必要な環境変数を明確に確認できます。

そしてDotEnvから:

それはが敏感なAPIキーとパスワードを 含めることができますので、.envファイルは、一般的に、バージョン管理の外に保たれています。別の.env.exampleファイル は、必要な環境変数をすべて定義して作成され、重要なものについては を除いて定義されています。ユーザーは 開発環境用にユーザー指定したものか、 共同作業者にプロジェクトを送信します。プロジェクト共同作業者は、 .env.exampleファイルをローカル.envに個別にコピーし、ローカル環境に合わせてすべての設定が であることを確認し、必要に応じて秘密キーまたは を入力してください。この使用法では、プロジェクトの.gitignoreファイルに.env ファイルを追加して、 を共同編集者がコミットしないようにする必要があります。この方法では、 の機密パスワードまたはAPIキーがバージョンコントロール の履歴に残ることはなく、セキュリティ侵害のリスクは低く、プロダクションの の値をすべてのプロジェクト協力者と共有する必要はありません。要約すると

、あなたが唯一のシステムに展開すると、設定は常に同じになり、そして.env内部には機密データが存在しない(または、あなたがそれを見て、関係者全員でOKだと確信している場合)、あなたはおそらくあなたの解決策を進めることができます。

サイドノードとして:デザインの意思決定を具体的に求めていたので、DotEnvは他の要因の中でstrict separation of config from codeを主張するThe Twelve-Factor Appに触発されたようです。

+0

これはすべて意味があります。 .envには機密データがありますが、ソース管理は公開ではなく非公開です。あなたが指摘したように、これは元のデザインで潜在的なセキュリティー障害の追加ポイントと考えられます。 – Paul

+0

@Paulまた、これはユースケースによって異なります。ソースコントロールがプライベートであるか、パブリックになっている可能性があります。アプリケーションがいつかオープンソースになるかもしれません。おそらく、プロジェクトで作業するためにフリーランサーを雇ったがっているでしょう...コードから設定(特にパスワードとAPIキー)を分離すると、そのような場合にもっとコントロールできます。 – tmh

+0

@Paulコードで作業する非常に少数の開発者チームがいて、プロダクションシステムの資格情報で誰もが信頼されている場合は、VCSに '.production.env'を置くことができます。将来的に事態が変わる場合は、機密データをVCSから再度取得するために、特別な注意を払う必要があります(https://help.github.com/articles/remove-sensitive-data/)。 – tmh