☁️ Cloudflare R2 + Rclone 配置与使用指南
📦 什么是 Cloudflare R2
Cloudflare R2 是 Cloudflare 提供的对象存储服务,兼容 S3 API。
核心优势
- 零出口费用:不收取数据传输费(和 AWS S3 比是巨大优势)
- 全球分发:依托 Cloudflare 全球网络
- S3 兼容:可用 S3 客户端工具
🪣 创建 R2 存储桶
- 登录 Cloudflare Dashboard
- 进入 R2 → Create Bucket
- 设置存储桶名称(如
library) - 完成创建
🔑 创建 API Token
在 R2 页面 → Manage R2 API Tokens → Create API Token
两种权限对比
| 权限类型 | 权限范围 | 效果 |
|---|---|---|
| 对象读和写 | 仅限指定存储桶 | rclone ls r2-library: ❌ 报错 403 |
| 对象读和写 | 仅限指定存储桶 | rclone ls r2-library:library ✅ 正常 |
| 管理员读和写 | 全部存储桶 | rclone ls r2-library: ✅ 正常 |
关键区别:
rclone ls r2-library:需要 ListBuckets 权限(管理员级别),而rclone ls r2-library:library只需要该存储桶的对象读写权限。
最佳实践
推荐使用对象读和写 + 限定存储桶名,权限最小化,安全性更好!
# ✅ 正确用法
rclone ls r2-library:library
rclone copy ./file.txt r2-library:library/
rclone sync ./folder r2-library:library/folder⚙️ Rclone 配置步骤
1. 安装 rclone
# Windows (用 scoop)
scoop install rclone
# macOS
brew install rclone
# Linux
sudo apt install rclone2. 配置远程(交互式方法)
在终端中运行:
rclone config按照以下步骤操作:
1️⃣ 创建新 remote
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n ← 输入 n 并按回车
2️⃣ 输入名称
Enter name for new remote.
name> r2-library ← 取个名字,比如 "r2-library"
3️⃣ 选择存储类型
Storage> s3 ← 输入 s3 并按回车(Cloudflare R2 兼容 S3 API)
4️⃣ 选择提供商
provider> Cloudflare ← 直接输入 Cloudflare
或者从列表中选择对应的数字(可能因版本不同而变化)
5️⃣ 身份认证方式
env_auth> 1 ← 选择 1,在下一步手动输入凭证
6️⃣ 输入 Access Key ID
access_key_id> YOUR_ACCESS_KEY_ID ← 粘贴你在 Cloudflare 获取的 Access Key ID
7️⃣ 输入 Secret Access Key
secret_access_key> YOUR_SECRET_ACCESS_KEY ← 粘贴你的 Secret Access Key
8️⃣ 选择区域
region> auto ← 直接输入 auto,R2 会自动选择最近的数据中心
9️⃣ 输入 Endpoint
endpoint> https://<你的账户ID>.r2.cloudflarestorage.com
⚠️ 重要:
https://<你的账户ID>.r2.cloudflarestorage.com需要替换为你在 Cloudflare R2 面板中看到的实际 Endpoint。 例如:https://abc123def456.r2.cloudflarestorage.com你的 Account ID 在 Cloudflare Dashboard 右下角可找到。
🔟 Bucket 对象锁定配置
Option bucket_object_lock_enabled.
Enable Object Lock when creating new buckets.
Enter a boolean value (true or false). Press Enter for the default (false).
bucket_object_lock_enabled> ← 直接按回车跳过(默认 false)
1️⃣1️⃣ 高级配置
Edit advanced config?
y) Yes
n) No (default)
y/n> n ← 直接按回车跳过
1️⃣2️⃣ 确认配置
Configuration complete.
Options:
- type: s3
- provider: Cloudflare
- access_key_id: YOUR_ACCESS_KEY
- secret_access_key: YOUR_SECRET_ACCESS_KEY
- region: auto
- endpoint: https://abc123.r2.cloudflarestorage.com
- acl: private
Keep this "r2-library" remote?
y) Yes this is OK (default) ← 按回车确认
e) Edit this remote
d) Delete this remote
y/e/d> y
1️⃣3️⃣ 退出配置
Current remotes:
Name Type
==== ====
r2-library s3
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
n/e/d/r/c/s/q> q ← 输入 q 退出
3. 测试连接
# 列出指定存储桶内容
rclone ls r2-library:library
# 查看树状结构
rclone tree r2-library:library📋 Rclone 常用命令速查
📁 文件浏览
rclone ls r2-library:library # 列出文件和目录
rclone lsl r2-library:library # 列出文件详情(大小、时间)
rclone tree r2-library:library # 树状结构显示
rclone size r2-library:library # 查看存储桶大小和文件数
rclone about r2-library: # 查看磁盘使用情况⬆️ 上传文件
rclone copy ./photo.jpg r2-library:library/photos/ # 上传单个文件
rclone copy ./本地文件夹 r2-library:library/远程文件夹/ # 上传整个目录
rclone copy -P ./大文件.zip r2-library:library/backup/ # 显示进度⬇️ 下载文件
rclone copy r2-library:library/photo.jpg ./下载/ # 下载单个文件
rclone copy r2-library:library/photos/ ./本地照片/ # 下载整个目录🔄 同步
# 本地 → 远程(远程多余文件会删除)
rclone sync ./本地文件夹 r2-library:library/远程文件夹/
# 远程 → 本地
rclone sync r2-library:library/远程文件夹/ ./本地文件夹/🗑️ 删除操作
rclone delete r2-library:library/旧文件.txt # 删除单个文件
rclone rmdir r2-library:library/空目录/ # 删除空目录
rclone purge r2-library:library/某个目录/ # 删除非空目录(慎用!)🔍 常用选项
| 选项 | 作用 |
|---|---|
-P / --progress | 显示传输进度 |
--dry-run | 安全模式,只看不做 |
-u / --update | 只更新新文件或修改过的文件 |
--exclude "*.tmp" | 排除某些文件 |
--transfers 4 | 多文件并行传输数 |
--checkers 8 | 并行检查文件数 |
🧪 安全演练
# 先看删什么(不会真的删)
rclone delete --dry-run r2-library:library/垃圾文件.txt
# 先看同步什么(不会真的同步)
rclone sync --dry-run ./本地/ r2-library:library/远程/🚀 日常备份一条龙
rclone sync -P --transfers 4 ./我的项目/ r2-library:library/我的项目-备份/🆘 更多帮助
rclone help # 所有命令列表
rclone help copy # 查看某个命令的详细说明
rclone help flags # 查看所有可用选项💡 关键经验总结
-
Token 权限要匹配命令范围:
rclone ls r2-library:→ 需要管理员权限(ListBuckets)rclone ls r2-library:library→ 只需要对象读写权限
-
权限最小化原则:尽量用对象读和写+指定存储桶,而非管理员权限
-
先 dry-run 再动手:删除/同步前加
--dry-run确认 -
Endpoint 不要写错:格式是
https://<AccountID>.r2.cloudflarestorage.com