折腾日记——搭建免费图床(半教程)

本篇博客主要是讲我自己的折腾过程,你要当教程看也可以。我用的项目是Cloudflare-imgbed(一股chinglish的味道)

图床是专门存放图片并生成可直接访问的 URL 的服务,用于博客、公众号、文档、笔记,Markdown 等场景,解决图片统一托管、跨平台复用、链接长期有效问题
但是图床网站又不是做慈善的,肯定要收钱。而作为一名“穷书生”,付费买vip有可能,但看到最便宜的套餐是100元的时候我就意识到自己动手丰衣足食的道理
所以在经历高强度上网冲浪(无聊偶然刷到的)后,我发现了——

cloudflare-imgbed项目

🗂️开源文件托管解决方案,支持 Docker 和无服务器部署,支持 Telegram、Discord、Cloudflare R2、S3、Huggingface、WebDAV 等多种存储渠道,提供 RESTful APIs 和 WebDAV 支持

最关键的一点是:完全免费

前期准备

“项目支持使用不同的存储渠道作为后端存储,每种渠道有不同的优缺点和限制,您可以根据自己的需求选择合适的渠道。”

渠道类型 优点 限制
Telegram Bot 完全免费、无限容量 大于 20MB 文件需分片存储
Cloudflare R2 无文件大小限制、企业级性能 超出 10GB 免费额度后收费,需绑定支付方式
S3 兼容存储 选择多样、价格灵活 根据服务商定价
Discord 完全免费、简单易用 大于 10MB 文件需分片存储
HuggingFace 完全免费、支持大文件直传 需要 HuggingFace 账号
WebDAV 兼容性广、支持自建存储 根据服务商定价

嗯,这个R2我看很多博主都在推荐,那就试试吧
进入Cloudflare Dashboard,在左侧列表选择存储和数据库,在弹出的列表中选择R2对象存储,再选择概述,再选择将R2订阅添加到我的账户,然后……
什——么—— 竟然要添加银行卡才行?免费额度也得添加银行才能用?
这是一个悲伤的故事

小剧场

“母上大人,您就帮我绑定一下银行卡呗,不用花钱,有10GB的免费额度,只要您帮我绑定,什么我都愿意做~❤“

点击继续...

“滚!“

点击继续...

焯!看来还得靠自己!


我真闲,甚至真的弄了个模仿galgame的文字效果

既然R2存储桶弄不了,那就用HuggingFace渠道吧

让我看看帮助文档…

6. HuggingFace 渠道(由 @林酱 佬贡献)
6.1 创建 HuggingFace 账号
访问 HuggingFace 并注册账号
6.2 获取 Access Token
登录后访问 Token 设置
点击 "New token" 创建新 Token
选择 "Write" 权限
复制生成的 Token

还是挺简单的,一路上畅通无阻,顺利拿到了token

既然前期工作完成了,那么就进入到下一步——

部署

Fork 项目

打开Github项目,选择Fork(如果一直登不上可以试试开VPN翻墙)*
温馨提示,直接点就行了

直接选择 Creat fork,其它的不用改
你要改仓库名也不是不行,但推荐保持默认

开始部署

正常情况我推荐Cloudflare Pages部署,但这里我选择的事Cloudflare Woker部署,所以后续步骤也以Cloudflare Worker部署为准

我选择Cloudflare Worker的原因 不用更简单的Cloudflare Pages部署很简单,是我的个人原因(不排除项目也有问题?),所以我还是建议你先用更简单的Cloudflare Pages部署,教程文档在这
因为我不知道为什么按照文档和教程的步骤走完后总是提示我要登录(理论上来说我应该直接进入后台,进入后台后再设置),不填用户名和密码直接登录又提示服务器错误,所以我选择用Cloudflare Worker部署

获取 API Token 和 Account ID

登录Cloudflare Dashboard

此时,不要点任何东西,就待在这个账户主页,点击右边竖着的三个点,在弹出来的菜单选择复制账户 ID
怕你找不到,还是配个完整不裁剪不缩小的图吧

然后随便找个地方把账户ID扔进去备用
推荐直接用记事本
拿到账号ID后点击最↗右↗上↗角↗的小人(卧夜不值刀正确叫法是什么),再选择配置文件
我看官方的教程写的是打开“我的个人资料”,当时找不到,结果发现配置文件就是我的个人资料
然后点击API 令牌-创建令牌,在 API 令牌模板 列表内找到编辑 Cloudflare Worker,点击使用模板
照着点准没错
进入到下一个页面,你要动的地方只有两个。权限那堆不用管、别动,账户资源选包括-XXXXXXX's Account,所有账户也不是不行。区域资源选包括-所有区域,然后其它地方一律别动,点继续以显示摘要
动这俩地方就行了
然后会显示这个令牌的信息摘要,直接点创建令牌,进入到下一个页面千万别手快直接返回,这个页面会显示你的令牌,这个令牌会也只会出现这一次,复制下来存到记事本里。恭喜你,这个步骤完成了
这是你的令牌唯一一次出现,赶紧复制存起来

创建数据库

特性 KV 数据库 D1 数据库
读写性能 较低
免费额度

我只是个喜欢偶尔写写博客的“穷书生”,不需要那么多的额度,所以我选的就是KV 数据库,下面的教程也以KV 数据库为主,如果你要D1 数据库教程,
让我看看帮助文档…

KV 数据库
在 Dashboard 中选择 "存储和数据库" → "Workers KV"
点击 "创建实例",名称填img_url
创建完成后,记录命名空间 ID
嗯,先让我打开Workers KV很简单,对吧?创建KV空间很简单,对吧?
然后复制ID很简单,对吧? OK,完成,然后进入下一步——

配置 GitHub Secrets

在 Fork 的仓库中,进入 Settings → Secrets and variables → Actions → Secrets,添加以下 Secrets:

Secret 名称 说明 是否必填
CLOUDFLARE_API_TOKEN Cloudflare API Token ✅ 必填
CLOUDFLARE_ACCOUNT_ID Cloudflare Account ID ✅ 必填
D1_DATABASE_ID D1 数据库 ID 二选一
KV_NAMESPACE_ID KV 命名空间 ID 二选一
R2_BUCKET_NAME R2 存储桶名称 可选
WORKER_NAME Worker 名称(默认 cloudflare-imgbed 可选
WORKER_VARS 业务环境变量(JSON 格式) 可选

如果你全程按照我写的来,那么你可以直接按照下表:

Secret 名称 说明 是否必填
CLOUDFLARE_API_TOKEN Cloudflare API Token ✅ 必填
CLOUDFLARE_ACCOUNT_ID Cloudflare Account ID ✅ 必填
KV_NAMESPACE_ID KV 命名空间 ID ✅ 必填
这么细了你应该不会懵了吧? 这么细了你应该不会懵了吧?