【发布时间】:2016-08-15 07:53:55
【问题描述】:
在 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中加载一个数组也比多次调用一个文件快很多。
【问题讨论】:
-
在生产中,使用实际 environment variables。 PHPDotEnv 模拟的那些。这样在没有 .env 文件的情况下,
env()函数会读取系统提供的文件。 Further information/tutorial -
@BenSwinburne 需要更改一些默认框架例程或函数吗?
-
不,服务器本身具有框架可以获取的环境变量。例如,在服务器上,您通常会将它们设置在 .htaccess 文件或 Apache 中的 virualhost 指令中。这样,Apache 就可以在 PHP 的
$_ENVsuperglobal 中为该站点提供配置。您正在使用的env()函数为您访问$_ENV。.env文件在开发环境中为您轻松填充$_ENV。 -
我看不到包创建者在哪里提到不要在生产模式下使用它?!该软件包的主要目标是做到这一点 - 使用单个文件将开发与生产分开。
.env文件默认被.gitignore文件排除 - 只需使用 GIT 进行部署。 -
@BenSwinburne 谢谢,这很清楚。稍后我将在您的解决方案中添加答案。
标签: php laravel configuration environment production