原标题: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)

  1. 打开 1Panel 面板
  2. 进入「应用商店」
  3. 搜索并安装:RUSTFS
  4. 在安装配置中注意:
  • 开启外部访问
  • 记录环境变量中的账号密码(控制台登录用)

五、首次登录控制台

访问:

http://panel.xxx.com

使用 1Panel 环境变量中提供的:

  • 管理员账号
  • 管理员密码

登录后进入 RUSTFS 控制台。


六、创建用户

在控制台中:

  1. 进入「用户管理」
  2. 创建新用户
  3. 分配权限(建议:
    • 可上传
    • 可管理 bucket
    • 不给予系统权限)

创建完成后,可使用该用户登录或用于 API 上传。


七、创建存储桶(Bucket)

在控制台:

  1. 进入「Bucket 管理」
  2. 点击「创建 Bucket」
  3. 输入 Bucket 名称,例如:
    • images
    • uploads
    • media

八、上传文件

方式包括:

  • 控制台手动上传
  • 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 天前版本自动删除