Skip to content

用 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” 按钮

Fork 仓库
Fork 仓库

仓库名可以不用改,直接点击右下角的 “Create fork”

创建 Fork
创建 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
部署 Pages

稍等几分钟,等待 Pages 部署完毕后,再为其配置数据库。

配置数据库 (D1)

数据库可以选择 KV 或者 D1,KV 是性能强,额度少,D1 是性能弱,额度多。

个人建议选择 D1,虽然读写性能要差一些,但是对于站外图片来说,这点性能无伤大雅,而多出来的免费额度是实打实大,能让你的图片更加“坚挺”。

创建一个 D1 数据库,名字可以自定义,我这里就叫 imgbed

创建 D1 数据库
创建 D1 数据库

接着来到 Console 中,复制仓库里的 init.sql(不含注释)执行,用于初始化数据库

初始化数据库
初始化数据库

最后在 Pages 的 Settings -> Variables and secrets -> Bindings 中将刚才创建的 D1 绑定上去,这里的 Name 必须img_d1

绑定到 Pages
绑定到 Pages

重新构建

完成数据库绑定后,返回 Pages 的首页,重新部署使其生效,接着就能通过自带的 pages.dev 域名访问到 Cloudflare ImgBed 了。

重新构建
重新构建

存储渠道

目前只是搭建好了图床程序,还需要配置好存储渠道 (系统设置 -> 上传设置) 才能上传图片,推荐添加 R2、S3 或者 WebDAV,其余的存储渠道四舍五入算是一种滥用,有丢失图片的风险。

R2

警告

R2 的免费额度每月包含了 10G 存储、100 万次 A 类操作和 1000 万次 B 类操作

正常情况下用作图床是完全用不完的,但是如果被刷还是有可能产生额外费用的。

创建一个 Bucket,名字可以自定义,存储类型必须要选择 “Standard”,否则没有免费额度

创建 R2
创建 R2

来到 Pages 的设置中,找到 Bindings 绑定刚才创建的 R2,Name 必须img_r2

绑定 R2
绑定 R2

进入后台管理后,就能在上传设置中看到 Cloudflare R2 了,不用再手动添加。

由于 R2 是免费容量只有 10G,建议直接点击 “编辑” 将容量上限也设置为 10G,避免超出免费容量。

渠道管理 - R2
渠道管理 - R2

S3

如果你有自己的 S3,更加推荐用 S3 来替代 R2,比如我的图床配置的就是 Enzonix 的免费 S3 对象存储。

渠道管理 - S3
渠道管理 - S3

WebDAV

如果你有支持 WebDAV 的网盘也可以作为图床渠道,比如 InfiniCloud 提供的 25G 的免费容量就可以通过 WebDAV 的方式添加到 Cloudflare ImgBed 中。

渠道管理 - WebDAV
渠道管理 - WebDAV

使用

搭建完成后,使用就非常的简单了,只需要将图片拖入或者 Ctrl + V 粘贴就能完成上传。

上传
上传

接着下面就会给出了 4 种链接,兼容了大部分平台的图片格式,点击即可一键复制链接。

一键复制
一键复制

更新

至于 Cloudflare ImgBed 的更新就更加简单了,仓库里内置了同步上游的 Actions,可以按照下图步骤启动 “Upstream Sync” 工作流。

以后 ImgBed 更新的时候,工作流会自动把代码同步过来,一旦 Cloudflare Pages 检测到代码变动就会开始构建,达到自动更新的效果。

同步上游
同步上游

Last updated:

经典款
RackNerd

RackNerd

新手入门首选

洛杉矶 DC3 机房 | 3T 大流量

1C / 1GB / 20GB SSD / 3TB 流量

$21.99/年
欧洲优化
V.PS

V.PS

可选荷兰 / 德国

欧洲三网优化 | 电信 GIA + 联通 9929 + 移动 CMIN2

2C / 1GB / 20GB NVMe / 1TB 流量

€6.95/月
关注微信公众号
优化线路
Evoxt

Evoxt

最便宜的亚太优化线路

马来西亚 电信 GIA / 联通 9929
优惠码:AFF2377-DEV

1C / 512MB / 5GB SSD / 150GB 流量

$3.32/月
优化线路
搬瓦工

搬瓦工

15 个机房自由切换

洛杉矶 DC6 机房
电信 / 联通 GIA + 移动 CMIN2

2C / 2GB / 40GB SSD / 2.5TB 流量

$49.99/季