File size: 6,629 Bytes
6fefda3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
# 统一配置系统说明

JetBrains AI Proxy现在采用了全新的统一配置系统,实现了自动配置发现、多种配置方式支持和配置热重载等功能。

## 🏗️ 系统架构

### 核心组件

1. **ConfigManager** (`internal/config/config.go`)
   - 统一的配置管理器
   - 支持多种配置源的合并
   - 线程安全的配置访问
   - 配置验证和默认值处理

2. **ConfigDiscovery** (`internal/config/discovery.go`)
   - 自动配置文件发现
   - 配置文件格式验证
   - 配置文件监控和热重载
   - 示例配置生成

3. **JWTBalancer** (`internal/balancer/jwt_balancer.go`)
   - JWT负载均衡器
   - 支持轮询和随机策略
   - 并发安全的token管理
   - 动态token更新

4. **HealthChecker** (`internal/balancer/health_checker.go`)
   - JWT健康检查器
   - 自动故障检测和恢复
   - 可配置的检查间隔
   - 并发健康检查

## 📁 文件结构

```
jetbrains-ai-proxy/
├── main.go                          # 主程序,支持新配置系统
├── start.sh                         # 智能启动脚本
├── CONFIGURATION_SYSTEM.md          # 配置系统说明(本文件)
├── MULTI_JWT_README.md              # 多JWT功能说明
├── internal/
│   ├── config/
│   │   ├── config.go                # 配置管理器
│   │   └── discovery.go             # 配置发现器
│   ├── balancer/
│   │   ├── jwt_balancer.go          # JWT负载均衡器
│   │   ├── health_checker.go        # 健康检查器
│   │   └── jwt_balancer_test.go     # 测试用例
│   └── jetbrains/
│       └── client.go                # 集成配置系统的客户端
└── examples/
    ├── complete_example.md          # 完整使用示例
    ├── start_with_multiple_jwt.sh   # 多JWT启动脚本
    └── .env.example                 # 环境变量示例
```

## ⚙️ 配置优先级

系统按以下优先级加载和合并配置:

1. **命令行参数** (最高优先级)
2. **环境变量**
3. **配置文件**
4. **默认值** (最低优先级)

## 🔍 配置发现机制

系统会按以下顺序搜索配置文件:

1. `CONFIG_FILE` 环境变量指定的路径
2. 当前目录:`config.json`, `jetbrains-ai-proxy.json`
3. config目录:`config/config.json`, `configs/config.json`
4. 隐藏目录:`.config/config.json`
5. 用户主目录:`$HOME/.config/jetbrains-ai-proxy/config.json`
6. 系统目录:`/etc/jetbrains-ai-proxy/config.json`

如果没有找到配置文件,系统会自动生成示例配置。

## 🚀 使用方式

### 1. 自动配置(推荐)

```bash
# 生成示例配置
./jetbrains-ai-proxy --generate-config

# 编辑配置文件
vim config/config.json

# 启动服务(自动发现配置)
./jetbrains-ai-proxy
```

### 2. 使用启动脚本

```bash
# 智能启动(自动检查配置)
./start.sh

# 生成配置
./start.sh --generate

# 查看配置
./start.sh --config
```

### 3. 指定配置文件

```bash
# 使用特定配置文件
./jetbrains-ai-proxy --config /path/to/config.json

# 或设置环境变量
export CONFIG_FILE=/path/to/config.json
./jetbrains-ai-proxy
```

## 📋 配置文件格式

### JSON配置文件示例

```json
{
  "jetbrains_tokens": [
    {
      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
      "name": "Primary_JWT",
      "description": "Primary JWT token for JetBrains AI",
      "priority": 1,
      "metadata": {
        "environment": "production",
        "region": "us-east-1"
      }
    }
  ],
  "bearer_token": "your_bearer_token_here",
  "load_balance_strategy": "round_robin",
  "health_check_interval": "30s",
  "server_port": 8080,
  "server_host": "0.0.0.0"
}
```

### 环境变量配置

```bash
# JWT Tokens(逗号分隔)
JWT_TOKENS=token1,token2,token3

# Bearer Token
BEARER_TOKEN=your_bearer_token

# 负载均衡策略
LOAD_BALANCE_STRATEGY=round_robin

# 服务器配置
SERVER_HOST=0.0.0.0
SERVER_PORT=8080

# 配置文件路径(可选)
CONFIG_FILE=config/config.json
```

## 🔄 配置热重载

系统支持运行时配置重载,无需重启服务:

### 自动重载

配置文件监控器会自动检测配置文件变化并重新加载。

### 手动重载

```bash
# 通过API端点重载
curl -X POST http://localhost:8080/reload

# 响应
{
  "message": "Configuration reloaded successfully"
}
```

## 🛠️ 管理端点

系统提供了丰富的管理端点:

| 端点 | 方法 | 描述 |
|------|------|------|
| `/health` | GET | 健康检查和负载均衡状态 |
| `/config` | GET | 当前配置信息(隐藏敏感数据) |
| `/stats` | GET | 详细统计信息 |
| `/reload` | POST | 重新加载配置 |

## 🔧 高级功能

### 1. JWT Token元数据

支持为每个JWT token配置元数据:

```json
{
  "token": "jwt_token_here",
  "name": "Production_Primary",
  "description": "Primary production JWT token",
  "priority": 1,
  "metadata": {
    "environment": "production",
    "region": "us-east-1",
    "tier": "primary",
    "max_requests_per_minute": "1000"
  }
}
```

### 2. 配置验证

系统会自动验证配置的有效性:
- JWT token格式检查
- 必需字段验证
- 数值范围检查
- 策略有效性验证

### 3. 配置合并策略

多个配置源的合并规则:
- 数组类型:高优先级完全覆盖低优先级
- 对象类型:递归合并,高优先级字段覆盖低优先级
- 基本类型:高优先级直接覆盖低优先级

## 🚨 故障排除

### 配置问题诊断

```bash
# 查看当前配置
./jetbrains-ai-proxy --print-config

# 验证配置文件
./jetbrains-ai-proxy --config config.json --print-config

# 生成新的示例配置
./jetbrains-ai-proxy --generate-config
```

### 常见问题

1. **配置文件未找到**
   - 检查文件路径和权限
   - 使用 `--generate-config` 生成示例配置

2. **JWT tokens无效**
   - 检查token格式和有效性
   - 查看健康检查日志

3. **配置合并问题**
   - 使用 `--print-config` 查看最终配置
   - 检查配置优先级

## 📈 性能考虑

1. **配置缓存**: 配置在内存中缓存,避免重复读取
2. **并发安全**: 使用读写锁保护配置访问
3. **懒加载**: 配置发现器按需加载配置文件
4. **监控优化**: 配置文件监控使用高效的文件系统事件

## 🔮 未来扩展

系统设计支持以下扩展:
- 远程配置中心集成(如Consul、etcd)
- 配置加密和安全存储
- 配置版本管理和回滚
- 更多负载均衡策略
- 动态配置更新API