Laravel:多个环境需要多个.env文件吗?

时间:2016-04-21 21:44:27

标签: php laravel configuration environment production

在Laravel 4.x中,可以使用一个配置文件的开发和生产环境。该框架将根据主机自动检测应该使用的内容。

使用Laravel 5.x,似乎我必须采取以下方法:

  • 在我的本地计算机上,根目录中的.env文件带有“APP_ENV = local”,其他配置资料可以在本地运行。

  • 在我的服务器上使用“APP_ENV = production”和相关设置也是如此。

因此,如果我部署我的网站,我必须注意我不会使用我的本地版本覆盖服务器上的.env文件。

到目前为止这是正确的还是我在这里遗漏了什么?

主要目标是保持敏感数据不受版本控制,并将所有内容集中在一个地方。

关于这种方法的以下观点和问题尚不清楚:

  • .env包的创建者建议不要在生产模式下使用它(来源:https://github.com/vlucas/phpdotenv)。 Laravel中针对此问题的解决方案是对整个框架中的每个设置进行硬编码,并确保.env文件未部署到服务器(可能是一个巨大的安全漏洞)。

  • 如果使用上述解决方案,您如何将敏感数据保留在版本控制之外?

  • 假设使用了两个不同的.env文件(用于开发,一个用于生产模式下的服务器),这不会是生产中的性能问题,因为每个设置都是从​​一次又一次地调用.env文件?

这似乎是从4.x方法退后一步,我可以在一个地方完成所有配置和完成,不需要有两个不同的同名文件,并观察我不混淆或者某事。在.php中加载一个数组也比多次调用一个文件快得多。

2 个答案:

答案 0 :(得分:1)

Yes you are right. For 5.x you have to create totally different .env files on any single environment like development, staging, production etc This is included in .gitignore so the git system doesn't care about it. Every manipulation should be made by hand once again when you change environment.

The typical process is to ssh into a remote machine, git clone your project, composer install all dependencies and then create a brand new .env file where you should put all dedicated settings regarding this environment. Your guide is .env.example.

答案 1 :(得分:0)

If you want to hide a file in UNIX-systems you simply do that by adding a dot to the beginning of the filename. I don't know how it works on Windows systems but the file should be hidden i OS X and Unix systems to prevent people from accidentally copying into another project.

You can only have one .env-file per environment, so you'll have to login to the server and add new .env file manually once.

If you're using GIT and want to prevent it from beeing included just add it into your .gitignore-file

// filename: .gitignore
.env