AVRIL_START_JANCOKALIVEAVRIL_END_JANCOK Interactive Terminal

Command Executor

B2对象存储 – town
town
    Uncategorized 尚无浏览 3 分钟阅读

    B2对象存储

    B2 存储桶挂载 alist 和兰空图床

    B2 存储桶是指 backblaze 的对象存储服务,支持 aws s3 协议,其免费计划有 10G 的空间和 30G 每月的流量,且必须绑定信用卡才可以创建公开桶,否则只能作为私有桶自用,无法对外分享。由于 B2 和 CF 同属一个流量联盟,可以利用 CF 的 CDN 实现无限流量,且可以通过 cf worker 反代实现私有桶的公开访问。下文将一一讲解:

    🏅前置条件

    • 有一个 CF 账号和一个已托管的域名
    • 注册一个 B2 的账号,
      • 注册地址:点此直达
      • 填入一个邮箱,会发送一封验证邮件给你
      • 验证后设置登录密码,登录

    🏅创建一个私有桶

    • 进入 管理页面
    • 点击创建一个桶,记录下页面的端点地址:Endpoint,类似于:s3.eu-central-004.backblazeb2.com (如果要创建公开桶,则必须绑定信用卡,会扣除 1 刀的费用)
    image.png
    image.png
    • 创建访问 ID 和秘钥
      • 点击左侧 Application Keys,再点击 Add a New Application Key注意:是 Application Key 不是 Master Application Key
      • 给秘钥取一个名字,权限选择 Read and Write,其他默认,点击创建,会出现一组 keyID 和 秘钥,记录下来备用。注意:秘钥只会出现 1 次
    image.png
    • 修改桶设定,设置缓存
      • 回到管理页面主页,点击 桶设定
      • 在桶信息处,填写 {"cache-control":"public, max-age=72000"},再点击 更新桶
    • 上传一个文件,获取直链地址,也就是下图中的 友好 URL 和 S3 URL ,记录备用。友好 URL 的格式示例: https://直链域名/file/桶名称/文件名.jpg

    到此,B2 存储桶的设置已经完成(公开桶也是一样,多了一道绑卡的流程),下面转到 CF 去操作

    🏅先说私有桶

    创建一个反代 worker

    • 进入仓库 找到 worker-private.js 文件
    • 复制其所有内容到一个新的 CF WORKER 中
    • 设置以下环境变量
      • ALLOW_LIST_BUCKET = false
      • B2_APPLICATION_KEY = 你创建的应用秘钥
      • B2_APPLICATION_KEY_ID = 你创建的应用 keyID
      • B2_ENDPOINT = 端点域名,例如 s3.eu-central-004.backblazeb2.com,不要 https
      • BUCKET_NAME = 你创建的私密桶名称,例如:b2pan123
    • 绑定一个自定义域名,例如 b2.332211.xyz
    • 现在你已经可以用域名访问桶内的文件了
      • 用你 绑定的域名 替换 友好 URL 的域名/file/桶名称 即可
      • 类似这样的格式:https://b2.332211.xyz/截图.jpg,不要 /file/桶名称

    🏅再说公开桶

    你需要先绑定信用卡创建一个公开桶,创建方法和私有桶基本一致

    打开 CF,在托管域名的 DNS 中设置 CNAME 记录

    • 假设 CF 托管域名为 332211.xyz
    • 在其 DNS 中新增一个 cname 记录
    • 名称:随意,此处以 b2pan 为例
    • 值:填写上面获得的 友好URL 的域名,如:f003.backblazeb2.com,不要带 https
    • 得到 1 个域名:b2pan.332211.xyz,就是你存储桶的代理域名(或者叫自定义域名)

    创建一个 worker,粘贴以下内容,修改汉字部分,部署

    addEventListener(“fetch”, (event) => {
    event.respondWith(handleRequest(event.request));
    });

    async function handleRequest(request) {
    const url = new URL(request.url);
    const newPath = `/file/改为你自己的存储桶名称${url.pathname}`;
    const newUrl = new URL(newPath, url.origin);
    return fetch(newUrl, request);
    }

    给 worker 项目绑定一个路由

    • 区域:选择你的主域名,即 332211.xyz
    • 值:填写 b2pan.332211.xyz/*
    • 现在也可以通过 https://worker域名/文件名.jpg 来访问桶内的文件
    • 示例:https://b2pan.332211.xyz/截图.jpg

    题外话

    • 公开桶不进行 woker 反代也是可以访问桶内文件的
    • 其访问格式为:https://worker域名/file/桶名称/文件名.jpg
    • 示例:https://b2pan.332211.xyz/file/b2pan123/截图.jpg
    • 但是,如果不进行反代,alist 挂载以及兰空图床挂载会失败

    🏅挂载到 Alist

    • 在 alist 中新建一个存储
    • 驱动类型:对象存储
    • 挂载路径:随便填,最前面有个 /
    • webdav 策略:302 重定向
    • 根文件夹路径:/

    🏅挂载到兰空图床(picgo 也是一个道理)

    需要先修改兰空图床的代码

    • 无论你是何种部署方式,找到 lsky-pro/app/Services/ImageService.php 文件,在约 358 行找到这一句代码
    bucket: $configs->get(MinioOption::Bucket),
    • 在它下面追加一行:
    options: [‘params’ => [‘ACL’ => ”]],
    • 示例:
    StrategyKey::Minio => new AwsS3V3Adapter(
    // …
    bucket: $configs->get(MinioOption::Bucket),
    options: [‘params’ => [‘ACL’ => ”]], // <– 这里是新增的一行
    // …
    ),
    • 重启兰空图床的服务

    到兰空管理后台设置存储策略

    不截图了,文字描述一下:

    • 名称:随意
    • 存储策略:Minio
    • 访问域名:你的 worker 项目域名 (私有桶) 或 DNS 的 cname 域名 (公开桶),需要前缀 https://
    • AccessKey:填写 keyID
    • SecretKey:填写应用秘钥
    • 连接地址:你 b2 存储桶的端点地址,需要前缀 https://
    • 区域:可留空,不想留空就填写端点地址的前半截,如 eu-central-003
    • 存储桶名称:填写桶名称
    • 点击保存

    现在已经可以通过兰空图床上传图片并生成直链了

    #cloudflare #反代 #图床 #网盘

    0

    1. 此文章尚无评论

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注