CattoPic 纯 serverless 的图床和 API 综合方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sayyiku
V2EX    分享创造

CattoPic 纯 serverless 的图床和 API 综合方案

  •  
  • nbsp; sayyiku 2 天前 447 次点击

    CattoPic 是什么

    CattoPic 是一个自托管的图片托管服务,提供图片上传、管理和对外服务的完整功能。它的特点在于完全依托 Cloudflare 的 Worker 服务构建后端,前端则可部署在 Vercel 。本项目后端需要使用 worker 的计费计划 Queues 模块,请提前了解相关计费规则。

    Gemini_Generated_Image

    项目的地址:https://github.com/Yuri-NagaSaki/CattoPic
    之前写过一个 Go 的版本:https://github.com/Yuri-NagaSaki/ImageFlow
    博客地址:CattoPic 自托管图片托管服务介绍

    大家反馈自己处理小鸡扛不住,但是实际上图片处理就是非常消耗 cpu 资源,尤其是对于 avif 图片的处理。

    核心功能包括:

    • 多格式图片上传,支持 JPEG 、PNG 、GIF 、WebP 、AVIF
    • 上传后自动转换为 WebP 和 AVIF 格式,节省存储和带宽
    • 标签系统,便于图片分类管理
    • 图片过期时间设置,支持临时图片
    • 公开的随机图片 API ,可用于博客背景或其他场景
    • 横竖屏自动识别,API 可按方向筛选

    技术架构

    CattoPic 的技术选型颇为现代:

    前端

    • Next.js 16 配合 React 19
    • Tailwind CSS 处理样式

    后端

    • Cloudflare Workers 作为计算层,使用 Hono 框架构建 API
    • Cloudflare D1 作为数据库,存储图片元数据和配置
    • Cloudflare R2 作为对象存储,存放图片文件
    • Cloudflare KV 用于缓存
    • Cloudflare Queues 处理异步任务(需付费才能使用)
    • Cron Triggers 定时清理过期图片

    整套后端服务运行在 Cloudflare 的边缘网络上,响应速度和稳定性都有保障。

    部署指南

    部署 CattoPic 需要两个步骤:配置 Cloudflare 后端服务,以及部署前端应用。

    前置准备

    • 一个 Cloudflare 账号
    • 一个 Vercel 账号(用于前端部署)
    • 本地安装 Node.js 和 pnpm
    • 安装 Wrangler CLI:pnpm add -g wrangler

    部署

    部署的文档见项目 readme 。

    项目预览

    image-20251211150620562

    image-20251211150513765

    image-20251211143535339

    image-20251211143623432

    image-20251211143652532

    image-20251211143734939

    image-20251211143804592

    R2 公开访问配置

    R2 存储桶需要配置公开访问才能让图片被外部访问。在 Cloudflare 控制台进入 R2 设置,绑定自定义域名或启用公开访问,记录得到的公开 URL 。

    主要优势

    成本优势

    Cloudflare 的免费额度相当慷慨:

    • Workers:每天 10 万次请求
    • D1:5GB 存储,500 万行读取
    • R2:10GB 存储,100 万次 A 类操作,1000 万次 B 类操作
    • KV:每天 10 万次读取

    对于个人博客或中小站点,这些额度足够日常使用。

    whileFalse
        1
    whileFalse  
       1 天前 via Android
    请问什么地方用到了 queues ?
    sayyiku
        2
    sayyiku  
    OP
       1 天前
    @whileFalse 回收删除图片,异步
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3784 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 01:00 PVG 09:00 LAX 17:00 JFK 20:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86