CloudFlare-ImgBed 是 GitHub 上由用户 MarSeventh 创建的开源项目,基于 MIT 协议开源。
本篇采取的方案为 GitHub + Cloudflare + Hugging Face。其中:
- GitHub:保存 CloudFlare-ImgBed 源码
- Cloudflare Pages:运行网页和后端接口
- Cloudflare D1:保存文件索引、用户及配置
- Hugging Face Dataset:保存实际图片
一、前置准备
我们需要准备三个账号,即 GitHub + Cloudflare + Hugging Face 这三个平台的账号,全程使用免费的服务,无需绑卡或开通付费层级。
二、部署项目
1. Fork 图床项目
打开 CloudFlare-ImgBed 项目仓库,点击右上角的 Fork,保持默认设置不变,点击 Create fork。
最终你的仓库中应该有一份图床项目的副本仓库,类似 你的GitHub用户名/CloudFlare-ImgBed
2. 部署到 Cloudflare Pages
进入 Cloudflare 控制台,登录自己的账号。
依次点击 计算和 AI → Workers & Pages ,此处选择 Create application,来到开始界面,选择 Conntinue with GitHub ,关联 GitHub 账户并选择可访问的仓库,这里选择仅能我们刚刚 Fork 的仓库就可以。然后选择页面底部的 Get started ,创建 Pages 项目。
选择我们的项目然后点击 Begin setup ,填写构建参数,按照下面的参数填写:
| 配置项 | 填写内容 |
|---|---|
| 项目名称 | cloudflare-imgbed |
| 生产分支 | main |
| 框架预设 | 无 / None |
| 构建命令 | npm install |
| 构建输出目录 | frontend-dist |
| 根目录 | 留空 |
然后单击 Save and Deploy 执行部署。
部署成功后会得到类似地址:https://cloudflare-imgbed-xxx.pages.dev ,此时页面可能能打开,但管理后台还不能正常工作,因为 D1 尚未配置。
3. 创建并初始化 D1 数据库
D1 只存文件信息,不存实际图片。图片会保存在 Hugging Face。
在 Cloudflare 控制台依次选择 Storage & databases → D1 SQLite Database 来到 D1 数据库控制台,点击 Creat Database 按钮创建数据库,数据库名称填写:img_d1 。点击创建。
进入刚创建的 img_d1,找到 Console 。
然后打开你 Fork 后的 GitHub 仓库,找到 database/init.sql ,复制该文件的全部 SQL 内容,粘贴到 D1 控制台中执行。database/init.sql 中的内容如下:
该初始化脚本会创建:files、settings、index_operations、index_metadata、other_data 以及项目所需的索引和更新时间触发器。执行完成后应显示 This query successfully executed. 。
返回我们刚刚创建的 cloudflare-imgbed Page 项目,选择 Settings → Bindings → D1 database ,填写配置项:
| 配置项 | 内容 |
|---|---|
| 变量名称 | img_d1 |
| 数据库 | 选择刚才创建的 img_d1 |
然后点击 Save,这里的变量名称必须填写 img_d1 ,项目代码按 img_d1 读取绑定,官方文档也要求使用这个名称。
绑定完成后,不会自动应用到已经完成的旧部署,因此必须重新部署一次。返回我们刚刚部署的 Workers & Pages 页面,找到刚刚部署的 cloudflare-imgbed 项目,在 Deployments 标签下的 All deployments 栏目中点开右侧的三个点,选择 Retry deployment 重新部署。
4. 创建 Hugging Face 存储仓库
虽然 CloudFlare-ImgBed 可以在第一次上传时自动创建仓库,但建议先手动创建。这样可以创建只针对这个仓库生效的细粒度 Token,安全性更高。
登录 Hugging Face,点击右上角用户头像,选择 New Dataset 创建一个新的 Dataset。
仓库名称建议使用 imgbed-storage ,License 开源协议可以不填,可见性 Public ,最终仓库标识类似 你的HF用户名/imgbed-storage 。Hugging Face 的 Dataset 本质上是一个 Hub Git 仓库;仓库标识必须使用 用户名/仓库名 格式。
由于我们仅用作普通博客图床,所以这里选择 Public ,便于访问,因此不要向图床中上传例如身份证、内部材料等等如何不能公开传播的图片或隐私内容。Hugging Face 免费公开存储属于 best-effort 服务,并明确要求公共仓库内容具有合理的社区用途;超过最初数 GB 后应谨慎、合理使用,不能将其理解成无限制商业对象存储。
5. 创建 Hugging Face Token
依旧是点击右上角用户头像,选择 Settings → Access Tokens → Create new token ,Token 类型建议选择 Fine-grained ,名称填写 cloudflare-imgbed ,Presets 选择 Write 就行,如何点击 Create token ,会得到一个类似 hf_xxxxxxxxxxxxxxxxxxxxxxxxx 的密钥,请立即复制并妥善保存,不要泄露给他人,也不要写在任何公开的代码仓库或文件中。
6. 初始化图床管理后台
打开 Cloudflare Pages 项目提供的项目页面,形如 https://你的项目.pages.dev/dashboard 这种。登录后首先点右下角找到 系统设置 → 安全设置 → 认证管理 ,在这里设置管理端认证的 用户名 和 密码。
然后点击 上传设置 → 添加渠道 → HuggingFace ,按如下进行配置:
| 配置项 | 示例 |
|---|---|
| 渠道名称 | HF主存储 |
| Token | hf_xxxxxxxxx |
| Repo | 你的HF用户名/imgbed-storage |
| Is Private | 关闭 |
项目会将 Hugging Face 存储识别为 dataset 仓库;如果指定仓库不存在,代码会尝试自动创建 dataset 类型仓库。
7. 设为默认上传通道
进入 网页设置 → 客户端设置 ,配置 默认渠道类型 为 HuggingFace,选择我们刚刚配置的渠道。同时建议把 默认转换WebP 打开,可以有效减小文件体积。然后单击 保存。
此处还有许多个性化配置,例如轮播背景等等,可自行探索。
三、测试及使用
1. 上传测试
到图床首页,先上传一张普通测试图,上传成功后可在 图床前端、管理后台 和 Hugging Face 仓库三处分别检查,应该能看到刚刚上传的图片文件。如报错“上传失败”,可以检查仓库名称配置,尽量从 HuggingFace 仓库页面直接点复制按钮复制。
项目的 Hugging Face 实现会通过 LFS/Xet 上传二进制文件;小文件由 Cloudflare 后端处理,大文件则支持获取上传地址后直传 Hugging Face 存储。
2. 安全配置
最后别忘记做安全配置,这是个人图床,不建议允许陌生人自由上传,可在 安全设置 → 认证管理 中设置 用户端认证 的 上传密码 选项。
至此本项目功能已基本可用,剩余还有很多功能可供自行探索。
