CloudFlare-ImgBed + Cloudflare R2 完整搭建指南(2025)
經過幾天折騰,我最終將自己的圖床從 Telegram 存儲遷移到了 Cloudflare R2。
本文會從零開始介紹:
- CloudFlare-ImgBed 部署
- Cloudflare R2 配置
- Telegram 配置
- 自定義域名
- 隨機圖 API
- Random API 522 錯誤修復
- Telegram → R2 遷移
- 成本分析
並記錄實際踩過的坑。
為什麼選 CloudFlare-ImgBed
官方倉庫:
https://github.com/MarSeventh/CloudFlare-ImgBed
CloudFlare-ImgBed 是一個基於 Cloudflare 生態的無服務器圖床系統。
支持:
- Cloudflare R2
- Telegram Bot
- GitHub
- S3
- OSS
- COS
同時提供:
- Web 管理後台
- 圖片分類
- API 上傳
- 隨機圖 API
- 圖片索引
最大的優勢是:
不需要 VPS
不需要資料庫
不需要 Docker
不需要後端服務器全部運行於:
Cloudflare Pages
Cloudflare Workers
Cloudflare R2之上。
第一步:部署 CloudFlare-ImgBed
官方文檔
官方部署文檔:
https://github.com/MarSeventh/CloudFlare-ImgBed/wiki
官方倉庫:
https://github.com/MarSeventh/CloudFlare-ImgBed
Fork 倉庫
打開:
https://github.com/MarSeventh/CloudFlare-ImgBed
點擊:
Fork創建自己的副本。
創建 Cloudflare Pages
官方文檔:
https://developers.cloudflare.com/pages/
登入:
進入:
Workers & Pages選擇:
Create Application然後:
Pages從 GitHub 導入
選擇:
Connect to Git授權 GitHub。
選擇:
CloudFlare-ImgBedFork 出來的倉庫。
構建配置
按照官方默認:
Framework preset:
None
Build command:
留空
Build output directory:
dist部署即可。
首次訪問
部署完成後會得到:
https://xxxxx.pages.dev訪問即可進入圖床後台。
第二步:配置 Cloudflare R2
官方文檔
R2 官方文檔:
https://developers.cloudflare.com/r2/
創建 Bucket
進入:
選擇:
R2點擊:
Create Bucket例如:
imgbed創建 API Token
進入:
R2
↓
Manage R2 API Tokens創建:
API Token記錄:
Access Key ID
Secret Access Key後面配置圖床時會用到。
在 ImgBed 中添加 R2
進入:
系統設置
↓
存儲管理
↓
新增存儲選擇:
Cloudflare R2填寫:
Bucket Name
Access Key ID
Secret Access Key保存。
第三步:配置 Public Development URL
這一步非常重要。
很多人漏掉這一步後:
圖片無法訪問
隨機圖異常
返回 522進入:
Cloudflare Dashboard
↓
R2
↓
Bucket
↓
Settings找到:
Public Development URL開啟。
Cloudflare 會生成:
https://pub-xxxxxxxx.r2.dev然後返回 ImgBed:
存儲配置
↓
Public URL填入:
https://pub-xxxxxxxx.r2.dev注意:
直接打開:
https://pub-xxxxxxxx.r2.dev看到:
404是正常現象。
因為根目錄沒有文件。
第四步:配置 Telegram(可選)
官方 Bot:
創建 Bot
向:
@BotFather發送:
/newbot獲取:
Bot Token創建頻道
建立:
私有頻道添加 Bot
將 Bot 拉入頻道。
授予:
管理員權限獲取 Chat ID
可使用:
https://api.telegram.org/bot<TOKEN>/getUpdates
取得:
Chat ID填入 ImgBed
新增存儲:
Telegram填入:
Bot Token
Chat ID即可。
第五步:配置自定義域名
官方文檔:
https://developers.cloudflare.com/r2/data-access/public-buckets/
推薦:
cdn.example.com而不是:
pub-xxxx.r2.dev綁定完成後:
圖片地址:
https://cdn.example.com/wallpaper/test.png更加美觀。
第六步:配置隨機圖 API (需要的才弄这个 比如让博客背景随着每一次刷新都改变这样)
可以先看官方文档:https://cfbed.sanyue.de/api/random.html
後台:
系統設置
↓
Random API開啟:
Enable Random API允許目錄:
例如:
/Wallpaper或者:
/使用方式:

比如说我配置的背景随机api就是

测试api是否工作
打开https://your.domain/random?dir=wallpaper
返回:
{ "url": "/file/wallpaper/test.png" }
直接返回圖片就把type=img就行:
https://your.domain/random?type=img
返回就直接是图片
我踩過最大的坑:Random API 返回 522
这个真的要把我搞疯了 两个晚上才弄好
最開始:
/random?dir=wallpaper正常。
但:
/random?type=img&dir=wallpaper返回:
errors 522也就是没有直接图片返回 type=img不生效
Cloudflare Logs:
status=200
outcome=ok沒有任何報錯。
Network:
Status Code: 200
Content-Type: text/plain內容就是:
errors 522這說明:
不是 Cloudflare 的 522。
而是程序自己返回的錯誤。
最終定位
文件:
/functions/random/index.js存在:
if (randomType == 'img') {
randomUrl = requestUrl.origin + randomPath;
return new Response(
await fetch(randomUrl)
);
}這裡會:
Worker
↓
再次 fetch 自己
↓
循環請求導致:
errors 522修復方案
替換為:
if (randomType == 'img') {
return Response.redirect(
requestUrl.origin + randomPath,
302
);
}重新部署即可。
Telegram 遷移到 R2
我當時只有121 張圖片:
因此直接:
文件管理
↓
批量下載
↓
批量上傳到 R2即可。
如果圖片很多:
推薦:
Telegram API
+
腳本批量下載
+
R2 批量上傳完成遷移。
R2 收費模式
官方價格:
https://developers.cloudflare.com/r2/pricing/
R2 不是訂閱制。
而是:
按實際使用量計費例如:
存 10GB
付 10GB 的費用增加容量:
直接繼續上傳即可。
不需要升級套餐。
最終方案
我目前使用:
CloudFlare-ImgBed
Cloudflare Pages
Cloudflare R2+telegram channel
自定義域名
優點:
- 無服務器
- 國內速度不錯
- API 完整
- 成本極低
- 支持隨機圖
- 支持分類管理
- 可擴展 Telegram
對於個人博客、Hexo、Hugo、Next.js 圖床來說,這應該是目前最值得推薦的一套 Cloudflare 生態方案。
