在Laravel 5应用程序中,特定于环境的值应该保存在哪里?
我试图围绕在Laravel 5中进行configuration的.env
方式来进行包装。
这里是我的故事:我将现有的Laravel 4应用程序转换为Laravel 5.我目前有不同的环境( local
和production
)和级联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以防止它添加到回购。
- Mac OS X和Docker 1.9.1不安全的registry位置
- Docker容器和Ansible Playbook之间有什么区别?
- Docker化的Python应用程序configuration的存储位置
- Dockerconfiguration使用systemdconfiguration样式
- 在Docker容器启动之前将configuration注入到卷中
- 所有的WSO2 API Manager的configuration都保存在数据库中吗?
- 在master – DaemonSet上运行的Kubernetes应用程序
- Codeship Jet:将envvariables传递给docker-compose文件
- 编辑运行Kong的Docker实例的configuration文件