docs: add s3 storage plan and config example
This commit is contained in:
@@ -251,3 +251,28 @@ Env = "dev"
|
||||
# 指标(毫秒,可选)
|
||||
# MetricReaderIntervalMs = 10000 # 指标导出周期
|
||||
# RuntimeReadMemStatsIntervalMs = 5000 # 运行时指标采集最小周期
|
||||
|
||||
# =========================
|
||||
# 存储配置 (providers/storage)
|
||||
# =========================
|
||||
[Storage]
|
||||
# 存储类型:local | s3
|
||||
Type = "s3"
|
||||
# AccessKey(S3/MinIO)
|
||||
AccessKey = "your-access-key"
|
||||
# SecretKey(S3/MinIO)
|
||||
SecretKey = "your-secret-key"
|
||||
# Region(S3/MinIO)
|
||||
Region = "ap-southeast-1"
|
||||
# Bucket(S3/MinIO)
|
||||
Bucket = "quyun-assets"
|
||||
# Endpoint(S3/MinIO,AWS 示例:https://s3.amazonaws.com)
|
||||
Endpoint = "https://s3.amazonaws.com"
|
||||
# PathStyle(S3/MinIO,MinIO 通常为 true)
|
||||
PathStyle = false
|
||||
# 本地存储路径(local 使用)
|
||||
LocalPath = "./storage"
|
||||
# 签名密钥(local 使用)
|
||||
Secret = "your-storage-secret"
|
||||
# 公共访问URL前缀(local 使用)
|
||||
BaseURL = "http://localhost:8080/t/<tenantCode>/v1/storage"
|
||||
|
||||
91
docs/storage_provider_plan.md
Normal file
91
docs/storage_provider_plan.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# 真实存储 Provider 接入(生产)(先规划,后执行)
|
||||
|
||||
## 1. 一句话说明
|
||||
|
||||
- 上线环境用真实对象存储(优先 S3 兼容),开发/测试仍可用本地 FS 或 MinIO。
|
||||
|
||||
## 2. 要做什么 / 不做什么
|
||||
|
||||
- 要做:
|
||||
- 生产环境能正常上传、访问、删除文件。
|
||||
- 不影响现有本地/MinIO 的开发体验。
|
||||
- 不做:
|
||||
- 不在本次做支付集成。
|
||||
- 不改现有上传业务流程,仅替换存储后端。
|
||||
|
||||
## 3. 当前现状
|
||||
|
||||
- 已支持 `local` 与 `s3`(MinIO/AWS S3 兼容)两种类型:`backend/providers/storage`。
|
||||
- 本地存储走自签名 URL;S3 走预签名 URL(MinIO SDK)。
|
||||
- 文档已覆盖 MinIO 及本地配置:`docs/storage_provider.md`、`docs/storage_minio_smoke_test.md`。
|
||||
|
||||
## 4. 方案选择(最重要)
|
||||
|
||||
- **如果生产是 S3 兼容**(AWS S3 / MinIO / 兼容网关):
|
||||
- 直接用现有 `Type = "s3"`,只需要补齐配置。
|
||||
- **如果生产是非 S3 兼容**(OSS/COS/OBS 专有签名):
|
||||
- 需要新增 Provider 类型(如 `oss`/`cos`),并实现:
|
||||
- 生成签名 URL
|
||||
- 上传/删除逻辑
|
||||
- 保持现有 `Storage` 结构清晰,避免堆分支。
|
||||
|
||||
> 已确认:生产存储为 **S3 兼容**,无需新增 Provider 类型。
|
||||
|
||||
## 5. 必要配置(生产需要明确的信息)
|
||||
|
||||
- 需要确认的配置项:
|
||||
- `Type`:`s3` 或新 Provider 类型。
|
||||
- `Endpoint`:如 `https://s3.amazonaws.com` 或自建网关地址。
|
||||
- `AccessKey` / `SecretKey`
|
||||
- `Bucket`
|
||||
- `Region`
|
||||
- `PathStyle`:是否使用路径风格(MinIO 通常需要 `true`)。
|
||||
- `BaseURL`:仅 `local` 使用。
|
||||
- 约束:
|
||||
- `Endpoint`、`Bucket` 不能为空。
|
||||
- 签名 URL 需有过期时间(建议 15 分钟)。
|
||||
|
||||
## 6. 配置示例
|
||||
|
||||
### 6.1 S3 兼容
|
||||
|
||||
```toml
|
||||
[Storage]
|
||||
Type = "s3"
|
||||
AccessKey = "xxx"
|
||||
SecretKey = "yyy"
|
||||
Region = "ap-southeast-1"
|
||||
Bucket = "quyun-assets"
|
||||
Endpoint = "https://s3.amazonaws.com"
|
||||
PathStyle = false
|
||||
```
|
||||
|
||||
### 6.2 本地(保持不变)
|
||||
|
||||
```toml
|
||||
[Storage]
|
||||
Type = "local"
|
||||
LocalPath = "./storage"
|
||||
Secret = "your-storage-secret"
|
||||
BaseURL = "http://localhost:8080/t/<tenantCode>/v1/storage"
|
||||
```
|
||||
|
||||
## 7. 实施步骤(更清晰)
|
||||
|
||||
1) 确认生产 Provider 类型(已完成:S3 兼容)。
|
||||
2) 填好生产配置(已完成:补齐 `config.full.toml` 示例)。
|
||||
3) 若是 S3 兼容:无需改代码,只做连通性检查。
|
||||
4) 若是非 S3:新增 Provider 类型并实现签名/上传/删除。
|
||||
5) 回归上传链路:上传 → 回调 → 访问 URL → 删除。
|
||||
|
||||
## 8. 测试清单(按顺序)
|
||||
|
||||
- `SignURL` 输出正确(含过期参数)。
|
||||
- 上传成功,访问 URL 正常(HTTP 200)。
|
||||
- 删除成功,访问返回 404 或拒绝。
|
||||
- URL 过期后访问失败。
|
||||
|
||||
## 9. 风险与回滚
|
||||
|
||||
- 风险:生产 Provider 非 S3 兼容,签名不一致导致上传失败。
|
||||
- 回滚:切换回 `local` 或 `s3`(MinIO)配置即可恢复服务。
|
||||
Reference in New Issue
Block a user