利用 CloudFlare R2 搭建图床/视频床!无服务器快速部署! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
740moe
V2EX    分享发现

利用 CloudFlare R2 搭建图床/视频床!无服务器快速部署!

  •  
  •   740moe 2024-12-17 21:33:01 +08:00 2501 次点击
    这是一个创建于 386 天前的主题,其中的信息可能已经有所发展或是发生改变。

    支持 worker && pages 部署!使用 pages 部署可以 fork 仓库,或者下载_worker.js 文件打包成压缩文件上传!

    免费套餐介绍

    • 存储: 每月 10 GB
    • A 类操作: 每月 100 万次请求
    • B 类操作: 每月 1000 万次请求
    • 出口(数据传输到互联网): 免费

    个人使用完全足够!图床默认开启压缩,可以储存更多的图片文件!

    功能特点

    • 查看本地历史记录
    • 可选的访客验证功能
    • 单文件最大支持 20MB
    • 支持多文件上传和粘贴上传
    • 支持批量操作和显示上传时间
    • 图片自动压缩( GIF 和视频除外)
    • Cloudflare Cache API 缓存支持
    • 基于 Cloudflare R2 的文件存储
    • 支持多种链接格式( URL 、BBCode 、Markdown )
    • 支持常见的图片和视频格式( jpg 、png 、gif 、mp4 )

    部署教程:

    1. 环境变量说明

    需要在 Cloudflare Workers 中配置以下环境变量:

    变量名 说明 必填 示例
    DOMAIN 自定义域名 example.workers.dev
    DATABASE D1 数据库绑定变量名称 DATABASE
    USERNAME 管理员用户名 admin
    PASSWORD 管理员密码 password123
    ADMIN_PATH 管理后台路径 admin
    ENABLE_AUTH 访客验证(设置为 true 开启,不设置或设置为 false 则关闭) false
    R2_BUCKET R2 存储桶名称 R2_BUCKET

    2. 创建 R2 存储桶

    1. 登录 Cloudflare Dashboard
    2. 进入 R2 对象储存创建存储桶
    3. 设置存储桶名称和区域
    4. 保存存储桶的名称以便后续使用

    3. 创建 D1 数据库

    1. 登录 Cloudflare Dashboard
    2. 进入 Workers & PagesD1 SQL 数据库
    3. 点击 创建 创建数据库
      • 数据库名称可自定义,例如 images
      • 建议选择数据库位置为 亚太地区,可以获得更好的访问速度
    4. 创建数据表:
      • 点击数据库名称进入详情页
      • 选择 控制台 标签
      • 执行以下 SQL 语句:
    CREATE TABLE media ( url TEXT PRIMARY KEY ); 

    4. 创建 Worker

    1. 进入 Workers & Pages
    2. 点击 创建
    3. 选择 创建 Worker
    4. 为 Worker 设置一个名称
    5. 点击 部署 创建 Worker
    6. 点击继续处理项目

    5. 配置环境变量

    1. 在 Worker 的 设置变量和机密
    2. 点击 添加 添加变量
    3. 点击 部署

    6. 绑定数据库和 R2 储存

    1. 在 Worker 设置页面找到 设置绑定
    2. 点击 添加
    3. 选择 D1 数据库
    4. 设置变量名为 DATABASE
    5. 选择之前创建的数据库
    6. 点击 部署
    7. 重复上述步骤绑定 R2 储存,变量名为 R2_BUCKET

    7. 绑定域名

    1. 在 Worker 的 设置域和路由
    2. 点击 添加自定义域
    3. 输入你在 Cloudflare 绑定的域名
    4. 点击 添加域
    5. 等待域名生效

    8. 部署代码

    1. 进入 Worker 的编辑页面
    2. _worker.js 的完整代码复制粘贴到编辑器中
    3. 点击 部署

    9. 配置缓存

    1. 进入 Cloudflare Dashboard
    2. 进入 网站选择你的自定义域名缓存Cache Rules创建缓存规则
    3. 选择 缓存所有内容模板
    4. 设置 边缘 TTL忽略缓存控制标头,使用此 TTL30 天(根据需要设置)
    5. 点击 部署

    源码: https://github.com/0-RTT/JSimages

    测试: image

    image

    9 条回复    2024-12-19 23:48:21 +08:00
    mayli
        1
    mayli  
       2024-12-18 06:33:31 +08:00
    域名不错
    hanguofu
        2
    hanguofu  
       2024-12-18 10:17:07 +08:00
    谢谢分享。请问在哪里可以设置 访问图床/视频床的频次 ?
    740moe
        3
    740moe  
    OP
       2024-12-18 16:42:58 +08:00
    @hanguofu cf 的防火墙配置规则估计可以
    Lunrry
    nbsp;   4
    Lunrry  
       2024-12-18 21:10:14 +08:00
    按照你的步骤来,上传图片报错:R2 上传错误: TypeError: R2_BUCKET.put is not a function
    at handleUploadRequest (worker.js:881:21)
    at async Object.fetch (worker.js:20:44)
    at async jsonError (.internal-0c998967-b…e-facade-1.js:12:12)
    at async jsonError (.internal-0c998967-b…e-facade-1.js:12:12)
    at async jsonError (.internal-0c998967-b…e-facade-1.js:12:12)
    at async jsonError (.internal-0c998967-b…e-facade-1.js:12:12)
    740moe
        5
    740moe  
    OP
       2024-12-18 22:28:39 +08:00
    @Lunrry 估计变量没对。照着 readme 弄下吧。我更新了下部署的流程。https://github.com/0-RTT/JSimages/blob/main/README
    Lunrry
        6
    Lunrry  
       2024-12-19 10:37:01 +08:00
    @740moe #5 现在可以使用了,请问有将其接入到 picgo 的方案吗
    liulicaixiao
        7
    liulicaixiao  
       2024-12-19 20:49:55 +08:00
    op 的域名: https://baipiao.de/ 非常好
    740moe
        8
    740moe  
    OP
       2024-12-19 23:48:05 +08:00
    @Lunrry 目前没有,让 gpt 帮你试试。我没用过 picgo
    740moe
        9
    740moe  
    OP
       2024-12-19 23:48:21 +08:00
    @liulicaixiao 嘿嘿
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3326 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 12:08 PVG 20:08 LAX 04:08 JFK 07:08
    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