# 完整環境變量配置指南

## 概述

現在所有重要的配置都已經整合到環境變量中，包括：
- 應用配置（URL、名稱）
- 資料庫配置（主機、端口、用戶名、密碼、資料庫名）
- AI 配置（Gemini API Key、模型名稱、最大 Token 數）

## 環境變量列表

### 🌐 應用配置
```bash
NEXT_PUBLIC_APP_URL=http://localhost:12024
NEXT_PUBLIC_APP_NAME=AI 智能評審系統
```

### 🗄️ 資料庫配置
```bash
DB_HOST=mysql.theaken.com
DB_PORT=33306
DB_NAME=db_AI_scoring
DB_USER=root
DB_PASSWORD=zh6161168
```

### 🤖 AI 配置
```bash
GEMINI_API_KEY=AIzaSyAN3pEJr_Vn2xkCidGZAq9eQqsMVvpj8g4
GEMINI_MODEL=gemini-1.5-pro
GEMINI_MAX_TOKENS=8192
```

## 完整的 .env.local 範例

```bash
# 應用配置
NEXT_PUBLIC_APP_URL=http://localhost:12024
NEXT_PUBLIC_APP_NAME=AI 智能評審系統

# 資料庫配置
DB_HOST=mysql.theaken.com
DB_PORT=33306
DB_NAME=db_AI_scoring
DB_USER=root
DB_PASSWORD=zh6161168

# AI 配置
GEMINI_API_KEY=AIzaSyAN3pEJr_Vn2xkCidGZAq9eQqsMVvpj8g4
GEMINI_MODEL=gemini-1.5-pro
GEMINI_MAX_TOKENS=8192
```

## 技術實現

### 🔧 配置工具類 (`lib/config.ts`)

```typescript
// 資料庫配置
export const dbConfig = {
  host: process.env.DB_HOST || 'mysql.theaken.com',
  port: parseInt(process.env.DB_PORT || '33306'),
  user: process.env.DB_USER || 'root',
  password: process.env.DB_PASSWORD || 'zh6161168',
  database: process.env.DB_NAME || 'db_AI_scoring',
  // ... 其他配置
}

// AI 配置
export const aiConfig = {
  geminiApiKey: process.env.GEMINI_API_KEY || 'fallback_key',
  modelName: process.env.GEMINI_MODEL || 'gemini-1.5-pro',
  maxTokens: parseInt(process.env.GEMINI_MAX_TOKENS || '8192'),
}

// 配置驗證
export function validateConfig(): { isValid: boolean; errors: string[] }
```

### 📊 資料庫配置更新 (`lib/database.ts`)

```typescript
import { dbConfig } from './config';

// 直接使用配置對象
const pool = mysql.createPool({
  ...dbConfig,
  // ... 其他配置
});
```

### 🤖 AI 配置更新 (`lib/services/gemini.ts`)

```typescript
import { aiConfig } from '../config';

const genAI = new GoogleGenerativeAI(aiConfig.geminiApiKey);
```

## 使用方式

### 🚀 開發環境設置

1. **複製環境變量範例**
   ```bash
   cp env.example .env.local
   ```

2. **編輯配置**
   ```bash
   # 編輯 .env.local 文件
   nano .env.local
   ```

3. **重啟服務器**
   ```bash
   npm run dev
   ```

### 🌐 生產環境設置

在部署平台（如 Vercel、Netlify 等）設置環境變量：

```bash
# 應用配置
NEXT_PUBLIC_APP_URL=https://yourdomain.com
NEXT_PUBLIC_APP_NAME=AI 智能評審系統

# 資料庫配置
DB_HOST=your-production-db-host
DB_PORT=3306
DB_NAME=your_production_db
DB_USER=your_db_user
DB_PASSWORD=your_secure_password

# AI 配置
GEMINI_API_KEY=your_production_gemini_key
GEMINI_MODEL=gemini-1.5-pro
GEMINI_MAX_TOKENS=8192
```

## 配置檢查工具

### 🔍 使用配置檢查腳本

```bash
node scripts/check-config.js
```

這個腳本會：
- 顯示當前配置
- 驗證必要的環境變量
- 提供配置建議

### 📋 檢查結果範例

```
🔍 檢查環境變量配置...

📋 當前配置:
  應用 URL: http://localhost:12024
  應用名稱: AI 智能評審系統
  資料庫主機: mysql.theaken.com
  資料庫名稱: db_AI_scoring
  Gemini 模型: gemini-1.5-pro
  最大 Token 數: 8192

✅ 所有必要的環境變量都已設置
```

## 不同環境的配置範例

### 🏠 本地開發環境
```bash
NEXT_PUBLIC_APP_URL=http://localhost:12024
DB_HOST=localhost
DB_PORT=3306
DB_NAME=ai_scoring_dev
```

### 🧪 測試環境
```bash
NEXT_PUBLIC_APP_URL=https://test.yourdomain.com
DB_HOST=test-db.yourdomain.com
DB_PORT=3306
DB_NAME=ai_scoring_test
```

### 🚀 生產環境
```bash
NEXT_PUBLIC_APP_URL=https://yourdomain.com
DB_HOST=prod-db.yourdomain.com
DB_PORT=3306
DB_NAME=ai_scoring_prod
```

## 安全注意事項

### 🔒 敏感信息保護

1. **API 密鑰**
   - 不要將真實的 API 密鑰提交到版本控制
   - 在生產環境中使用不同的 API 密鑰

2. **資料庫密碼**
   - 使用強密碼
   - 定期更換密碼
   - 限制資料庫訪問權限

3. **環境變量文件**
   - `.env.local` 已在 `.gitignore` 中
   - 不要在代碼中硬編碼敏感信息

### ⚠️ 重要提醒

1. **環境變量命名**
   - 客戶端變量必須以 `NEXT_PUBLIC_` 開頭
   - 變量名稱區分大小寫

2. **回退機制**
   - 所有配置都有合理的默認值
   - 確保在環境變量未設置時仍能運行

3. **配置驗證**
   - 使用 `validateConfig()` 檢查配置
   - 在應用啟動時驗證關鍵配置

## 故障排除

### 🐛 常見問題

1. **資料庫連接失敗**
   ```bash
   # 檢查資料庫配置
   echo $DB_HOST
   echo $DB_NAME
   echo $DB_USER
   ```

2. **Gemini API 錯誤**
   ```bash
   # 檢查 API 密鑰
   echo $GEMINI_API_KEY
   ```

3. **分享連結錯誤**
   ```bash
   # 檢查應用 URL
   echo $NEXT_PUBLIC_APP_URL
   ```

### 🔧 解決步驟

1. **確認環境變量設置**
   ```bash
   # 檢查 .env.local 文件
   cat .env.local
   ```

2. **重啟服務器**
   ```bash
   npm run dev
   ```

3. **運行配置檢查**
   ```bash
   node scripts/check-config.js
   ```

## 結論

通過完整的環境變量配置，應用現在具備了：

- ✅ **靈活性**：支援多環境部署
- ✅ **安全性**：敏感信息通過環境變量管理
- ✅ **可維護性**：統一的配置管理
- ✅ **穩定性**：回退機制確保正常運行
- ✅ **可驗證性**：配置檢查工具

現在您可以輕鬆地在不同環境中部署應用，只需設置相應的環境變量即可！
