讓你的 Laravel 環境變數檔案進入版本控制

程式技術
sharkHead

在開發 Laravel 應用程式時,我們會將一些敏感資訊,如連線資料庫的帳號密碼或是用來取得第三方軟體認證的金鑰,放在環境變數檔案 .env 中,也因為如此,我們不會讓 .env 檔案進入 git 的版本控制,避免內容公開被其他人看到。

在新建一個 Laravel 專案時,我們可以從 .gitignore 中發現 .env 檔案已被排除在版本控制之外。

.env
.env.backup
.env.production

那如果我們需要與同事分享環境變數檔案呢?

有一種做法是將檔案放在公司的私有存儲伺服器上,然後請對方從伺服器上下載檔案,另外一種做法就是請對方拿個 USB 隨身碟去有檔案的同事那裡 Copy 一份,但不論是哪種方法,顯然都有些費工。

為了改善此情況,Laravel 9.32 版本新加入將環境變數檔案加密的功能,有了這個功能,我們可以讓環境變數檔案正大光明的進入版本控制。

加解密你的環境變數檔案

Laravel 9.32 推出一個新的指令,可以讓我們加密 .env 檔案。

php artisan env:encrypt

執行之後,Laravel 會在根目錄生成一個加密過後的環境變數檔案 .env.encrypt,與一組用來加密的金鑰,我們可以使用密碼管理工具管理該金鑰

➜ php artisan env:encrypt

   INFO  Environment successfully encrypted.

  Key ............................ base64:1pR3H2MR4HKb34iklYDxPtA2sOZjRejOZY6Ps0da190=
  Cipher ................................................................. AES-256-CBC
  Encrypted file ...................................................... .env.encrypted

要解密的話可以使用解密的指令,解密預設不會覆蓋原有的 .env 檔案,所以如果根目錄有 .env 檔案的話,就無法解密。

# 解密預設不會覆蓋檔案,所以如果 .env 檔案已經存在,指令會中斷執行
php artisan env:decrypt --key=base64:1pR3H2MR4HKb34iklYDxPtA2sOZjRejOZY6Ps0da190=

如果 .env 檔案已經存在,而你想直接覆蓋過去的話,可以使用 --force 參數。

php artisan env:decrypt --force

如果你想要使用自己的金鑰,可以使用 --key 來指定使用的金鑰字串。加密預設會使用 AES-256-CBC 演算法,因此金鑰長度必須為 32 個字元

php artisan env:encrypt --key=GnyHS3yvaQ4Xf27eR6mPBFeaudBbfDWW

如果想使用其他加密演算法,可以使用 --cipher 參數來指定。

# AES-128-CBC 演算法要求的金鑰長度為 16 個字元
php artisan env:decrypt --key=d3XX2iZnGxPGA4DC --cipher=AES-128-CBC

如果你有多個環境變數檔案,例如 .env.local.env.production,可以使用 --env 參數指定要加密的環境變數檔案。

加密後就會生成對應的 .env.local.encrypt.env.production.encrypt檔案。

php artisan env:encrypt --env=local

php artisan env:encrypt --env=production

環境變數檔案加密過後,我們就可以放心地將其加入版本控制!如果對方想要環境變數檔案,只需要知道金鑰,無須取得整個環境變數檔案,是不是方便很多呢?

參考資料

sharkHead
written by
sharkHead

後端打工仔,在下班後喜歡研究各種不同的技術。稍微擅長 PHP,並偶爾涉獵前端開發。個性就像動態語言般隨興,但渴望做事能像囉嗦的靜態語言那樣嚴謹。

1 則留言
訪客 2023 年 01 月 29 日

說是這樣說,但感覺把設定檔案上版本控制還是有點不太習慣 XD