環境變數(Environment Variable)是作業系統提供的動態鍵值對儲存機制,用於配置應用程式行為、敏感資訊與系統參數,讓程式能在不同環境(開發、測試、生產)無需修改程式碼即可切換設定。它就像程式的「外部設定檔」,透過 KEY=VALUE 格式存在系統環境中,被所有子程序自動繼承。
環境變數的核心概念與作用
環境變數是進程執行時的「上下文資訊」,包含:
-
系統變數:如
PATH(可執行檔路徑)、HOME(家目錄) -
自訂變數:如
DATABASE_URL、API_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
生產部署:
-
Heroku:
heroku 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 密鑰到複雜微服務佈署,掌握環境變數管理是專業開發者的必備技能。