Twikoo极简原生部署Cloudflare免费R2图床
前言
一直想给Twikoo部署个图床,但是国内的图床价格又高,如果部署在服务器上又觉得服务器的硬盘容量太小,到时候塞的满满的扩容又麻烦又要花钱,只能再次白嫖一下Cloudflare了。
部署
第一步:开启Cloudflare R2
R2的开启需要绑定一张信用卡(银行卡?)因为我本身就绑定了一张,就不介绍了。
来到Cloudflare控制台的R2对象存储,一路开通即可。
可以看到三项免费的额度,针对这三项,下文我将针对性的说明如何防范。
第二步:创建存储桶
点击界面右上角的创建存储桶:
存储桶名称: twikoo-image(任意)
位置: 自动,或者选择 亚太地区
默认存储类: 必须选择标准!
网上查了点资料:Cloudflare 的 10GB 免费额度 **仅仅适用于“标准 (Standard)”存储类**。 如果选择了“不频繁访问”,那么**没有免费额度**,从存入第一张图片开始,就会按每 GB 每月 0.01 美元开始计费。

顺便 创建自定义域 ,来到存储桶的设置界面,点击 自定义域 右侧的 添加 按钮,添加绑定在Cloudflare的子域名:
第三步:获取API令牌
在界面的 Account Details - API Tokens ,点击 Manage :
创建 帐户 API 令牌 :
令牌名称: Twikoo-Image-Token(任意)
权限: 对象读和写: 允许读取、写入和列出特定存储桶中的对象。
指定存储桶: 选择上一步创建的存储桶
创建后记录页面上的相关信息。
第四部:配置twikoo图床
来到twikoo的管理界面:
| Twikoo 后台设置项 | 对应你获取到的内容 |
|---|---|
| IMAGE_CDN | 选择 S3 / R2 / MinIO |
| S3_REGION | 可不填 |
| S3_BUCKET | 存储桶名称(比如 twikoo-image) |
| S3_ACCESS_KEY_ID | 访问密钥 ID |
| S3_SECRET_ACCESS_KEY | 机密访问密钥 |
| S3_ENDPOINT | 终结点 |
| S3_CDN_URL | 自定义域名(比如 https://img-twikoo.luxiyue.cn) |
保存后即可。
测试
完美!
安全防范(重要‼️)
一、 存储
存储总量为10G,可以说非常足,正常情况下,存储几千张图片才能存满,可以说基本不用担心。
根据上传图片多少进行定时清理即可,可以优化的内容为:
如果是通过nginx或者apache2部署的,配置上传文件大小限制,可以为2M,5M等;
Cloudflare本身对于免费用户来说,在开启小黄云状态下,文件也限制在100M;
Twikoo程序本身作为用 Node.js 写的应用,解析表单数据(图片)的中间件往往有默认的大小限制(很多 Node 框架默认是 1MB 或几 MB,Twikoo未查资料验证)
二、A类操作
100万次操作/月免费,每增加 100 万次操作收取 4.50 美元。
A类操作可以简单理解为上传等请求次数。
最简单有效的是开启 Rate Limiting(速率限制) ,阻断脚本狂刷。
进入 Cloudflare 控制台 -> 你的域名 -> Security (安全性) -> 安全规则 -> 创建规则:Rate limiting rules (速率限制规则)。
三、B类操作
1000万次操作/月免费,每增加100万次操作收取 0.36 美元。
B类操作可以简单理解为访问、读取的请求次数。
正常情况下访问图片,由于有缓存的关系,只要缓存了,第二次就不计次数,但是架不住有人瞎搞,在图片链接后面疯狂加随机参数,导致每次都去拉去原始图片。
针对性防御方案:忽略查询字符串
进入 Cloudflare 控制台 -> 你的域名 -> 规则 (Rules) -> 页面规则 (Page Rules) -> 创建页面规则。
URL 匹配:填入
*img.yydnas.cn/*(把域名换成你的自定义域名)。选择设置:找到 缓存级别 (Cache Level)。
值:选择 忽略查询字符串 (Ignore Query String)。
保存并部署。
账单预警
最后再配置一下账单的预警,点击 头像 - 账单 - 可计费使用量通知 ,选择 【账单 根据使用情况计费 计费使用量超过了您为特定产品配置的阈值】。
然后分别针对产品设置三项:
| 产品 | 名称 | 免费额度 (每月) | 建议预警阈值 |
|---|---|---|---|
| R2 Storage | 存储空间 | 10 GB | 5000000000(5G) |
| R2 Storage Class A Operations | 写入/上传 (A类) | 100 万次 | 500,000 次 (50%) |
| R2 Storage Class B Operations | 读取/下载 (B类) | 1,000 万次 | 5,000,000 次 (50%) |
这样其实就比较稳妥了,最后其实也可以算一下,就算是整体都超过一倍,总体费用其实相当于大概8美元左右,60元人民币不到,不会第二天直接卖车卖房的程度。。。
完全可以放心使用。
最后
Twikoo只是一个后端的评论功能,是用来给用户发表评论、分享观点的,既然开发了这个功能,那么就试着理解、使用这些功能,毕竟现在人们素质提高了,也不会很多人花那么多精力就为了让你损失几十块钱,吃了不讨好的事情没有意义。
另外,这个方法不需要第三方的控制界面,仅仅是调用API显示图片,如果需要上传等功能实现,还是建议在Github找一个开源的项目,通过Cloudflare Workers进行部署。








