Tutorial 3 分钟阅读

Cloudflare R2 实战指南:配置免费10G存储和免费流量的对象存储与 S3兼容 API Key

在现代全栈开发(Vibe Coding)的技术栈中,虽然 Supabase 自带了 Storage 功能、Vercel 也有免费的 Blob 额度,但许多开发者(包括 HiCyou)还是会更倾向于使用 Cloudflare R2 作为SaaS项目的存储方案。

因为 R2 完美兼容 S3 协议,而且最重要的是:它不收出口流量费(Zero Egress Fee)。这意味着无论用户从你的应用下载多少次图片或文件,你都不用担心收到天价账单(不过对于请求还是有收费的,不过费用是非常少的),这对于 SaaS 项目的扩展性至关重要。

对于早起创始阶段的独立开发者来说,10G的免费存储额度,免费流量,宽裕的免费请求额度,非常利好早期零成本项目启动。

在这篇文章中,我将手把手带你完成:

  1. 创建 R2 存储桶 (Bucket)
  2. 生成兼容 S3 的 API 密钥 (API Keys)
  3. 配置自定义域名访问

第一步:创建你的 R2 Bucket

在开始之前,确保你已经拥有 Cloudflare 账号。

  1. 登录 Cloudflare Dashboard
  2. 在侧边栏找到并点击 R2
    • 注意:如果你是第一次使用 R2,系统可能会要求你添加支付方式。R2 提供非常慷慨的免费额度(每月 10GB 存储 + 数百万次请求),但激活服务通常需要绑定信用卡或Paypal。
  3. 点击 “Create bucket” (创建存储桶) 按钮。

配置存储桶

  • Bucket Name (名称): 输入一个唯一的名称(例如 hicyou-assetsmy-saas-uploads)。
    • 提示:只能使用小写字母和短横线。
  • Location (位置): 保持默认的 Automatic 即可。Cloudflare 强大的全球网络会自动处理节点优化。
  • 点击 “Create Bucket”

现在你已经拥有了一个R2的Buckeet了,但它目前是私有的,你的代码和用户都还无法访问它。


第二步:生成 API Keys (S3 凭证)

为了让你的应用(Node.js, Python, Go 等)能够上传文件,你需要获取凭证。由于 R2 兼容 S3 标准,所以我们需要 Access Key IDSecret Access Key

重要提示: 不要去刚刚创建的 Bucket 内部找这些设置,它们位于 R2 的全局控制台中。

  1. 回到 R2 Overview (总览) 页面。
  2. 在右侧边栏,找到 “Account Details” 下面的 {}Manage 按钮并点击。
  3. 点击 “Create User API Token” (创建用户级API 令牌)

Token权限向导

为了确保你的应用能正常读写,请按照以下配置:

  • Token Name: 起个有描述性的名字(例如 Production App Read/Write)。
  • Permissions (权限): 选择 Object Read & Write (对象读写)
    • 安全提示: 给应用程序用的 Key,尽量避免选 “Admin” 权限,”Object Read & Write” 更安全。
  • Specific Bucket(s): 选择 “Apply to specific buckets only”,然后勾选你刚才创建的 Bucket(例如 hicyou-assets)。
  • TTL (有效期): 选择 “Forever” (永久)(除非你有特定的密钥轮换策略)。

点击 “Create User API Token”

⚠️ 注意: 立即保存你的 AK!

Cloudflare 只会显示一次 Secret Key。如果你关掉页面,就再也看不到了。

请将以下信息复制并保存到你的 .env 文件或密码管理器中:

  1. Access Key ID: (例如 f82b...)
  2. Secret Access Key: (例如 8d9a... – 比较长的那一串)
  3. Endpoint: 这是你的 S3 连接地址。
    • 格式通常是:https://<ACCOUNT_ID>.r2.cloudflarestorage.com

开发者提示: 在配置 S3 客户端(如 AWS SDK 或 MinIO)时,填写的 Endpoint 通常不需要带上 bucket 名称。客户端会在请求时自动将 bucket 名称拼接到 URL 中。


第三步:开启公开访问 (自定义域名)

默认情况下,R2 里的文件是私有的。如果你想让用户通过浏览器查看图片(比如头像、博客封面),你需要开启公开访问。

最佳实践:使用自定义域名

不要在生产环境使用 Cloudflare 提供的 r2.dev 子域名(它有严格的速率限制)。建议绑定你自己的域名。

  1. 进入你刚才创建的 Bucket 页面,点击 Settings (设置) 标签。
  2. 向下滚动找到 Public Access (公开访问) -> Custom Domains (自定义域名)
  3. 点击 “Connect Domain”
  4. 输入一个二级域名,例如 cdn.hicyou.comassets.myapp.com
  5. Cloudflare 会自动为你更新 DNS 记录。

现在,如果你上传了一个名为 logo.png 的文件,用户就可以通过以下地址访问:

https://assets.hicyou.com/logo.png

第四步:配置 CORS (用于前端直传)

如果你计划让前端(例如 React, Next.js, Vue)直接上传文件到 R2,而不是经过后端服务器中转,你必须配置 CORS (跨域资源共享)

  1. Bucket Settings 页面。
  2. 向下滚动找到 CORS Policy
  3. 添加以下 JSON 配置,允许本地开发环境和你的生产环境域名进行跨域访问:

JSON

[
  {
    "AllowedOrigins": [
      "http://localhost:3000",
      "https://hicyou.com",
      "https://www.hicyou.com"
    ],
    "AllowedMethods": [
      "GET",
      "PUT",
      "POST",
      "DELETE",
      "HEAD"
    ],
    "AllowedHeaders": [
      "*"
    ],
    "ExposeHeaders": [],
    "MaxAgeSeconds": 3000
  }
]

结语

现在,配合上一篇 Supabase 指南,你的数据库(Postgres)和对象存储(R2)这两大基础设施已经搭建完毕,且都是业内成本效益极高的方案。

欢迎大家使用 https://github.com/hicyoucom/hicyou 创建属于自己的AI网址导航网站。

Demo: https://hicyou.com

0

  1. 没有评论。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注