因为当前代码与上线都是通过Git webhook的方式管理,需要提交代码后自动同步到开发服务器、测试服务器,发布版本后自动到生产环境的服务器中,所以需要有多环境配置,不用人工再登录服务器修改配置。
注意:生产环境的数据库当前只允许 localhost 访问,就算代码仓库外漏也没办法远程连接。
lumen 5.7 利用 Vance Lucas 的 PHP 库 DotEnv 管理配置文件,默认配置文件为 .env
。
当前多环境配置是根据虚拟域名后缀切换不同的配置文件:
- 本地开发环境(localhost),访问域名后缀
.z
。 - 开发环境(develop),访问域名后缀
.d
。 - 测试环境(testing),访问域名后缀
.t
。 - 生产环境(production),访问域名后缀
.com
。
修改文件 bootstrap\app.php
修改为:
try {
//根据域名后缀配置切换不同环境
$httpName = isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:''; //当前域名
$suffix = substr(strrchr($httpName, '.'), 1); //获取域名后缀
switch ($suffix) {
case false:
//shell 命令环境配置(没有域名后缀)
$environment = '.env.localhost';
break;
case 'z':
//本地环境
$environment = '.env.localhost';
break;
case 'd':
//开发环境
$environment = '.env.develop';
break;
case 't':
//测试环境
$environment = '.env.testing';
break;
default:
//正式环境
$environment = '.env.production';
break;
}
(new Dotenv\Dotenv(dirname(__DIR__),$environment))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
//
}
lumen 5.8 有点变化
原:
修改为:
新建对应的配置文件,配置完成。
附配置文件说明:
//环境
APP_NAME=Lumen //应用名称
APP_ENV=local //运行环境名称
APP_KEY= // 敏感信息加密密钥,可使用 php artisan key:generate 重新生成。
APP_DEBUG=true // 是否启用调试模式 正式环境修改为 false。
APP_URL=http://localhost //项目访问域名
APP_TIMEZONE=UTC //时区
//日志
LOG_CHANNEL=stack
LOG_SLACK_WEBHOOK_URL=
//数据库配置
DB_CONNECTION=mysql //使用的数据库
DB_HOST=127.0.0.1 //链接地址
DB_PORT=3306 //端口
DB_DATABASE=homestead //数据库名称
DB_USERNAME=homestead //用户名
DB_PASSWORD=secret //用户密码
//缓存
CACHE_DRIVER=file // 缓存驱动,默认使用文件作为缓存。
QUEUE_CONNECTION=sync // 队列驱动,默认使用同步模式。
shell 指定环境配置文件执行
通过参数 --env=
+ 环境名称
#执行开环环境下的数据导入
php artisan db:seed --env=develop
lumen 5.8 修改文件 bootstrap\app.php
if($_SERVER['HTTP_HOST']){
//根据域名后缀配置切换不同环境
$httpName = isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:''; //当前域名
$suffix = substr(strrchr($httpName, '.'), 1); //获取域名后缀
switch ($suffix) {
case false:
//shell 命令环境配置(没有域名后缀)
$environment = '.env.localhost';
break;
case 'z':
//本地环境
$environment = '.env.localhost';
break;
case 'd':
//开发环境
$environment = '.env.develop';
break;
case 't':
//测试环境
$environment = '.env.testing';
break;
default:
//正式环境
$environment = '.env.production';
break;
}
} else {
//指定执行命令环境
$environment = '.env.localhost';
// $argv 为shell 执行的命令组合
if(!empty($argv)){
foreach($argv as $argvStr){
if(strstr( $argvStr , '--env=' ) !== false ){
$environment = str_replace('--env=','.env.',$argvStr);
}
}
}
}
(new Laravel\Lumen\Bootstrap\LoadEnvironmentVariables(
dirname(__DIR__),$environment
))->bootstrap();