Laravel 配置多環境env檔案

Yoooooo發表於2021-04-26

專案需求不同,要求也不同,這個僅供參考,相互學習,共同進步

前提

主要實現方法是自己提供的useEnvironmentPath(),有興趣的同學可以去研究下.
每個公司的要求不一樣,有的習慣進行條件編譯載入配置檔案,有的不需要條件編譯,怕安全洩露token等關鍵資訊,手動修改配置資訊.
像國內小公司基本不怎麼分測試環境,正式環境,更沒有減振環境,屬於直接替換配置檔案.所以呢進來看看學習學習.公司遇到過手動修改配置檔案,正式上線後整個專案崩潰的情況.調查結果有個配置檔案忘記寫了.我覺得只要有人手動替換這種操作的,稍不注意就會出問題.
如果你很不細心,這個一定要時刻準備著,準備跑路.

一. 配置env資料夾

刪除自帶的.env等檔案
新增env資料夾
並新增.dev.env, .stage.env, .prod.env檔案
Laravel 配置多環境env檔案

二. 修改app.php

Laravel 配置多環境env檔案

//...
//...
//忽略上面程式碼
$app->singleton(
  Illuminate\Contracts\Debug\ExceptionHandler::class,
  App\Exceptions\Handler::class
);

/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/
//**********************程式碼新增到這塊*******************************//
/**根據伺服器的hostname,載入不同的.env檔案
*獲取主機名 
*這裡方式可以根據自己需求修改 可以根據自己域名區分.
*我的這裡根據伺服器的hostname進行區分
*dev環境hostname:dev-projectname-api-web
*stage環境hostname:stage-projectname-api-web
*prod環境hostname:prod-projectname-api-web
*/

$hostname = gethostname();

//自定義env檔案路徑
$app->useEnvironmentPath(realpath(__DIR__.'/../env'));
$strProd = 'prod';
$strStage = 'stage';
$strDev = 'dev';
if (strpos($hostname, $strProd) !== false) {
  //prod環境
  $app->loadEnvironmentFrom('.prod.env');
} elseif (strpos($hostname, $strStage) !== false) {
  //stage環境
  $app->loadEnvironmentFrom('.stage.env');
} elseif (strpos($hostname, $strDev) !== false) {
  //dev環境
  $app->loadEnvironmentFrom('.dev.env');
} else {
  //其他情況,走dev分支
  $app->loadEnvironmentFrom('.dev.env');
}
//**********************程式碼新增到這塊*******************************//
return $app;
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章