# 配置文件说明

## 多环境配置

本项目支持多环境配置，通过 `GO_ENV` 环境变量自动选择对应的配置文件。

### 环境配置文件

- `config.dev.yaml` - 开发环境配置
- `config.prod.yaml` - 生产环境配置
- `config.staging.yaml` - 预发布环境配置（可选）
- `config.test.yaml` - 测试环境配置（可选）
- `config.yaml` - 默认配置文件（回退）

### 使用方法

#### 1. 开发环境（默认）

```bash
# 不设置 GO_ENV，默认使用开发环境
go run main.go

# 或显式设置
GO_ENV=development go run main.go
GO_ENV=dev go run main.go
```

使用配置文件：`config.dev.yaml`

#### 2. 生产环境

```bash
GO_ENV=production go run main.go
# 或
GO_ENV=prod go run main.go
```

使用配置文件：`config.prod.yaml`

#### 3. 预发布环境

```bash
GO_ENV=staging go run main.go
# 或
GO_ENV=stage go run main.go
```

使用配置文件：`config.staging.yaml`

#### 4. 测试环境

```bash
GO_ENV=test go run main.go
```

使用配置文件：`config.test.yaml`

### Windows PowerShell 设置环境变量

```powershell
# 临时设置（仅当前会话）
$env:GO_ENV="production"
go run main.go

# 或一行命令
$env:GO_ENV="production"; go run main.go
```

### Windows CMD 设置环境变量

```cmd
# 临时设置
set GO_ENV=production
go run main.go

# 或一行命令
set GO_ENV=production && go run main.go
```

### Linux/Mac 设置环境变量

```bash
# 临时设置
export GO_ENV=production
go run main.go

# 或一行命令
GO_ENV=production go run main.go
```

## 环境变量覆盖

敏感配置项可以通过环境变量覆盖，优先级高于配置文件：

- `DB_PASSWORD` - 数据库密码
- `JWT_SECRET` - JWT 密钥
- `REDIS_PASSWORD` - Redis 密码

示例：

```bash
# Linux/Mac
export DB_PASSWORD="your_secure_password"
export JWT_SECRET="your_jwt_secret_key"
GO_ENV=production go run main.go

# Windows PowerShell
$env:DB_PASSWORD="your_secure_password"
$env:JWT_SECRET="your_jwt_secret_key"
$env:GO_ENV="production"
go run main.go
```

## 配置文件优先级

1. 环境变量（最高优先级）
2. 环境特定配置文件（如 `config.prod.yaml`）
3. 默认配置文件（`config.yaml`）
4. 代码中的默认值（最低优先级）

## 首次使用

1. 复制 `config.example.yaml` 为 `config.yaml`
2. 修改 `config.yaml` 中的配置项
3. 运行应用

```bash
# Windows
copy config.example.yaml config.yaml

# Linux/Mac
cp config.example.yaml config.yaml
```

## 生产环境部署建议

1. ✅ 不要将包含敏感信息的配置文件提交到版本控制
2. ✅ 使用环境变量设置所有敏感配置
3. ✅ 在生产环境使用 `config.prod.yaml`
4. ✅ 确保 JWT Secret 使用强随机字符串
5. ✅ 数据库密码使用环境变量而不是写在配置文件中

## .gitignore 建议

```gitignore
# 配置文件
config/config.yaml
config/config.*.yaml
!config/config.example.yaml

# 日志文件
logs/
*.log
```

## 配置验证

启动时会在日志中显示加载的配置信息：

```
Loaded configuration for environment: production (file: config.prod.yaml)
Server mode: release, App environment: production
```

确认配置加载正确后再继续使用。
