166 lines
3.1 KiB
Markdown
166 lines
3.1 KiB
Markdown
|
|
# 配置文件说明
|
|||
|
|
|
|||
|
|
## 多环境配置
|
|||
|
|
|
|||
|
|
本项目支持多环境配置,通过 `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
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
确认配置加载正确后再继续使用。
|