用 Cloudflare ImgBed 搭一个无需服务器和域名的免费图床
前言
前段时间介绍的 MinIO + ImgProxy 图片展示方案对于静态博客来说非常完美,但如果是在论坛、评论区等地方分享图片,就显得没那么方便了。一方面,上传流程相对繁琐,并且无法直接获取可分享的图片链接;另一方面,将图片在站外公开展示,还有流量被刷爆的风险。
对于这类需要对外展示的图片,更好的方式是搭建一个专门的图床。这样就能实现图片拖入网页快速上传,并且能直接获取到 HTML、Markdown、BBCode 等格式的链接,方便在不同平台使用。
以后如果需要隐藏某张图片,也能直接在图床后台将其加入黑名单,无需删除文件即可停止对外访问,管理起来更加灵活。
Cloudflare ImgBed
我们需要的图床只是单纯用于在外分享图片,功能自然是越简单越好,并不需要兰空图床那样大而全的图床程序,最好是那种可以一键部署,不用服务器、域名的图床,比如 Cloudflare ImgBed 就是个非常合适的选择,支持多种部署方式、多种存储渠道。
优点
部署方式:Cloudflare Pages、Cloudflare Workers、Docker 以及 Node.js 直接部署。
存储渠道:Telegram Bot、Cloudflare R2、S3、Discord、HuggingFace 以及 WebDAV。
作为极致的“白嫖党”,当然是选择纯免费的方案,用 Cloudflare Pages + Cloudflare R2 来部署。
优先推荐用 Pages 部署,而不是 Workers,有 2 个重要原因:第一,Pages 部署更加简单,网页上纯可视化就能完成,支持自动更新;第二,Pages 自带的 pages.dev 可以正常访问,而 workers.dev 被阻断了,必须绑定自己的域名才行。
缺点
要说缺点的话,Cloudflare ImgBed 的前端 UI 看上去 AI 味比较浓,后台的操作逻辑也有些怪怪的,但这都不是大问题,前端 Sanyue-ImgHub 也是开源的,现在各种 AI 这么发达,完全可以自己定制一版前端打包进去。
准备工作
- 一个 GitHub 账号
- 一个 Cloudflare 账号
部署
Fork 项目
项目地址:https://github.com/MarSeventh/CloudFlare-ImgBed
点击上方的 “Fork” 按钮
仓库名可以不用改,直接点击右下角的 “Create fork”
部署 Pages
在 Cloudflare 的侧边栏中找到 Compute -> Workers & Pages -> Create application,然后点击下方的 “Looking to deploy Page? Get started” 进入 Pages 的部署页面,选择 “Import an existing Git repository”。
在页面中授权 GitHub 账号,然后选择刚才 Fork 的仓库
上方的项目名称与分支保持默认即可,修改一下部署命令以及输出目录:
- Build command:
npm install - Build output directory:
frontend-dist
稍等几分钟,等待 Pages 部署完毕后,再为其配置数据库。
配置数据库 (D1)
数据库可以选择 KV 或者 D1,KV 是性能强,额度少,D1 是性能弱,额度多。
个人建议选择 D1,虽然读写性能要差一些,但是对于站外图片来说,这点性能无伤大雅,而多出来的免费额度是实打实大,能让你的图片更加“坚挺”。
创建一个 D1 数据库,名字可以自定义,我这里就叫 imgbed
接着来到 Console 中,复制仓库里的 init.sql(不含注释)执行,用于初始化数据库
最后在 Pages 的 Settings -> Variables and secrets -> Bindings 中将刚才创建的 D1 绑定上去,这里的 Name 必须为 img_d1
重新构建
完成数据库绑定后,返回 Pages 的首页,重新部署使其生效,接着就能通过自带的 pages.dev 域名访问到 Cloudflare ImgBed 了。
存储渠道
目前只是搭建好了图床程序,还需要配置好存储渠道 (系统设置 -> 上传设置) 才能上传图片,推荐添加 R2、S3 或者 WebDAV,其余的存储渠道四舍五入算是一种滥用,有丢失图片的风险。
R2
警告
R2 的免费额度每月包含了 10G 存储、100 万次 A 类操作和 1000 万次 B 类操作。
正常情况下用作图床是完全用不完的,但是如果被刷还是有可能产生额外费用的。
创建一个 Bucket,名字可以自定义,存储类型必须要选择 “Standard”,否则没有免费额度。
来到 Pages 的设置中,找到 Bindings 绑定刚才创建的 R2,Name 必须为 img_r2
进入后台管理后,就能在上传设置中看到 Cloudflare R2 了,不用再手动添加。
由于 R2 是免费容量只有 10G,建议直接点击 “编辑” 将容量上限也设置为 10G,避免超出免费容量。
S3
如果你有自己的 S3,更加推荐用 S3 来替代 R2,比如我的图床配置的就是 Enzonix 的免费 S3 对象存储。
WebDAV
如果你有支持 WebDAV 的网盘也可以作为图床渠道,比如 InfiniCloud 提供的 25G 的免费容量就可以通过 WebDAV 的方式添加到 Cloudflare ImgBed 中。
使用
搭建完成后,使用就非常的简单了,只需要将图片拖入或者 Ctrl + V 粘贴就能完成上传。
接着下面就会给出了 4 种链接,兼容了大部分平台的图片格式,点击即可一键复制链接。
更新
至于 Cloudflare ImgBed 的更新就更加简单了,仓库里内置了同步上游的 Actions,可以按照下图步骤启动 “Upstream Sync” 工作流。
以后 ImgBed 更新的时候,工作流会自动把代码同步过来,一旦 Cloudflare Pages 检测到代码变动就会开始构建,达到自动更新的效果。









