🖼️ Cloudflare Pages ➕ telegraph-Image搭建个人图床(免费·稳定)
项目概述
🛠️ 基础服务(必备):
- telegraph-Image:一个托管在GitHub上的免费开源图床项目
- Cloudflare Pages:无服务器静态站点托管平台, 用于部署telegraph-Image项目
🗄️ 管理数据库(可选):
- Cloudflare D1 数据库:无服务器 SQLite 数据库, 用于telegraph-Image项目后台管理
💾 两种存储服务(可二选一或者都使用):
Cloudflare R2 存储桶:Cloudflare自带, 调用方便, 有免费额度, 个人使用足够
TG电报存储: 基于Telegram频道的免费无限存储, 需要一个自定义频道和一个机器人
🌐 域名(国内访问需要):
- 还需要一个域名, cloudflare默认提供地址国内无法访问, 免费域名申请可参考白嫖Digitalplat免费域名
🚀 主要特性
- 无限图片储存数量,你可以上传不限数量的图片
- 无需购买服务器,托管于Cloudflare的网络上,当使用量不超过Cloudflare的免费额度时,完全免费
- 无需购买域名,可以使用Cloudflare Pages提供的*.pages.dev的免费二级域名,同时也支持绑定自定义域名
- 支持图片审查API,可根据需要开启,开启后不良图片将自动屏蔽,不再加载
- 支持后台图片管理,日志管理,查看访问前20的Referer、IP、img,可以对上传的图片进行在线预览,添加白名单,黑名单等操作
部署指南
代码库创建
进入telegraph-Image项目地址, 点击Use this template(使用此模板)按钮创建一个新的代码库。

D1数据库创建(可选, 用于后台管理)
- 创建一个D1数据库

- 名称不要包含大写字母, 地区选择亚太地区, 点击创建

进入控制台, 输入初始化数据库命令, 点击执行

初始化命令如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 DROP TABLE IF EXISTS tgimglog;
CREATE TABLE IF NOT EXISTS tgimglog (
`id` integer PRIMARY KEY NOT NULL,
`url` text,
`referer` text,
`ip` varchar(255),
`time` DATE
);
DROP TABLE IF EXISTS imginfo;
CREATE TABLE IF NOT EXISTS imginfo (
`id` integer PRIMARY KEY NOT NULL,
`url` text,
`referer` text,
`ip` varchar(255),
`rating` text,
`total` integer,
`time` DATE
);
到此, D1数据库创建完成, 项目调用如下:
1 | 绑定变量名称: IMG |
R2存储桶创建
- R2存储桶, 如果第一次创建可能需要绑定一张银联信用卡, 这个是免费的, 10G空间, 不超不花钱
进入cloudflare控制台–> 存储和数据库

输入名称, 不能有大写字母, 其余不动, 点击创建

到此, R2存储桶创建完成, 项目调用如下:
1 | 绑定变量名称: IMGRS |
TG配置创建
创建电报机器人 @BotFather
获取频道ID @VersaToolsBot
具体操作:
在 Telegram 中给 @BotFather发送
/newbot来创建一个机器人(根据提示操作),记录返回的 **BOT_TOKEN**。创建一个新的 Channel(比如TelegraphImage),将 Bot 设为管理员(必须勾选“发送消息”权限)。
在频道中随意发一条消息, 然后把消息转发给 @VersaToolsBot获取
频道ID
到此, 电报机器人和频道创建完成, 项目调用如下:
1 | TG_BOT_TOKEN: 82399xxxx:AAFzrztJxxxxxbagsDzRdxxxx0hLlSBwwc |
Pages创建
- 登录到Cloudflare控制台–>
计算和AI–>workers和Pages - 选择
pages>开始使用–>Create a project>Connect to Git

选择并连接刚刚创建的图床项目, 如果列表中没有, 点击下方新增访问权限

新增权限: 仅选定的仓库–> 选择仓库–> 保存

保存后刷新Pages部署界面, 就可以看到新增的图床项目, 勾选图床项目–> 点击开始设置, Framework preset(预设框架)选Next.js即可, 其余不动, 点击保存并部署

保存后, 进入到设置界面, 后面操作基本上都是在设置界面进行

Pages设置与绑定
兼容性设置
设置兼容性标志: 设置–> 运行时–> 兼容性标志–> 配置生产兼容性标志 填写 nodejs_compat并选中保存。
D1数据库绑定
设置–> 绑定 –> 添加–> 选择D1数据库, 绑定D1数据库相关信息:
1 | 绑定变量名称: IMG |
绑定后如下

R2存储桶绑定
设置–> 绑定 –> 添加–> 选择R2存储桶, 绑定R2存储桶相关信息:
1 | 绑定变量名称: IMGRS |
TG配置绑定
绑定电报机器人, 操作如下:
设置–> 变量和机密–> 添加, 类型选择文本, 绑定机器人相关信息:
1 | TG_BOT_TOKEN: 82399xxxx:AAFzrztJxxxxxbagsDzRdxxxx0hLlSBwwc |

保存后配置如下

域名绑定
- 这里直接使用cloudflare托管的域名
自定义域–> 设置自定义域–> 输入自定义域名

输入域名后, 如果CNAME记录中没有, cloudflare会自动添加记录, 点击激活域。

激活域后, 会进行初始化, 验证等操作, 稍等片刻变为活动状态, 最长时间为48小时

开启登录(可选, 用于后台管理)
- 目前后台管理不太好用, 等着作者更新吧
设置->变量和机密->添加->选择文本
所有变量如下, 这里只选择管理员相关变量即可, 用于登录后台
| 变量名称 | 值 | 输入 |
|---|---|---|
| PROXYALLIMG | 反向代理所有图片(默认为false) | boolean |
| BASIC_USER | <后台管理页面登录用户名称> | string |
| BASIC_PASS | <后台管理页面登录用户密码> | string |
| ENABLE_AUTH_API | 是否开启tg channel访客验证 (默认为false) | boolean |
| REGULAR_PASS | <普通用户 (tg channel访客验证)> | string |
| REGULAR_PASS | <普通用户密码> | string |
| ModerateContentApiKey | <审查图像内容的API key> | string |
| RATINGAPI | <自建的鉴黄api > | string |
| CUSTOM_DOMAIN | https://your-custom-domain.com (自定义加速域名) | string |
| TG_BOT_TOKEN | 123468:AAxxxGKrn5 (从 @BotFather) | string |
| TG_CHAT_ID | -1234567 (频道的ID,TG Bot要是该频道或群组的管理员) | string |
更新部署
所有配置更新完成并绑定域名生效后, 进行部署更新, 操作如下:
Workers和Pages–> telegraph-image–> 部署–> 更多选项(三个点)–> 选择重试部署

部署完成后, 可以通过自定义域名进行访问并上传图片, 测试效果如下
