什麼是 Environment Variable (環境變數)?

1
什麼是 Environment Variable (環境變數)?:環境變數(Environment Variable)是作業系統提供的動態鍵值對儲存機制,用於配置應用程式行為、敏感資訊與系統參數,讓程式能在不同環境(開發、測試、生產)無需修改程式碼即可切換設定。它就像程式的「外部設定檔」,透過 KEY=VALUE 格式存在系統環境中,被所有子程序自動繼承。

什麼是 Environment Variable (環境變數)?

環境變數(Environment Variable)是作業系統提供的動態鍵值對儲存機制,用於配置應用程式行為、敏感資訊與系統參數,讓程式能在不同環境(開發、測試、生產)無需修改程式碼即可切換設定。它就像程式的「外部設定檔」,透過 KEY=VALUE 格式存在系統環境中,被所有子程序自動繼承。

 

環境變數的核心概念與作用

環境變數是進程執行時的「上下文資訊」,包含:

  • 系統變數:如 PATH(可執行檔路徑)、HOME(家目錄)

  • 自訂變數:如 DATABASE_URLAPI_KEY

主要用途包括環境配置、密鑰管理、除錯模式切換:

開發:DATABASE_URL=postgresql://localhost:5432/dev_db
生產:DATABASE_URL=postgresql://prod-server:5432/main_db
DEBUG=true
 

全域 vs 局部環境變數

範圍 存取權限 設定位置 範例指令
全域 所有進程 ~/.bashrc、系統設定 export PATH=$PATH:/new/bin
局部 當前程序及其子程序 命令列、腳本 API_KEY=abc123 node app.js

全域變數影響整個系統,局部僅限當次執行。

 

程式語言存取方式

Python

import os

# 取得變數(有預設值)
db_url = os.getenv('DATABASE_URL', 'sqlite:///dev.db')
api_key = os.environ.get('API_KEY')  # None if not exists

# 設定(僅影響當前程序)
os.environ['DEBUG'] = 'true'
 

Node.js

const dbUrl = process.env.DATABASE_URL || 'sqlite://dev.db';
const apiKey = process.env.API_KEY;

if (process.env.NODE_ENV === 'production') {
    // 生產環境邏輯
}
 

Shell 腳本

#!/bin/bash
echo "資料庫:$DATABASE_URL"
if [ "$DEBUG" = "true" ]; then
    set -x  # 除錯模式
fi
 

實際開發場景應用

1. 十二因素應用配置

# .env 開發環境(使用 dotenv 載入)
DATABASE_URL=postgresql://localhost/mydb
REDIS_URL=redis://localhost:6379
SECRET_KEY=dev-secret-key-123

# 生產環境(平台設定)
DATABASE_URL=postgresql://prod.aws.amazon.com/mydb
REDIS_URL=redis://prod.redis.service
SECRET_KEY=secure-production-key-456

 

2. Docker 容器配置

# Dockerfile
ENV NODE_ENV=production
ENV PORT=8080

# docker-compose.yml
environment:
  - DATABASE_URL=postgres://db:5432/app
  - API_KEY=${API_KEY}

 

3. CI/CD 管道

# GitHub Actions
env:
  DATABASE_URL: ${{ secrets.DATABASE_URL }}
  NODE_ENV: production

 

環境變數管理工具

開發環境

  • dotenv.env 檔案載入(.gitignore 忽略)

pip install python-dotenv  # Python
npm install dotenv          # Node.js
 

生產部署

  • Herokuheroku config:set KEY=VALUE

  • Vercel:專案設定面板

  • AWS:Parameter Store、Secrets Manager

  • Kubernetes:ConfigMap、Secret

 

安全性最佳實務

正確做法

# 使用 .env + gitignore
# 平台密鑰管理
# 定期輪換
API_KEY=${{ secrets.API_KEY }}

 

安全漏洞

# 硬編碼在程式碼
API_KEY = "abc123"

# 提交到 Git 的 .env
# 共用伺服器全域變數
 

跨平台設定指令

Linux/macOS

export DB_URL="postgresql://localhost/db"
echo $DB_URL
# 永久:echo 'export DB_URL=...' >> ~/.bashrc
 

Windows (CMD)

set DB_URL=postgresql://localhost/db
echo %DB_URL%
 

Windows (PowerShell)

$env:DB_URL="postgresql://localhost/db"
$env:DB_URL
 

檢查所有變數

# Linux/macOS
env | grep DB
printenv | grep DB

# Windows
set | findstr DB
 

常見環境變數參考

NODE_ENV=development/production
PORT=3000
DATABASE_URL=...
REDIS_URL=...
DEBUG=true
TZ=Asia/Taipei
 

環境變數是現代 DevOps 的基石,讓程式碼與配置分離,提升安全性、可移植性與團隊協作效率。從簡單 API 密鑰到複雜微服務佈署,掌握環境變數管理是專業開發者的必備技能。