---
source: ../../../core/environment-standards.md
source_version: 1.0.0
translation_version: 1.0.0
last_synced: 2026-04-10
status: current
---

# 環境管理標準

> 版本: 1.0.0 | 最後更新: 2026-04-01

## 概述

本文件定義應用程式環境在整個生命週期中的管理標準——從本地開發到生產部署。涵蓋環境層級、配置管理、環境一致性、機密處理及驗證程序。

## 1. 環境層級

### 標準層級（必要）

| 層級 | 用途 | 對象 | 資料 |
|------|------|------|------|
| **Local** | 個人開發工作站 | 單一開發者 | 合成/種子資料 |
| **Dev** | 共享開發與整合 | 開發團隊 | 合成測試資料 |
| **Staging** | 上線前驗證與 QA | QA 團隊、利害關係人 | 匿名化的類生產資料 |
| **Production** | 服務終端使用者的正式系統 | 終端使用者 | 真實使用者資料 |

### 可選層級

| 層級 | 用途 |
|------|------|
| **Preview** | 每個 PR 的臨時環境，PR 合併後自動清理 |
| **Sandbox** | 隔離的實驗環境 |
| **DR** | 災難復原環境 |

## 2. 配置優先層級

配置值依以下優先順序解析（由高到低）：

| 優先順序 | 來源 | 範例 |
|---------|------|------|
| 1（最高） | 環境變數 | `DATABASE_URL=postgres://...` |
| 2 | 命令列參數 | `--port 3000` |
| 3 | 環境配置檔 | `.env.staging`, `config/staging.yaml` |
| 4 | 應用配置檔 | `config/default.yaml` |
| 5（最低） | 硬編碼預設值 | `const PORT = config.port ?? 3000` |

## 3. 環境一致性

| 面向 | 要求 |
|------|------|
| 技術棧 | **必須**相同 |
| 架構拓撲 | **應該**相同 |
| 配置結構 | **必須**相同（值可不同） |
| 資料結構 | **必須**相同 |
| 規模 | **可以**不同 |
| 資料內容 | **必須**不同（非生產環境使用匿名化資料） |

## 4. 機密管理

### 五大核心原則

1. **不入版控**：機密絕不提交到版本控制
2. **範本化**：提供 `.env.example` 範本檔案
3. **集中管理**：使用集中式機密管理器（Vault、AWS Secrets Manager 等）
4. **最小權限**：每個服務只取得所需的機密
5. **定期輪替**：API Key 每 90 天、TLS 憑證到期前自動更新

### 輪替頻率

| 機密類型 | 輪替頻率 |
|---------|---------|
| API Keys | 每 90 天 |
| 資料庫密碼 | 每 90 天 |
| TLS 憑證 | 到期前（以 ACME 自動化） |
| 服務帳戶金鑰 | 每 180 天 |

## 5. .gitignore 規則

必要規則：
```gitignore
.env
.env.local
.env.*.local
*.pem
*.key
credentials.json
service-account.json
```

## 6. 環境驗證檢查表

| # | 類別 | 檢查項目 |
|---|------|---------|
| 1 | 連接性 | 資料庫連線、API 端點、訊息佇列 |
| 2 | 認證 | SSO/OAuth、API Key 有效性 |
| 3 | 資料 | Schema Migration、種子資料 |
| 4 | 監控 | 指標收集、日誌聚合、告警規則 |
| 5 | 安全 | TLS、CORS、速率限制 |
| 6 | 存取 | 團隊權限、部署憑證 |
| 7 | 備份 | 備份排程、還原程序 |
| 8 | DNS | 網域記錄、SSL 憑證、CDN |

## 7. IaC 六大核心原則

1. **聲明式優先**：描述期望的最終狀態
2. **冪等性**：重複套用產生相同結果
3. **版本控制**：所有 IaC 程式碼存於 Git
4. **模組化**：使用可重用模組
5. **環境參數化**：以變數注入環境特定值
6. **不可變基礎設施**：更新時替換而非就地修改

### IaC Code Review 檢查清單

PR 包含 IaC 變更時，審查者必須評估以下四個面向：

| # | 面向 | 檢查項目 |
|---|------|----------|
| 1 | **安全性** | 最小權限、無硬編碼 Secret、IAM 範圍正確、網路暴露最小化 |
| 2 | **成本影響** | 新資源已識別、執行個體大小合理、預估每月成本變化已記錄 |
| 3 | **回滾可行性** | 變更可逆、破壞性操作已標記、有狀態資源備份策略 |
| 4 | **環境一致性** | 變更維持各層級一致、環境特定覆寫已記錄、無配置漂移 |

### Drift Detection（漂移偵測）

基礎設施漂移指實際狀態與 IaC 定義狀態產生偏差（例如透過主控台手動變更）：

**偵測：**
- 定期執行漂移掃描（如 `terraform plan`、`pulumi preview`），建議 Production 每日執行
- 將漂移檢查整合至 CI/CD pipeline

**通知：**
- 偵測到漂移必須通知負責團隊（Slack、email 或告警系統）

**修復：**
- **更新 IaC**：若手動變更為有意為之，更新 IaC 程式碼
- **還原基礎設施**：若為未授權或意外變更，還原至 IaC 定義狀態

---

**相關標準：**
- [日誌標準](logging-standards.md)
- [部署標準](deployment-standards.md)
- [安全標準](security-standards.md)

---

## 授權

本標準以 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 授權釋出。
