在Laravel 5应用程序中,特定于环境的值应该保存在哪里?

我试图围绕在Laravel 5中进行configuration的.env方式来进行包装。

这里是我的故事:我将现有的Laravel 4应用程序转换为Laravel 5.我目前有不同的环境( localproduction )和级联configuration系统很好地工作。 我有我的环境特定的应用程序configuration在app/config下的单独的文件夹中。

我的应用程序目前在Docker容器中部署(和开发)。 为了构build部署,我使用Dockerfile来构build我的应用程序映像(基于我的master分支),然后将其推送到存储库并拉到生产服务器上。

所以现在我试图将我的configuration转换为Laravel 5,我有点困惑。 我读过的所有东西都说你将.env文件添加到.gitignore文件,所以它不包含在你的版本库中。 我明白这一点的安全原因 – 不要提交敏感的API密钥/密码/无论你的存储库。 但我不知道如何确保我的生产.env文件包含在我的构build步骤,如果它不是存储库的一部分。

我的想法是把我的生产.env文件放在我的文件系统之外的某个地方,然后在需要的时候复制它。

这是pipe理这个“最佳做法”吗? 这是别人怎么做的?

谢谢!

.env文件将包含您将在configuration文件中使用env('variable')应用的variables。 最佳实践是在configuration文件中设置独立于环境的任何参数(意味着可以在生产和开发中工作),并在.env文件中设置任何依赖于环境的variables

例如:在您的开发和登台服务器上,您将使用Gmail邮件发送电子邮件,但在生产服务器上,您将使用自己的SMTP服务器。 只需设置电子邮件configuration如下:

configuration文件:

 return [ 'driver' => 'smtp', 'host' => env('MAIL_HOST'), 'port' => env('MAIL_PORT'), 'from' => ['address' => env('MAIL_FROM_EMAIL'), 'name' => env('MAIL_FROM_NAME')], 'encryption' => 'tls', 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'sendmail' => '/usr/sbin/sendmail -bs', 'pretend' => false ]; 

.env开发和分期

 MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_FROM_EMAIL=email@gmail.com MAIL_FROM_NAME=email@gmail.com MAIL_USERNAME=email@gmail.com MAIL_PASSWORD=password 

.env生产

 MAIL_HOST=smtp.domain.com MAIL_PORT=587 MAIL_FROM_EMAIL=noreply@domain.com MAIL_FROM_NAME=noreply@domain.com MAIL_USERNAME=noreply@domain.com MAIL_PASSWORD=password 

不要在您的git仓库中包含.env文件。 而是做一个副本,并将其命名为“.env.sample”并添加。 所以你的开发团队可以设置自己的.env文件,一旦回购克隆。 您将需要将.env添加到.gitignore以防止它添加到回购。