Nebula Storage 配置说明
1. 配置总览
nebula-storage 的配置来源主要分成两类:
- 静态 Spring Boot 配置项:以
nebula.storage.*为主 - 缓存与基础设施协作配置:主要是
nebula.cache.*与底层 provider 依赖项
理解这两类配置的边界很重要:
nebula.storage.*决定存储模块如何运行nebula.cache.*主要影响签名下载计数等协作能力
说明:当前仓库内可直接确认的 storage 配置示例主要来自
nebula-storage/README.md与使用文档中的已整理示例;仓库中未直接提供独立nebula-storage-service/src/main/resources/application.yml供逐项核对,因此本文以当前可见配置契约和 README 示例为准。
2. nebula.storage.* 核心配置
基础示例:
nebula:
storage:
mode: local
temp-dir: /data/nebula/storage/temp
signed-download:
enabled: true
secret: change-me-storage-signed-secret
default-expire-seconds: 300
max-expire-seconds: 1800
default-max-download-count: 3
max-download-count-limit: 10
content:
type: minio
filesystem:
base-dir: /data/nebula/storage/content
minio:
endpoint: http://127.0.0.1:9000
access-key: minioadmin
secret-key: minioadmin
bucket: nebula-storage
create-bucket-if-missing: true
2.1 nebula.storage.mode
可选值:
localremote
作用:
local:启用本地控制器与本地 service 实现remote:当前应用作为 storage 服务消费者,通过 remote 层转调
2.2 nebula.storage.temp-dir
作用:
- 存普通上传临时文件
- 存分片文件
- 存分片合并结果
说明:
- temp 区固定走本地文件系统目录
- bind 成功后会通过事件和定时任务清理
- 不适合当长期存储区使用
2.3 nebula.storage.content.type
可选值:
filesystemdbminio
作用:
- 决定正式文件内容区如何保存,而不是业务元数据表落在哪里
2.4 nebula.storage.content.filesystem.base-dir
作用:
- 当
content.type=filesystem时,指定正式文件内容的本地目录根路径
2.5 nebula.storage.content.minio.*
常见配置包括:
endpointaccess-keysecret-keybucketcreate-bucket-if-missing
作用:
- 当
content.type=minio时,指定 MinIO 连接与桶配置
2.6 nebula.storage.signed-download.*
关键参数:
enabledsecretdefault-expire-secondsmax-expire-secondsdefault-max-download-countmax-download-count-limit
作用:
- 控制签名下载是否启用
- 控制签名有效期与最大下载次数上限
建议:
secret使用独立高强度随机值- 不要把有效期设置过长
- 对对外分享场景可增加下载次数限制
3. provider 配置边界
3.1 temp 与 content 的职责分离
当前配置模型里最关键的一点是:
temp:上传过程中的临时文件与分片content:绑定成功后的正式文件内容
这意味着:
- 上传过程中的中间态强调简单、稳定、低延迟
- 正式内容区强调长期保存和 provider 可切换
3.2 filesystem
建议用于:
- 本地开发
- 单机测试
- 小规模环境
3.3 db
建议用于:
- 不方便接对象存储的环境
- 文件量不大、集中数据库治理的场景
3.4 minio
建议用于:
- 生产环境
- 多节点部署
- 较大附件规模
4. cache 协作配置
在 README 和使用说明中,storage 还与缓存配置协作:
nebula:
cache:
type: caffeine
default-ttl: 300
作用:
- 为签名下载计数与相关缓存协作能力提供统一缓存后端
建议:
- 多实例场景下,明确配置统一缓存后端,避免下载次数统计只停留在单节点内存中
5. 本地模式与远程模式配置建议
5.1 单体 / 本地模式
示例:
nebula:
storage:
mode: local
适用场景:
- 单体后台
- 文件能力直接随主应用运行
5.2 远程模式
示例:
nebula:
storage:
mode: remote
remote:
service-name: nebula-storage-service
service-url: http://localhost:17783
适用场景:
- 多业务系统共享统一附件中心
- 文件上传下载能力需要集中治理
6. 配置治理建议
6.1 临时区不要当正式内容区使用
因为:
- temp 区会被异步事件和定时任务清理
- 它只服务上传过程中的中间态文件
6.2 生产环境优先评估 minio
因为:
- 更适合正式文件内容存储
- 可扩展性和多节点共享能力更好
6.3 签名下载 secret 必须独立管理
因为:
- 它直接决定分享链接的安全性
- 不应沿用低强度默认值或和其他模块共用密钥
6.4 下载次数限制依赖统一缓存后端
如果你启用了 maxDownloadCount 一类限制:
- 单机环境可先用本地缓存
- 多实例环境建议使用统一缓存后端
这样才能避免不同实例之间的计数不一致。