原标题:S3存储1panel配置对象存储RUSTFS及版本管理
快速查看:下载地址
https://域名或IP:9000/桶名/文件名
配置对象存储 RUSTFS 教程文档
通过1panel来配置 RUSTFS 对象存储服务,并通过域名反代实现可访问的 OSS 服务与管理面板。
一、准备工作
在开始之前,你需要准备:
- 2 个二级域名
oss.xxx.com(用于对象存储服务,对应 9000 端口)panel.xxx.com(用于管理控制台,对应 9001 端口)
- 一台已安装 1Panel 的服务器
- 已安装 Nginx Proxy Manager(NPM)
- 已开放服务器防火墙端口(或仅走反代)
二、域名与端口规划
| 用途 | 域名 | 端口 | 说明 |
|---|---|---|---|
| 对象存储 OSS | oss.xxx.com | 9000 | 文件上传与访问 |
| 管理控制台 | panel.xxx.com | 9001 | Web 管理后台 |
三、Nginx Proxy Manager 反向代理配置
1. OSS 服务(9000)
- 域名:
oss.xxx.com - 转发地址:
http://127.0.0.1:9000 #注意,如果是docker配置,需要填docker的内网地址 - 协议:HTTP
- SSL:建议开启(Let’s Encrypt)
2. 管理面板(9001)
- 域名:
panel.xxx.com - 转发地址:
http://127.0.0.1:9001 - 必须开启 WebSocket 支持
- 协议:HTTP + WebSocket Upgrade
- SSL:建议开启
⚠️ 注意:9001 控制台依赖 WebSocket,否则登录或页面可能异常。
四、安装 RUSTFS(通过 1Panel)
- 打开 1Panel 面板
- 进入「应用商店」
- 搜索并安装:RUSTFS
- 在安装配置中注意:
- 开启外部访问
- 记录环境变量中的账号密码(控制台登录用)
五、首次登录控制台
访问:
http://panel.xxx.com
使用 1Panel 环境变量中提供的:
- 管理员账号
- 管理员密码
登录后进入 RUSTFS 控制台。
六、创建用户
在控制台中:
- 进入「用户管理」
- 创建新用户
- 分配权限(建议:
- 可上传
- 可管理 bucket
- 不给予系统权限)
创建完成后,可使用该用户登录或用于 API 上传。
七、创建存储桶(Bucket)
在控制台:
- 进入「Bucket 管理」
- 点击「创建 Bucket」
- 输入 Bucket 名称,例如:
imagesuploadsmedia
八、上传文件
方式包括:
- 控制台手动上传
- API / SDK 上传
- 第三方工具(如 S3 客户端)
上传完成后文件即可通过公网访问。
九、文件访问方式(重点)
RUSTFS 文件访问地址格式如下:
https://oss.xxx.com/桶名/文件名
示例:
https://oss.xxx.com/images/avatar.png
十、整体架构总结
9000→ OSS 文件服务(对外访问)9001→ 管理控制台(内部管理)- NPM → 统一反代 + HTTPS
- RUSTFS → 提供 S3 兼容对象存储能力
- 1Panel → 快速部署与管理环境
对象存储RustFS的版本管理
RustFS 的版本管理可以简要理解为:“同一个文件名 + 多个不可变版本对象 + 删除标记机制”
不是 Git 那种分支式版本控制,而是对象存储的追加式历史记录系统。
开启版本控制后,同一个文件不会被覆盖,而是每次上传都会生成一个新的版本(versionId),旧版本会被保留。
删除文件时也不会真正删除数据,只是加一个“删除标记”,历史版本仍然可恢复,只有删除指定版本才会彻底释放空间。
未开启版本控制时则是传统模式:同名文件直接覆盖,删除即真实删除,没有历史记录。
1)是否有“文件版本”?
有,但前提是你开启 Bucket Versioning(桶版本控制)
开启后同一个对象(例如 a.png):
- 每次上传同名文件
- 不会覆盖旧文件
- 会生成多个“版本对象”
2)它内部是怎么存的?
在开启版本控制后,RustFS 会把同一个 key 拆成:
- Object Key(文件名路径)
- Version ID(版本号标识)
例如:
a.png
├── v1 → 原始上传
├── v2 → 第二次覆盖上传
├── v3 → 第三次上传
底层实际是类似:
bucket/a.png?versionId=xxx1
bucket/a.png?versionId=xxx2
bucket/a.png?versionId=xxx3
每个版本都是独立对象,只是逻辑上“归属同一个 key”。
3)删除文件并不会真的删除(关键点)
开启版本控制后:
删除行为变成:
- 普通 delete → 只是加一个 Delete Marker(删除标记)
- 历史版本仍然存在
也就是说:
删除 ≠ 真删除
只是“当前版本不可见”
你仍然可以:
- 恢复旧版本
- 或删除指定 versionId 才算真正释放空间
4)没有开启版本控制时
行为就很简单:
- 同名文件上传 → 直接覆盖
- 没有历史记录
- delete = 真实删除
5)版本管理能力通常包括
RustFS 这类 S3 系对象存储一般支持:
✔ 查看版本列表
可以看到一个对象所有历史版本
✔ 指定版本下载
下载某个 versionId 的文件
✔ 恢复旧版本
把旧版本“复制回当前版本”
✔ 生命周期策略(Lifecycle)
比如:
- 保留最近 5 个版本
- 30 天前版本自动删除
如果这篇文章对你有帮助,点个赞吧。


