哈囉!大家好~
目前 To-do List 的資料庫功能已經完成的差不多了,在本地端測試也都非常正常。但是如果今天不是在我的電腦上跑,而是換了一個不一樣的環境,那 To-do List 專案就會需要做修改,所以今天會介紹在後端開發時,都會有的一個 .env
檔案!
今日分享大綱:
.env
是什麼? 為什麼需要?.env
檔案通常都放什麼?.env
是什麼?為什麼需要?在前面剛剛有提到,環境的轉換有可能會導致專案內容的部分修改,但是我們不可能因為環境的轉換就重新修改程式,然後重新打包、部署,這些修改的動作很有可能會讓程式編譯錯誤!
所以,為了降低錯誤的發生以及提高專案的安全、可移植性,就出現了 .env
這個檔案。
.env 檔案是什麼? → 是一個「 環境設定檔 」。
專門放專案執行時,會用到的 環境變數(Environment Variables)。
📌 環境變數的特性:
os.Getenv("KEY")
讀取。那什麼時候會需要用到環境變數?
像是 To-do List 專案中,就有資料庫的設定,這部分的設定資訊,就可以把它放進 .env
檔案中,方便之後更換資料庫時快速切換使用。
而在一般專案中,常見的可能有:API Key(第三方服務)、JWT Secret 等,所以如果把這些資訊都寫死在程式裡,是不是想到要更改就覺得很麻煩 🫠
另一方面是會有安全性的問題,因為密碼都直接寫在程式裡面了!
也就是這樣,才會需要用 環境變數 來統一管理這些資訊。
.env
檔案通常都放什麼?那通常會在 .env
檔案裡面放什麼? 前面已經有大概提到了一些,這邊會列出常見的分類與範例給大家參考!
內容大概分成三項目:
現在的 To-do List 專案使用的資料庫是 Sqlite,如果之後要改成其他的資料庫的話,就需要把相關的設定寫進 .env
檔案裡,然後將還沒有要使用的部分註解,方便之後更換~
主要會設定:
DB_NAME
:使用哪一個資料庫(例如:sqlite、postgres、mysql 等)。DB_URL
:資料庫連線字串。範例:
DB_NAME= sqlite
DB_URL= tasks.db
# 如果之後改用 PostgreSQL,可以改成:
# DB_DRIVER= postgres
# DB_URL= postgres://user:password@localhost:8080/todolist
在 Gin 的框架中,有一個東西叫做 GIN_MODE
,它是 Gin 框架設定執行模式(Environment Mode)的環境變數,用來控制伺服器在不同環境下的行為。
→ 意思是 GIN_MODE
會依照設定,改變我們啟動 server (go run main.go
)之後的模式。
而 GIN_MODE
總共有 3 種模式:
debug
:預設模式。會印出詳細的 log、錯誤、請求紀錄。(方便開發使用)release
:生產模式。關閉 debug 訊息、錯誤,不印多餘 log,效能較佳。(正式環境)test
:測試模式。類似 debug
,但會關閉彩色輸出,常用於單元測試。(測試)這 3 種模式能夠讓我們在開發與正式環境中,透過不同的設定有不同的功能!像是開發時,要能方便除錯;但專案上線之後,需要的是能提升效能、並且隱藏錯誤訊息。
範例:
# 本地開發環境
GIN_MODE= debug
# 部署到正式環境
GIN_MODE= release
另一個則是 Port 的設定,指的是伺服器運行時的 port(例如:8080)。這個也是可以把它寫在 .env
檔案裡,方便管理、設定專案啟動之後所需對應的 port。
範例:
PORT= 8080
API 金鑰和密碼設定都是屬於「 敏感資訊 」,通常不應該直接寫在程式碼裡,因為會有洩漏的風險的存在。
API 金鑰(API Key):呼叫第三方服務的鑰匙(密碼)。
舉例來說,如果專案有使用到 OpenAI API、Google Maps API 等這些第三方的服務,那他們一定會給你一組專屬的金鑰,而在你每次連線使用這些服務時,會先確認你的 API Key 是否符合,才能使用。
範例:
OPENAI_API_KEY= sk-1234abcd5678efgh
通常每一組 API Key 都是獨一無二的,而且都具有權限,因為可能會涉及扣款等功能。所以如果 API Key 不小心洩漏給別人知道,別人就可以存取你的 API 或是資料庫,就會有資安的風險。
密碼設定:從字面上的意思來看就是「 密碼 」。
常見的密碼設定包括資料庫密碼、JWT 金鑰、信箱密碼、憑證等之類的。這一類型的就更不能讓其他人知道了!
範例:
DB_PASSWORD= mysecret
JWT_SECRET= myjwtkey123
GOOGLE_CLIENT_SECRET= xyz
除了上述的資訊之外,可以依照自己的專案需求新增或減少~
但最重要的是 .env
檔案 不應該上傳到 GitHub 或是 Gitlab 上,避免造成資安的風險。所以要在 .gitignore
檔案裡面增加這行: