Cloudflare R2和rclone
基本认知
什么是Cloudfare R2
简单说就是个由Cloudflare提供文件存储的服务。可以上传文件后,有个URL可以访问下载。亮点:
- 10G免费空间,超出后收费,但价格相对便宜($0.015 / GB storage)。
- 上传后再下载不要钱。
- 支持S3 API,支持很多工具。比如接下来我们用的rclone.
详情: https://www.cloudflare.com/developer-platform/products/r2/
什么是rclone
简单说,是一个能连接各种空间供应商(比如网盘dropbox, google drive之流,或者一般群众理解中的“服务器”类,如amazon S3之类)的工具。再~简单说,实际使用中类似cp, scp的命令,让你可以一个指令把文件复制到网盘或服务器上(当然也能反方向)。
目标
建立免费的cloudfare R2, 并用rclone连接后,把rclone指令补进原来处理图片的脚本中,这样我们转完webp格式后自动上传到R2上。写博客时,不需要把图片放到hexo的文件夹里,也就不会再上传到gitlab里占用git的历史记录。而且在写的过程就可以直接预览图片效果。
步骤
启用Cloudflare R2
登陆CF帐号后,在左手边找到“R2 Object Storage”并点击。第一次使用需要签定plan,大概就是BLABLA。。。确定启用,并提供支付方式。如上文所述,在10G以下是免费的,如果超了,每个月都以每G 0.015刀收费。收费其实还包含另外两个条件,都是per command,但免费额度都是1M或10M次,我觉得以我们的博客而言,基本属于不用考虑。
在启用R2后,再回到R2的界面,可以看到:
- 点击 “+Create bucket” (可以理解成划区,新建文件夹之类的)
- 输入bucket名字,比如blog
- 其它的选默认就行。
- 点“Creqte bucket”
- 注意,因为账户域名都在我们自己名下,我们将对所有上传的文件负责,which means不要上传自己没有版权的文件,或者违法的文件。
回到R2页面,我们可以看到新建立的bucket已经在列表里:
点进我们新建的bucket,如图,依次点:
- Settings
- Custome Domain
- Add
右边会弹出一个小窗,需要要填入域名后点Continue. 这里需要注意,域名要填子域名,因为一般我们的主域名都是直接链接了gitlab的pages了。而且我们之后可能会需要使用别的bucket,每个bucket一个子域名看起来会整齐很多。目前我们的目前的是给博客host图片,那么我们可以用:
1 | img.XXX.YY |
- img 是子域名
- XXX.YY是我们自己域名,比如
kumo-l.net
如果犯懒,其实也是可以用类似 upload.XXX.YY或者 file.XXX.YY, 然后把所有文件都往一个bucket里丢。反正子域名叫啥随便,自己能理清就行。
决定好子域名,点击Continue后,CF就会开始关联子域名到这个buket。这个可能需要一点点时间,大概几分钟。这会我们可以去处理rclone.
set up rclone
安装rclone
1 | brew install rclone |
啥? 没装homebrew…那先run
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
安装完homebrew后记得看output,会让跑几条指令,大概长这样,直接复制output里的跑就行,这里只是给个例子:
1 | /Users/xx/.zprofile |
跑完后再安装rclone。
获取R2 token
在连rclone前, 先回到R2页面,点 API - Manage API tokens:
- 进去后,点“Create User API token”. 主要我们这是个人BLOG,user版就可以。
- 给token起个名字,叫啥都行,自己分清就行
- 选“Object Read & Write” (因为我们只是用来上传下载,这个够了)
- Speficy Buckets这里选 “Apply to specific buckets only”。 这样安全些。然后在下拉菜单选我们刚刚建立的那个bucket.
- 剩下不用管。直接点create User API Token.
接下来CF会展示Token的内容,把这个页面的key先复制下来,因为关掉后就再也看不到了。要用在rclone上,我们需要的是:
- Access Key ID
- Secret Access Key
- endpoint
复制好后点Finish.
Configure rclone to work with R2
回到terminal, 输入:
1 | rclone config |
这将进入rclone 配置问答,具体参考 https://rclone.org/s3/#cloudflare-r2。 第一步起的名字记住,一会用。
最后几步把上一步记下的三个东西一一对应的填进去就行。
完成后,输入
1 | rclone config file |
可以得到config file的位置,一般是在home folder的.config里。
编辑这个文件:
1 | nano 刚刚得到的config file地址 |
在最后补一行:
1 | no_check_bucket = true |
保存退出 (ctrl + x, y, enter)
使用rclone
看看bucket里存了什么文件:
1 | rclone tree XX:YY |
- XX是刚刚config第一步起的名字。在config file也可以看到,第一行在[]里的就是
- YY是bucket的名字
rclone最常用的方法是把一个文件夹下的文件全都搬到bucket里去。所以我们一个专门放BLOG用图片的文件夹,然后输入:
1 | cd PATH_TO_BLOG_PICTURE_FOLDER |
XX和YY和上同一样,是config里的name和bucket name. 指令后,当下文件夹内的所有文件都会被上传。到CF R2的网页里能看到这些文件。因为我们已经链接了子域名,所以这些文件都可以通过URL下载。比如一个文件叫 abc.webp,那么它的url就是
1 | https://子域名.XX.YY/abc.webp |
这里XX.YY就是我们的域名,比如 kumo-l.net
最后
至此,所有准备工作完成,只要把rclone copy的指令加到原来的转化webp的脚本,就可以了。写博客的时,直接用markdown连接真实URL就行。这样还能直接preview效果。在vscode里,preview markdown可以:
- side by side: 先按 command+k, 放开,马上再按 v.
- preview in a new tab:shift + command + v