指南

MinIO 与自托管 S3 文件管理器:将其连接到 Nubbo

如何将你自己的兼容 S3 的存储(例如 MinIO、Ceph 或 SeaweedFS)连接到 Nubbo:端点、密钥、区域、CORS,以及失败时该怎么办。

Nubbo 可以连接任何使用 Signature V4 签名的兼容 S3 的存储,例如 MinIO、Ceph 或 SeaweedFS,无论是部署在你自己的服务器上还是由其他服务商提供。你只需要端点 URL、一个密钥和区域。本指南按照 Nubbo 向导一步步说明两种方式:自动连接,或使用仅限一个存储桶的密钥。

你将获得什么

  • 像使用网盘一样浏览存储桶:文件夹、视图、搜索、回收站、标签和收藏。
  • 在浏览器和你的服务器之间直接上传和下载文件。文件从不经过 Nubbo 的服务器。
  • 分享文件和文件夹时可设置密码、到期时间和下载次数限制,还能把文件接收到你的存储桶并创建相册。
  • 你的密钥使用 AES-256-GCM 加密保存,你可以随时断开存储桶的连接。

开始之前

你需要一个兼容 S3 的存储和一个 Nubbo 账户。你连接的每个存储桶都计入你的套餐限额:免费套餐允许 2 个,Personal 允许 5 个,Pro 不限。端点必须是一个 Nubbo 服务器和浏览器都能访问的公网 URL,并且需要使用 HTTPS,因为浏览器不会从 https://nubbo.app 加载 HTTP 内容。Nubbo 会拒绝指向私有或本地地址的端点。如果你的服务器没有区域概念,保留 us-east-1 即可。

选择连接方式

Nubbo 向导提供两种方式。两者的结果相同:存储桶已连接,并可从浏览器上传。

自动使用受限密钥
密钥可访问整个账户仅限一个存储桶
存储桶Nubbo 使用你现有的一个,或新建一个你需要先创建
CORSNubbo 为你添加规则你自行添加规则
何时选择最快的方式不想授予整个账户的访问权限时

自动连接

第 1 步:在你的服务器上创建密钥

  1. 确认你的服务器在公网 HTTPS URL 上提供支持 V4 签名的 S3 API,例如 https://s3.your-domain.com。
  2. 创建一个能够创建存储桶并修改其 CORS 的密钥。
  3. 记下端点 URL 和区域。如果你的服务器没有区域概念,使用 us-east-1。

第 2 步:在 Nubbo 中连接存储桶

  1. 在 Nubbo 中打开 存储桶,点击 连接存储桶。选择 自定义 S3 / 自托管,然后点击 继续。

    Nubbo 向导的服务商步骤,已选择自定义 S3 / 自托管 Nubbo 向导的服务商步骤,已选择自定义 S3 / 自托管
  2. 选择 自动,然后点击 继续。

    连接方式步骤,包含自动和使用受限密钥两个选项 连接方式步骤,包含自动和使用受限密钥两个选项
  3. 在 你的密钥 这一步,粘贴访问密钥、私有密钥、端点 URL 和区域。点击 检查密钥。Nubbo 会检查密钥是否可用,以及是否可访问整个账户。

    自定义 S3 / 自托管的你的密钥步骤,包含快速指南和密钥字段 自定义 S3 / 自托管的你的密钥步骤,包含快速指南和密钥字段
  4. 选择你的一个存储桶并点击 使用此存储桶,或选择 新建,输入名称(如有要求,再选择区域),然后点击 创建并准备。Nubbo 会为存储桶添加一条 CORS 规则,只允许从应用上传和下载,并保留存储桶已有的规则。

    你的存储桶步骤,包含存储桶列表和新建选项 你的存储桶步骤,包含存储桶列表和新建选项
  5. 查看三项检查结果,如有需要可修改 在 Nubbo 中的名称,然后点击 完成。存储桶会出现在 存储桶 页面中,你可以在文件浏览器中打开它。

    完成步骤,包含连接、存储桶和 CORS 的检查结果 完成步骤,包含连接、存储桶和 CORS 的检查结果

如果 Nubbo 无法用你的密钥添加 CORS 规则,向导会带你进入 CORS 步骤。此时请按照 添加 CORS 规则 操作。

使用受限密钥连接

第 1 步:在你的服务器上准备存储桶和密钥

  1. 在你的服务器上创建存储桶(例如在 MinIO 上使用 mc mb)。
  2. 创建一个对该存储桶拥有读写权限的密钥。
  3. 记下端点 URL 和区域。

第 2 步:在 Nubbo 中连接存储桶

  1. 在 存储桶 页面中点击 连接存储桶,选择 自定义 S3 / 自托管,然后选择 使用受限密钥。
  2. 粘贴访问密钥、私有密钥、端点和区域。点击 检查密钥。
  3. 输入准确的存储桶名称,然后点击 检查访问权限。
  4. 向导会进入 CORS 步骤,并显示你需要添加的规则。

添加 CORS 规则

CORS 规则让浏览器可以在 https://nubbo.app 上从你的存储桶上传和下载文件。它与向导在 CORS 步骤中显示的规则相同。

CORS 的配置方式取决于所用软件:

  • MinIO(社区版) 不支持按存储桶设置 CORS:它使用一个全局设置(MINIO_API_CORS_ALLOW_ORIGIN),默认允许任何来源。如果你没有修改过它,就无需任何操作:点击 已添加,检查,检查就会通过。如果你修改过,请加入 https://nubbo.app。
  • Ceph 和 SeaweedFS 支持通过 S3 API 按存储桶设置 CORS。用你常用的工具应用此规则(例如针对你的端点使用 aws s3api put-bucket-cors),或在自动方式下交给 Nubbo 完成。
[
  {
    "AllowedHeaders": ["*"],
    "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
    "AllowedOrigins": ["https://nubbo.app"],
    "ExposeHeaders": ["ETag"],
    "MaxAgeSeconds": 3600
  }
]
CORS 步骤,显示要添加到存储桶的规则 CORS 步骤,显示要添加到存储桶的规则

规则就绪后,回到 Nubbo 并点击 已添加,检查。在 Ceph 和 SeaweedFS 上,如果你的密钥可以修改 CORS,尝试帮我配置 会替你完成。

如果出现问题

Nubbo 中的提示怎么办
“凭据无效。请检查访问密钥和私有访问密钥。”重新复制两个密钥,开头和结尾不要有空格。
“此密钥似乎仅限一个存储桶。你可以继续使用受限方式,或创建一个拥有完全访问权限的密钥。”点击继续使用受限密钥,或创建一个可访问整个账户的密钥,然后点击换一个密钥。
“未找到存储桶。请核对名称和区域。”核对准确的存储桶名称,并确认所选区域就是存储桶所在的区域。
“你的密钥没有创建存储桶的权限。”使用拥有完全访问权限的密钥,或在控制台中创建存储桶后点击我已在控制台中创建。
“该名称在此服务商处已被使用;请换一个。”存储桶名称在整个服务商范围内唯一:请换一个。
“你的密钥没有配置它的权限。”按上文所述手动添加 CORS 规则。
“仍未生效。请检查规则后再试一次;部分服务商需要约一分钟才能应用。”确认来源正好是 https://nubbo.app,末尾没有斜杠,等待一分钟后再检查。
“此存储桶已在使用中。”该存储桶已在 Nubbo 中连接,可能在你的账户中,也可能在其他账户中。
“无法连接到 S3 端点。请核对端点 URL。”确认该 URL 是公网地址、使用 HTTPS,并且可以从互联网访问,而不仅仅是从你的网络内访问。
“端点 URL 无效。请检查格式。”输入以 https:// 开头的完整 URL,不要包含存储桶名称。当 URL 指向私有或本地地址,或者域名无法解析时,也会出现此提示。
“连接超时。请重试。”检查服务器防火墙,并确认端口可以从外部访问。

费用

如果你在权衡自建存储和服务商,可以在 S3、R2、Spaces、Wasabi 与 Backblaze B2 对比 中比较价格和限制。

常见问题

哪些自托管存储可以与 Nubbo 配合使用?

任何兼容 S3 API 且支持 V4 签名的存储,例如 MinIO、Ceph 或 SeaweedFS,也包括不在列表中的兼容 S3 的服务商。

可以连接局域网中的 MinIO 吗?

不可以。端点必须是公网 URL:Nubbo 会拒绝私有和本地地址,而且浏览器也需要能访问它。

如果我的服务器没有区域概念,应该用哪个区域?

us-east-1。它是大多数兼容 S3 的服务器的默认区域。

为什么 Nubbo 无法在 MinIO 上设置 CORS?

因为 MinIO 社区版不支持按存储桶设置 CORS。它使用一个默认允许任何来源的全局设置,Nubbo 会对其进行检查。

来源

价格和限制来自以下官方页面。服务商可能会调整,请在做决定前核实。