跳转主页

pleroma添加R2存储及媒体代理

·614 字·2 分钟
Pleroma 媒体代理
目录

感谢鱼,这篇 Akkoma / Pleroma 的媒体相关配置参考很多

设置上传文件夹

1. R2储存桶创建及设置

登录cloudflare,在R2中新建存储桶,设定桶名称、选择地区

创建完毕,进入,

  • 设置 - 公开访问 - 添加自定义域

  • 编辑CORS策略

[
  {
    "AllowedOrigins": [
      "http://example.com"
    ],
    "AllowedMethods": [
      "GET"
    ]
  }
]

2. R2 API令牌

返回R2 概述页面,点击管理 R2 API 令牌

创建API令牌,根据需求选择“对象读和写”,“仅用于特定存储桶”,点击按钮创建API令牌。

创建成功后,出现令牌值; 访问密钥 ID; 机密访问密钥 ,此页面仅出现一次,务必保存好。

3. 设置upload

各项说明参考 普莱罗马文档 配置备忘单 - upload

打开 pleroma 的 Admin-FE ,在 Settting - upload中进行填写。

字段 填写内容
Uploader S3
Filters Dedupe; Exiftool.StripLocation; AnalyzeMetadata; AnonymizeFilename; Exiftool.ReadDescription
Link name 开启
Base URL https://Domains
Access key R2 API 访问密钥 ID
Secret access key R2 API 机密访问密钥
Host XXXXXXXXXXXXXX.r2.cloudflarestorage.com
Region R2中选择的桶地区
Bucket R2中设定的桶名称
Streaming enabled 开启

填写完成,Submit提交,重启服务后尝试手动上传图片试试。

4. 迁移本地文件至S3储存

Managing uploads

以上成功后,使用命令将媒体文件迁移至S3储存,其中--delete在迁移完成后删除本地文件

su pleroma -s $SHELL -lc "./bin/pleroma_ctl uploads migrate_local S3 --delete" 

配置媒体代理

  1. 创建Worker

cloudflare - Worker和Pages 中 创建应用程序,选择 常见 Worker 示例

点击 快速编辑

粘贴一下

function decodeBase64 (str) {
  try {
    return atob(str)
  } catch (e) {
    console.log(e)
    return null
  }
}
export default {
  async fetch(request, env) {
    const url = new URL(request.url)
    const pathList = url.pathname.split('/') || []
    const mediaUrl = decodeBase64(pathList[3] || '')
    if (!mediaUrl) {
      return new Response('')
    }
    console.log(mediaUrl)
    return fetch(mediaUrl, {
      headers: request.headers
    })
  }
}

保存并部署。

  1. 在 触发器 中添加自定义域。

  2. 回到 Admin-FE ,打开 Media Proxy

字段 填写内容
Mediaproxy.Enabled 开启
Base URL Worker中的自定义域
Invalidation.Enabled Pleroma.Web.MediaProxy.Invalidation.Http
Mediapreviewproxy.Enabled 开启

提交后重启服务。