Files
user-system/docs/guides/CONFIG_REFERENCE.md

332 lines
11 KiB
Markdown
Raw Normal View History

# 配置参考手册
本文档描述 `configs/config.yaml` 各配置项的含义、默认值和生产环境建议。
---
## 1. server — 服务配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `port` | int | 8080 | HTTP 服务监听端口 |
| `mode` | string | release | 运行模式:`debug` / `release` |
| `read_timeout` | duration | 30s | 读取请求体的超时 |
| `read_header_timeout` | duration | 10s | 读取请求头的超时 |
| `write_timeout` | duration | 30s | 写入响应的超时 |
| `idle_timeout` | duration | 60s | 空闲连接保持时间 |
| `shutdown_timeout` | duration | 15s | 优雅停机的最大等待时间 |
| `max_header_bytes` | int | 1048576 | 请求头最大字节数 |
**生产建议**:若前端 CDN 缓存较多,可将 `cache-control` 等头设置较长,减少回源。
---
## 2. database — 数据库配置
### 2.1 通用
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `type` | string | sqlite | 数据库类型:`sqlite` / `postgresql` / `mysql` |
> ⚠️ 当前生产环境推荐使用 `postgresql`SQLite 仅适用于开发和小规模部署。
### 2.2 SQLite
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `path` | string | ./data/user_management.db | 数据库文件路径(相对于工作目录) |
### 2.3 PostgreSQL
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `host` | string | localhost | 数据库主机 |
| `port` | int | 5432 | 数据库端口 |
| `database` | string | user_management | 数据库名 |
| `username` | string | postgres | 用户名 |
| `password` | string | "" | 密码(生产必须通过环境变量设置) |
| `ssl_mode` | string | disable | SSL 模式:`disable` / `require` / `verify-ca` / `verify-full` |
| `max_open_conns` | int | 100 | 最大打开连接数 |
| `max_idle_conns` | int | 10 | 最大空闲连接数 |
**生产建议**
- `ssl_mode` 至少设为 `require`
- 生产密码必须通过 `DB_PASSWORD` 环境变量注入,不要写在配置文件中
- 高并发场景建议 `max_open_conns = 200~500`
### 2.4 MySQL
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `host` | string | localhost | 数据库主机 |
| `port` | int | 3306 | 数据库端口 |
| `database` | string | user_management | 数据库名 |
| `username` | string | root | 用户名 |
| `password` | string | "" | 密码(生产必须通过环境变量) |
| `charset` | string | utf8mb4 | 字符集(必须使用 utf8mb4 |
| `max_open_conns` | int | 100 | 最大打开连接数 |
| `max_idle_conns` | int | 10 | 最大空闲连接数 |
---
## 3. cache — 缓存配置
### 3.1 L1 缓存(内存)
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | true | 是否启用 L1 缓存 |
| `max_size` | int | 10000 | 最大缓存条目数 |
| `ttl` | duration | 5m | 缓存条目 TTL |
### 3.2 L2 缓存Redis
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | false | 是否启用 Redis L2 缓存 |
| `type` | string | redis | 缓存类型(仅支持 redis |
| `redis.addr` | string | localhost:6379 | Redis 地址 |
| `redis.password` | string | "" | Redis 密码 |
| `redis.db` | int | 0 | Redis DB 编号 |
| `redis.pool_size` | int | 50 | 连接池大小 |
| `redis.ttl` | duration | 30m | 缓存 TTL |
**生产建议**:高并发场景建议启用 Redis L2 缓存,并设置合理的 `pool_size`
---
## 4. jwt — JWT 配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `algorithm` | string | HS256 | 签名算法:`HS256`debug/ `RS256`(生产推荐) |
| `secret` | string | "" | HMAC 签名密钥(生产必须设置) |
| `access_token_expire_minutes` | int | 120 | Access Token 有效期(分钟) |
| `refresh_token_expire_days` | int | 7 | Refresh Token 有效期(天) |
**生产建议**
- 生产环境建议使用 `RS256`RSA 密钥对),不要使用共享密钥
- `JWT_SECRET` 环境变量必须设置强随机字符串(至少 32 字节)
- Access Token 建议 30~120 分钟
- Refresh Token 建议 7~30 天
---
## 5. security — 安全配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `password_min_length` | int | 8 | 密码最小长度 |
| `password_require_special` | bool | true | 必须包含特殊字符 |
| `password_require_number` | bool | true | 必须包含数字 |
| `login_max_attempts` | int | 5 | 连续登录失败锁定次数 |
| `login_lock_duration` | duration | 30m | 账户锁定时长 |
---
## 6. ratelimit — 限流配置
所有限流均可独立开启/关闭。算法说明:
- `token_bucket`:令牌桶,适合突发流量
- `leaky_bucket`:漏桶,输出速率恒定
- `sliding_window`:滑动窗口,统计最平滑
### 6.1 登录限流
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | true | 是否启用 |
| `algorithm` | string | token_bucket | 限流算法 |
| `capacity` | int | 5 | 令牌桶容量(即 burst 上限) |
| `rate` | int | 1 | 每窗口补充令牌数 |
| `window` | duration | 1m | 统计窗口 |
### 6.2 注册限流
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | true | 是否启用 |
| `algorithm` | string | leaky_bucket | 限流算法 |
| `capacity` | int | 3 | 桶容量 |
| `rate` | int | 1 | 输出速率 |
| `window` | duration | 1h | 统计窗口 |
### 6.3 API 通用限流
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | true | 是否启用 |
| `algorithm` | string | sliding_window | 限流算法 |
| `capacity` | int | 1000 | 窗口内最大请求数 |
| `window` | duration | 1m | 统计窗口 |
---
## 7. monitoring — 监控配置
### 7.1 Prometheus 指标
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | true | 是否启用 Prometheus 指标 |
| `path` | string | /metrics | 指标暴露路径 |
### 7.2 分布式追踪
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | false | 是否启用追踪 |
| `endpoint` | string | localhost:4318 | OTLP gRPC 接收端点 |
| `service_name` | string | user-management-system | 服务名(用于链路关联) |
**生产建议**:接入 Jaeger 或 Zipkin 时启用追踪。
---
## 8. logging — 日志配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `level` | string | info | 日志级别:`debug` / `info` / `warn` / `error` |
| `format` | string | json | 日志格式:`json`(生产)/ `text`(开发) |
| `output` | []string | stdout, ./logs/app.log | 日志输出目标 |
| `rotation.max_size` | int | 100 | 单文件最大 MB |
| `rotation.max_age` | int | 30 | 保留天数 |
| `rotation.max_backups` | int | 10 | 保留文件数 |
---
## 9. cors — 跨域配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | true | 是否启用 CORS |
| `allowed_origins` | []string | localhost:3000 | 允许的来源(生产必须精确配置) |
| `allowed_methods` | []string | GET,POST,PUT,DELETE,OPTIONS | 允许的方法 |
| `allowed_headers` | []string | 见 config.yaml | 允许的请求头 |
| `allow_credentials` | bool | true | 是否允许携带凭证 |
| `max_age` | int | 3600 | 预检请求缓存时间(秒) |
> ⚠️ **生产禁止**将 `*` 与 `allow_credentials: true` 同时使用CORS 规范不允许,会被浏览器拒绝)。
---
## 10. email — 邮件配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `host` | string | "" | SMTP 主机 |
| `port` | int | 587 | SMTP 端口TLS587SSL465 |
| `username` | string | "" | 用户名 |
| `password` | string | "" | 密码(生产通过环境变量) |
| `from_email` | string | "" | 发件人地址 |
| `from_name` | string | 用户管理系统 | 发件人名称 |
**生产建议**:使用企业邮箱(如 SendGrid、Mailgun或自建 SMTP。
---
## 11. sms — 短信配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | false | 是否启用短信功能 |
| `provider` | string | "" | 提供商:`aliyun` / `tencent`,留空禁用 |
| `code_ttl` | duration | 5m | 验证码有效期 |
| `resend_cooldown` | duration | 1m | 再次发送的冷却时间 |
| `max_daily_limit` | int | 10 | 单号码每日发送上限 |
### 11.1 阿里云
| 配置项 | 说明 |
|--------|------|
| `access_key_id` | 阿里云 AccessKey ID |
| `access_key_secret` | 阿里云 AccessKey Secret |
| `sign_name` | 短信签名 |
| `template_code` | 短信模板 CODE |
### 11.2 腾讯云
| 配置项 | 说明 |
|--------|------|
| `secret_id` | 腾讯云 Secret ID |
| `secret_key` | 腾讯云 Secret Key |
| `app_id` | 短信 SDK App ID |
| `sign_name` | 短信签名 |
| `template_id` | 模板 ID |
---
## 12. oauth — 社交登录配置
| Provider | 配置项 | 说明 |
|----------|--------|------|
| 通用 | `client_id` | 应用 Client ID |
| 通用 | `client_secret` | 应用 Client Secret生产通过环境变量 |
| 通用 | `redirect_url` | OAuth 回调地址(生产必须使用 HTTPS |
| Google | — | 支持 Google 账号登录 |
| GitHub | — | 支持 GitHub 账号登录 |
| WeChat | — | 支持微信账号登录 |
| QQ | — | 支持 QQ 账号登录 |
| 支付宝 | — | 支持支付宝账号登录 |
| 抖音 | — | 支持抖音账号登录 |
> ⚠️ 所有 OAuth 回调地址必须使用 HTTPS禁止在生产环境使用 HTTP。
---
## 13. webhook — Webhook 配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `enabled` | bool | true | 是否启用 Webhook |
| `secret_header` | string | X-Webhook-Signature | 签名验证 Header 名 |
| `timeout_sec` | int | 30 | 单次投递超时(秒) |
| `max_retries` | int | 3 | 最大重试次数 |
| `retry_backoff` | string | exponential | 退避策略:`exponential` / `fixed` |
| `worker_count` | int | 4 | 后台投递协程数 |
| `queue_size` | int | 1000 | 投递队列大小 |
---
## 14. ip_security — IP 安全配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `auto_block_enabled` | bool | true | 是否启用自动封禁 |
| `auto_block_duration` | duration | 30m | 封禁时长 |
| `brute_force_threshold` | int | 10 | 暴力破解判定阈值(窗口内失败次数) |
| `detection_window` | duration | 15m | 检测时间窗口 |
---
## 15. password_reset — 密码重置配置
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `token_ttl` | duration | 15m | 重置令牌有效期 |
| `site_url` | string | http://localhost:8080 | 前端站点 URL用于构造邮件链接 |
---
## 环境变量优先级
配置项中包含敏感信息的字段,支持通过环境变量覆盖:
| 配置项 | 环境变量 |
|--------|----------|
| `jwt.secret` | `JWT_SECRET` |
| `database.postgresql.password` | `DB_PASSWORD` |
| `database.mysql.password` | `DB_PASSWORD` |
| `redis.password` | `REDIS_PASSWORD` |
| `email.password` | `SMTP_PASSWORD` |
| `jwt.algorithm`(生产) | `JWT_ALGORITHM` |
| `oauth.*.client_secret` | 各 Provider 的 `CLIENT_SECRET` |
> 环境变量优先级高于配置文件,用于生产密钥注入。
---
*最后更新2026-05-10*