我正试图围绕在Laravel 5中进行配置的.env
方式。
这是我的故事:我正在将现有的Laravel 4应用程序转换为Laravel 5.我目前有不同的环境(local
和production
),并且级联配置系统运行良好。我将环境特定的应用程序配置放在app/config
下的单独文件夹中。
我的应用程序目前在Docker容器中部署(和开发)。为了构建部署,我使用Dockerfile来构建我的应用程序映像(基于我的master
分支),然后将其推送到存储库并在生产服务器上拉动。
所以现在我正在尝试将我的配置转换为Laravel 5,我有点困惑。我读到的所有内容都说明您将.env
文件添加到.gitignore
文件中,因此它不包含在您的存储库中。我理解这样做的安全原因 - 不要将敏感的API密钥/密码/提交到您的存储库。但是我不确定如果我的生成.env
文件不包含在存储库中,如何确保我的生成.env
文件包含在其中。
我的想法是将我的生产{{1}}文件放在我的开发环境之外的文件系统中的某个位置,然后在需要时复制它。
这是管理此问题的“最佳做法”吗?这是别人怎么做的?
谢谢!
答案 0 :(得分:2)
.env文件将包含您将在配置文件中使用env('variable')应用的变量。最佳实践是在配置文件中设置任何与环境无关的参数(意味着可以在生产和开发中使用),并在.env文件中设置任何与环境相关的变量
示例:在您的开发和登台服务器上,您将使用gmail smtp发送电子邮件,但在生产服务器上,您将使用自己的smtp服务器。只需按如下方式设置电子邮件配置:
配置文件:
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 on production
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 repo上包含.env文件。而是制作副本并将其命名为“.env.sample”并添加。因此,一旦克隆了repo,您的开发团队就可以设置自己的.env文件。您需要将.env添加到.gitignore以防止它添加到repo。