Lumen 配置多环境.env 文件

Lumen 的配置跟 Laravel 有些区别,虽然也能配置 config/app.php 这些,但并不是所有配置都能被覆盖,比如 APP_TIMEZONE,参考:https://stackoverflow.com/a/49431500

默认也只是加载.env 文件,并不支持多 env 环境配置。所以稍加改造实现这个功能: 测试环境:Lumen 6.x

新建配置文件

复制一份 .env.example 并命名为 .env.production 。这份就是用于 production 环境的配置文件。

编辑 bootstrap/app.php

原文件的头几行代码如下,

1
2
3
4
5
6
7
<?php

require_once __DIR__.'/../vendor/autoload.php';

(new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables(
dirname(__DIR__)
))->bootstrap();

改成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

require_once __DIR__.'/../vendor/autoload.php';

$appEnvFile = null;
if ($appEnv = env('APP_ENV')) {
$file = ".env.$appEnv";
if (file_exists(dirname(__DIR__) . '/' . $file)) {
$appEnvFile = $file;
}
}

(new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables(
dirname(__DIR__),
$envFileName
))->bootstrap();

配置 NGINX

PHP 部分的配置如下

1
2
3
4
5
location ~ \.php {
...
fastcgi_param APP_ENV production;
...
}

总结

实现的原理就是,通过 NGINX 设置 APP_ENV 的值,然后 Lumen 代码再根据 APP_ENV 的值,加载对应的 env 文件;如果找不到默认加载的是.env