讓你的 Laravel 環境變數檔案進入版本控制
在開發 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
環境變數檔案加密過後,我們就可以放心地將其加入版本控制!如果對方想要環境變數檔案,只需要知道金鑰,無須取得整個環境變數檔案,是不是方便很多呢?