项目概述

🛠️ 基础服务(必备):

  • telegraph-Image:一个托管在GitHub上的免费开源图床项目
  • Cloudflare Pages:无服务器静态站点托管平台, 用于部署telegraph-Image项目

🗄️ 管理数据库(可选):

  • Cloudflare D1 数据库:无服务器 SQLite 数据库, 用于telegraph-Image项目后台管理

💾 两种存储服务(可二选一或者都使用):

  • Cloudflare R2 存储桶:Cloudflare自带, 调用方便, 有免费额度, 个人使用足够

  • TG电报存储: 基于Telegram频道的免费无限存储, 需要一个自定义频道和一个机器人

🌐 域名(国内访问需要):

telegraph-Image项目地址

🚀 主要特性

  1. 无限图片储存数量,你可以上传不限数量的图片
  2. 无需购买服务器,托管于Cloudflare的网络上,当使用量不超过Cloudflare的免费额度时,完全免费
  3. 无需购买域名,可以使用Cloudflare Pages提供的*.pages.dev的免费二级域名,同时也支持绑定自定义域名
  4. 支持图片审查API,可根据需要开启,开启后不良图片将自动屏蔽,不再加载
  5. 支持后台图片管理,日志管理,查看访问前20的Referer、IP、img,可以对上传的图片进行在线预览,添加白名单,黑名单等操作

部署指南

代码库创建

进入telegraph-Image项目地址, 点击Use this template(使用此模板)按钮创建一个新的代码库。

image-20251117105502103

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

  1. 创建一个D1数据库

image-20251117124429642

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

image-20251117124600663

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

image-20251117124730516

初始化命令如下:

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
2
绑定变量名称: IMG
D1数据库名称: telegraph-image

R2存储桶创建

  • R2存储桶, 如果第一次创建可能需要绑定一张银联信用卡, 这个是免费的, 10G空间, 不超不花钱

进入cloudflare控制台–> 存储和数据库

image-20251117123934159

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

image-20251117125352276

到此, R2存储桶创建完成, 项目调用如下:

1
2
绑定变量名称: IMGRS
R2存储桶名称: telegraph-image

TG配置创建

具体操作:

  1. 在 Telegram 中给 @BotFather发送 /newbot来创建一个机器人(根据提示操作),记录返回的 **BOT_TOKEN**。

  2. 创建一个新的 Channel(比如TelegraphImage),将 Bot 设为管理员(必须勾选“发送消息”权限)。

  3. 在频道中随意发一条消息, 然后把消息转发给 @VersaToolsBot获取频道ID

到此, 电报机器人和频道创建完成, 项目调用如下:

1
2
TG_BOT_TOKEN: 82399xxxx:AAFzrztJxxxxxbagsDzRdxxxx0hLlSBwwc
TG_CHAT_ID: -10xxxx595xxx4

Pages创建

  1. 登录到Cloudflare控制台–>计算和AI–>workers和Pages
  2. 选择pages> 开始使用–> Create a project > Connect to Git

image-20251117105248369

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

image-20251117105830898

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

image-20251117110041784

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

image-20251117111133148

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

image-20251117134323074

Pages设置与绑定

兼容性设置

设置兼容性标志: 设置–> 运行时–> 兼容性标志–> 配置生产兼容性标志 填写 nodejs_compat并选中保存。

D1数据库绑定

设置–> 绑定 –> 添加–> 选择D1数据库, 绑定D1数据库相关信息:

1
2
绑定变量名称: IMG
D1数据库名称: telegraph-image

绑定后如下

image-20251117134947968

R2存储桶绑定

设置–> 绑定 –> 添加–> 选择R2存储桶, 绑定R2存储桶相关信息:

1
2
绑定变量名称: IMGRS
R2存储桶名称: telegraph-image

TG配置绑定

绑定电报机器人, 操作如下:

设置–> 变量和机密–> 添加, 类型选择文本, 绑定机器人相关信息:

1
2
TG_BOT_TOKEN: 82399xxxx:AAFzrztJxxxxxbagsDzRdxxxx0hLlSBwwc
TG_CHAT_ID: -10xxxx595xxx4

image-20251117171506157

保存后配置如下

image-20251118080614954

域名绑定

  • 这里直接使用cloudflare托管的域名

自定义域–> 设置自定义域–> 输入自定义域名

image-20251117135533979

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

image-20251117135713216

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

image-20251117140051506

开启登录(可选, 用于后台管理)

  • 目前后台管理不太好用, 等着作者更新吧

设置->变量和机密->添加->选择文本

所有变量如下, 这里只选择管理员相关变量即可, 用于登录后台

变量名称 输入
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–> 部署–> 更多选项(三个点)–> 选择重试部署

image-20251117140140244

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

image-20251117140732380