Files
quyun-v2/docs/storage_provider_plan.md
2026-01-17 22:16:52 +08:00

92 lines
2.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 真实存储 Provider 接入(生产)(先规划,后执行)
## 1. 一句话说明
- 上线环境用真实对象存储(优先 S3 兼容),开发/测试仍可用本地 FS 或 MinIO。
## 2. 要做什么 / 不做什么
- 要做:
- 生产环境能正常上传、访问、删除文件。
- 不影响现有本地/MinIO 的开发体验。
- 不做:
- 不在本次做支付集成。
- 不改现有上传业务流程,仅替换存储后端。
## 3. 当前现状
- 已支持 `local``s3`MinIO/AWS S3 兼容)两种类型:`backend/providers/storage`
- 本地存储走自签名 URLS3 走预签名 URLMinIO 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 兼容:已增加 `CheckOnBoot` 开关,连通性检查可在具备凭证后执行。
4) 若是非 S3新增 Provider 类型并实现签名/上传/删除。
5) 回归上传链路:上传 → 回调 → 访问 URL → 删除。
## 8. 测试清单(按顺序)
- `SignURL` 输出正确(含过期参数)。
- 上传成功,访问 URL 正常HTTP 200
- 删除成功,访问返回 404 或拒绝。
- URL 过期后访问失败。
## 9. 风险与回滚
- 风险:生产 Provider 非 S3 兼容,签名不一致导致上传失败。
- 回滚:切换回 `local``s3`MinIO配置即可恢复服务。