在Laravel 5应用程序中,环境特定值应保存在何处?

Kry*_*ten 8 git configuration docker laravel-5

我正试着.env在Laravel 5中进行配置.

这是我的故事:我正在将现有的Laravel 4应用程序转换为Laravel 5.我目前有不同的环境(localproduction),并且级联配置系统运行良好.我将环境特定的应用程序配置放在单独的文件夹下app/config.

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

所以现在我正在尝试将我的配置转换为Laravel 5,我有点困惑.我读到的所有内容都说您将.env文件添加到.gitignore文件中,因此它不会包含在您的存储库中.我理解这样做的安全原因 - 不要将敏感的API密钥/密码/提交到您的存储库.但是我不确定如果我的生成.env文件不是存储库的一部分,如何确保我的生成文件包含在我的构建步骤中.

我的想法是将我的生产.env文件放在我的开发环境之外的文件系统中,然后在需要时复制它.

这是管理这个的"最佳实践"吗?这是别人怎么做的?

谢谢!

ast*_*anu 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
];
Run Code Online (Sandbox Code Playgroud)

开发和登台上的 .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
Run Code Online (Sandbox Code Playgroud)

生产环境中的 .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
Run Code Online (Sandbox Code Playgroud)

切勿在 git 存储库中包含 .env 文件。相反,制作一个副本并将其命名为“.env.sample”并添加它。因此,一旦克隆存储库,您的开发团队就可以设置自己的 .env 文件。您需要将 .env 添加到 .gitignore 以防止其添加到存储库。