用 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 仓库仓库名可以不用改,直接点击右下角的 “Create 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 installBuild output directory:
frontend-dist
部署 Pages稍等几分钟,等待 Pages 部署完毕后,再为其配置数据库。
配置数据库 (D1)
数据库可以选择 KV 或者 D1,KV 是性能强,额度少,D1 是性能弱,额度多。
个人建议选择 D1,虽然读写性能要差一些,但是对于站外图片来说,这点性能无伤大雅,而多出来的免费额度是实打实大,能让你的图片更加“坚挺”。
创建一个 D1 数据库,名字可以自定义,我这里就叫 imgbed
创建 D1 数据库接着来到 Console 中,复制仓库里的 init.sql(不含注释)执行,用于初始化数据库
初始化数据库最后在 Pages 的 Settings -> Variables and secrets -> Bindings 中将刚才创建的 D1 绑定上去,这里的 Name 必须为 img_d1
绑定到 Pages重新构建
完成数据库绑定后,返回 Pages 的首页,重新部署使其生效,接着就能通过自带的 pages.dev 域名访问到 Cloudflare ImgBed 了。
重新构建存储渠道
目前只是搭建好了图床程序,还需要配置好存储渠道 (系统设置 -> 上传设置) 才能上传图片,推荐添加 R2、S3 或者 WebDAV,其余的存储渠道四舍五入算是一种滥用,有丢失图片的风险。
R2
⚠️ 警告
R2 的免费额度每月包含了 10G 存储、100 万次 A 类操作和 1000 万次 B 类操作。
正常情况下用作图床是完全用不完的,但是如果被刷还是有可能产生额外费用的。
创建一个 Bucket,名字可以自定义,存储类型必须要选择 “Standard”,否则没有免费额度。
创建 R2来到 Pages 的设置中,找到 Bindings 绑定刚才创建的 R2,Name 必须为 img_r2
绑定 R2进入后台管理后,就能在上传设置中看到 Cloudflare R2 了,不用再手动添加。
由于 R2 是免费容量只有 10G,建议直接点击 “编辑” 将容量上限也设置为 10G,避免超出免费容量。
渠道管理 - R2S3
如果你有自己的 S3,更加推荐用 S3 来替代 R2,比如我的图床配置的就是 Enzonix 的免费 S3 对象存储。
渠道管理 - S3WebDAV
如果你有支持 WebDAV 的网盘也可以作为图床渠道,比如 InfiniCloud 提供的 25G 的免费容量就可以通过 WebDAV 的方式添加到 Cloudflare ImgBed 中。
渠道管理 - WebDAV使用
搭建完成后,使用就非常的简单了,只需要将图片拖入或者 Ctrl + V 粘贴就能完成上传。
上传接着下面就会给出了 4 种链接,兼容了大部分平台的图片格式,点击即可一键复制链接。
一键复制更新
至于 Cloudflare ImgBed 的更新就更加简单了,仓库里内置了同步上游的 Actions,可以按照下图步骤启动 “Upstream Sync” 工作流。
以后 ImgBed 更新的时候,工作流会自动把代码同步过来,一旦 Cloudflare Pages 检测到代码变动就会开始构建,达到自动更新的效果。
同步上游作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
