
在 Docker 環境中管理環境變數,.env 檔案與 docker-compose.yml 的 environment 區塊扮演不同的角色。雖然兩者都能傳遞變數給容器,但在安全性與維護性上有顯著差異。
.env 檔案主要用來存放機密資訊(如 Azure 連接字串、API 金鑰)或隨環境變動的數值。它的優點在於可以被加入 .gitignore,避免機密外洩到 GitHub。當你在同一目錄下執行 docker-compose up 時,Compose 會自動讀取該檔案並將變數注入到 YAML 設定中。
docker-compose.yml 中的 environment 標籤則是直接定義在設定檔內。這適合存放非機密的常數,例如應用程式的時區設定或監聽埠號。如果你將機密字串直接寫在這裡,只要有人能看到你的程式碼倉庫,就能看見你的所有金鑰。
對於要在 Azure 上執行(例如使用 Azure App Service 或 Azure Container Instances)的專案,強烈推薦使用 .env 檔案結合環境變數。
在本地開發時,你使用 .env 進行測試。當部署到 Azure 時,你通常不需要將 .env 檔案上傳到伺服器。相反地,你應該在 Azure 控制台的「組態」(Configuration)或「環境變數」設定介面中,直接填入這些鍵值對。Azure 會在容器啟動時,自動將這些設定注入到系統環境變數中,這比管理實體檔案更安全且符合雲端原生架構。
以下是推薦的組合寫法:
YAML
# docker-compose.yml 範例
services:
web:
image: my-fastapi-app
environment:
# 這裡只寫變數名稱,Compose 會自動從系統或 .env 尋找對應的值
- AZURE_STORAGE_CONNECTION_STRING=${AZURE_STORAGE_CONNECTION_STRING}
- APP_DEBUG=true
這種寫法能確保你的 docker-compose.yml 檔案本身不包含任何敏感資訊,具備高度的可移植性。
如何在 Azure App Service 的控制台中設定這些環境變數,以完成最後的部署步驟
在 Azure App Service 上設定環境變數非常直觀,這些設定在 Azure 術語中稱為「應用程式設定」(Application Settings)。當容器啟動時,Azure 會自動將這些設定轉化為環境變數,讓你的 FastAPI 程式碼能透過 os.getenv 讀取。
設定步驟如下:
首先,登入 Azure 入口網站,進入你的 App Service 頁面。在左側選單中找到「設定」(Settings)分類,點選「環境變數」(Environment variables)。在「應用程式設定」頁籤下,點選「新增」,分別輸入名稱(例如 AZURE_STORAGE_CONNECTION_STRING)及其對應的連接字串值。設定完成後,務必點選底部的「套用」並確認,這會觸發 App Service 重新啟動以載入新變數。
如果你偏好使用命令列,也可以透過 Azure CLI 快速完成:
Bash
az webapp config appsettings set \
--name 你的App名稱 \
--resource-group 你的資源群組 \
--settings AZURE_STORAGE_CONNECTION_STRING="你的字串" CONTAINER_NAME="uploads"
使用 Azure App Service 設定環境變數有幾個關鍵優勢:
第一是安全性,金鑰會被加密儲存,且不會出現在原始碼或 Docker 映像檔中。第二是靈活性,你可以為「測試環境」與「正式環境」設定不同的連接字串,而不需要修改任何一行程式碼。最後是整合性,這些變數會優先於 .env 檔案,因此即使你專案中不小心留有測試用的 .env,Azure 上的設定也會覆蓋它。
如果你的金鑰數量非常多,或者需要在多個服務間共享,是否想了解如何進一步結合 Azure Key Vault 來統一控管這些敏感資訊?
