- 摘要
- Setting up DigitalOcean Spaces for XenForo 2.1+ video uploads simplifies remote file storage, ensuring smooth integration with Flysystem. This guide walks you through setting up DigitalOcean Spaces and configuring XF to use it, including creating API credentials and adjusting XF's config.php for optimal performance. For those preferring Amazon S3, the process is similar but skips DigitalOcean Spaces setup.
XenForo 版本兼容性
下载仅适用于 XenForo 2.1 及以上版本。
为什么编写此指南?
自 XenForo 2.0.0 起,我们就支持使用远程文件存储。abstracted file system named Flysystem它是被称为抽象文件系统的,因为它在代码和一个文件系统之间添加了一层抽象。这意味着它为执行文件系统操作提供了一个一致的API,无论文件系统是本地磁盘驱动器上的文件系统还是分布式的、远程访问的文件系统,我们的代码都会调用相同的函数,Flysystem会处理其余部分。
虽然这很有用,但设置起来并不明显或直接,因此这个指南及其附带插件将有所帮助。
所以,如果你计划使用video uploads function在XF 2.1及以上版本中,如果你担心会增加磁盘空间需求,这将有所帮助。将所需的文件提供可用虽然你可以自己下载文件并设置像自动加载器这样的东西,你可能会更喜欢直接下载附带此资源的扩展程序。你可以在install the add-on in the usual fashion在你开始之前如果你是在现有站点上设置,你需要手动将现有的文件移动过来。这部分内容在后面有介绍。在你移动现有文件、设置和测试时,我们建议先关闭论坛。设置 DigitalOcean Spaces我们将首先处理,因为它是最简单设置的。如果你愿意使用Amazon S3,请跳到下一步。设置Amazon S3下 面 的 部 分 。
现在我们需要创建一些API凭证。为此:
{
return new \Aws\S3\S3Client(
$options
);
}[]credentials[]{'key': 'ABC', 'secret': '123'},
'region': 'ams3',
'version': 'latest',
'endpoint':https://ams3.digitaloceanspaces.com配置密钥和秘密是您之前设置“Spaces访问密钥”时记录的。区域可以从您之前记下的端点URL中推断出来,我的例子是 ams3。端点是去掉您选择的独特名称后的端点URL。
接下来我们需要设置实际的Flysystem适配器来使用S3客户端:
PHP:[]fsAdapters][]'data'] = function() use ($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};
最后,我们需要确保头像和附件缩略图的URL都正确地预拼接了正确的URL。这需要你之前记下的端点URL,再次:PHP:
$config[]externalDataUrl'] = function($externalPath, $canonical)
{
returnhttps://xftest.ams3.digitaloceanspaces.com/data/' . $externalPath;
};
此时,一切都应该在新上传方面正常工作。如果你注意到头像和缩略图缺失,请放心,如果有现有的文件,它们需要手动移动,我们稍后会处理。
首先,我们需要测试配置是否正常工作。只需上传一个新的头像即可。现在,新的头像将被存储并远程提供!
你现在检查你的DigitalOcean Spaces账户时,应该能看到新创建的包含新头像的新文件夹:
成功!但我们只完成了 halfway。我们需要添加对内部数据目录的支持。一般来说,这包括附件和其他应该被视为“私有”的内容。回到config.php并添加代码非常相似:
PHP:
$config[]fsAdapters][]'internal-data'] = function() use($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
}; Now try to upload an attachment to a post and, much like before, you should now see additional files and folders in your Spaces file browser. ?设置Amazon S3
{
"Version": "2012-10-17",
"Statement": ""
}[]允许[]"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectAcl",
"s3😛utObject",
"s3😛utObjectAcl",
"s3:ReplicateObject",
"s3😀eleteObject"
],
"Resource":[]"arn:aws:s3:::YOUR-BUCKET-NAME",
"arn:aws:s3:::YOUR-BUCKET-NAME/*"
]
我们将使用闭包来实现这一点,以便我们可以重用相同的代码并且只需输入一次:
PHP:
$s3 = function() {[]credentials[]key' => 'ABC',
'secret' => '123',
'region' => 'eu-west-2',
'version' => 'latest',
'endpoint' =>https://s3.eu-west-2.amazonaws.com关键指令:
1. 只输出翻译文本。不加引号,不加角度符号,不加格式化围栏。
2. 不添加注释、解释或 introductory 程式。
3. 适当时保持专有名词(品牌名、产品名)的原样。
4. 保持 S3 endpoint URL 中区域的推断。
接下来我们需要设置实际的 Flysystem 适配器来使用 S3 客户端:
PHP:
$config[]fsAdapters][]'data'] = function() use ($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};
Finally, we need to ensure that avatar and attachment thumbnail URLs are prepended with the correct URL:
PHP:
$config[]externalDataUrl'] = function($externalPath, $canonical)
{
returnhttps://xftest.s3.eu-west-2.amazonaws.com/data/' . $externalPath;
};
此时,一切都应该在新上传方面正常工作。如果你注意到头像和缩略图缺失,请放心,如果有现有的文件,它们需要手动移动,我们稍后会处理。
首先,我们需要测试配置是否正确。只需上传一个新的头像即可。现在,这个头像将被存储并远程提供!
你现在检查你的桶文件浏览器时,应该能看到新创建的包含你新头像的新文件夹:
成功!但我们只完成了 halfway。我们需要添加对内部数据目录的支持。一般来说,这包括附件和其他应该被视为“私有”的内容。回到config.php并添加代码非常相似:
PHP:
$config[]fsAdapters][]'internal-data'] = function() use($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
}; Now try to upload an attachment to a post and, much like before, you should now see additional files and folders in your bucket file browser. ?将现有文件移动到DigitalOcean Spaces或Amazon S3有几个方法可以与Spaces和S3交互,以便轻松地将你现有的内容转移到远程。尽管这是一项一次性操作,但根据文件的数量和大小,可能需要花费相当长的时间。
管理这个过程有几种方式,但最好的做法是使用一个名为的工具s3cmd一个流行的跨平台命令行工具,用于管理S3和兼容的存储桶。
安装s3cmd工具到服务器上,并运行命令来将文件复制到新的位置,无论你使用的是Spaces还是S3都是可能的。
为了避免重复编写内容,我将留给你DigitalOcean的一份指南,该指南详细介绍了如何使用s3cmd迁移现有的文件。
下载仅适用于 XenForo 2.1 及以上版本。
为什么编写此指南?
自 XenForo 2.0.0 起,我们就支持使用远程文件存储。abstracted file system named Flysystem它是被称为抽象文件系统的,因为它在代码和一个文件系统之间添加了一层抽象。这意味着它为执行文件系统操作提供了一个一致的API,无论文件系统是本地磁盘驱动器上的文件系统还是分布式的、远程访问的文件系统,我们的代码都会调用相同的函数,Flysystem会处理其余部分。
虽然这很有用,但设置起来并不明显或直接,因此这个指南及其附带插件将有所帮助。
所以,如果你计划使用video uploads function在XF 2.1及以上版本中,如果你担心会增加磁盘空间需求,这将有所帮助。将所需的文件提供可用虽然你可以自己下载文件并设置像自动加载器这样的东西,你可能会更喜欢直接下载附带此资源的扩展程序。你可以在install the add-on in the usual fashion在你开始之前如果你是在现有站点上设置,你需要手动将现有的文件移动过来。这部分内容在后面有介绍。在你移动现有文件、设置和测试时,我们建议先关闭论坛。设置 DigitalOcean Spaces我们将首先处理,因为它是最简单设置的。如果你愿意使用Amazon S3,请跳到下一步。设置Amazon S3下 面 的 部 分 。
- []前往哪里DigitalOcean Cloud页面上注册或登录。[]*[此时,如果你是新用户到DigitalOcean,你可能需要设置账单。[]你现在将能够创建一个新的项目。[]点击“开始使用Spaces”链接。[]选择您的数据中心区域(我选择了阿姆斯特丹)。[]
- 选中“限制文件列表”[]选择一个独特名称(我选择了“xftest”)[]点击“创建空间”
现在我们需要创建一些API凭证。为此:
- []
- 点击左侧边栏的“管理”。[]点击“API”。[]
- 在“Spaces访问密钥”部分点击“生成新密钥”。[]输入钥匙的名字(再次我选择了“xftest”)并保存。
{
return new \Aws\S3\S3Client(
$options
);
}[]credentials[]{'key': 'ABC', 'secret': '123'},
'region': 'ams3',
'version': 'latest',
'endpoint':https://ams3.digitaloceanspaces.com配置密钥和秘密是您之前设置“Spaces访问密钥”时记录的。区域可以从您之前记下的端点URL中推断出来,我的例子是 ams3。端点是去掉您选择的独特名称后的端点URL。
接下来我们需要设置实际的Flysystem适配器来使用S3客户端:
PHP:[]fsAdapters][]'data'] = function() use ($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};
最后,我们需要确保头像和附件缩略图的URL都正确地预拼接了正确的URL。这需要你之前记下的端点URL,再次:PHP:
$config[]externalDataUrl'] = function($externalPath, $canonical)
{
returnhttps://xftest.ams3.digitaloceanspaces.com/data/' . $externalPath;
};
此时,一切都应该在新上传方面正常工作。如果你注意到头像和缩略图缺失,请放心,如果有现有的文件,它们需要手动移动,我们稍后会处理。
首先,我们需要测试配置是否正常工作。只需上传一个新的头像即可。现在,新的头像将被存储并远程提供!
你现在检查你的DigitalOcean Spaces账户时,应该能看到新创建的包含新头像的新文件夹:
PHP:
$config[]fsAdapters][]'internal-data'] = function() use($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
}; Now try to upload an attachment to a post and, much like before, you should now see additional files and folders in your Spaces file browser. ?设置Amazon S3
- []前往哪里AWS Management Console页面上注册或登录。[]
- 在“AWS服务”部分输入“S3”,以访问“S3控制台”。[]点击“创建桶”。[]选择一个桶名(我已经选择了xftest)。[]选择一个地区(我选择了EU伦敦)。[]接受所有进一步的默认选项直到创建桶。[]你现在需要去“IAM”控制台。[]点击“添加用户”。[]选择一个用户名(哦耶,我再次使用了xftest吧)。[]将访问类型设置为“程序化”。[]
- 设置权限,点击“直接附加现有策略”标签然后点击“创建策略”按钮。[]*]IAM和各种政策和权限可能会相当令人望而却步。不过你可以有不同的要求。在这一页上有一个标签叫做“JSON”。将以下内容粘贴到那里,用你之前选择的桶名称替换YOUR-BUCKET-NAME:
{
"Version": "2012-10-17",
"Statement": ""
}[]允许[]"s3:ListBucket",
"s3:GetObject",
"s3:GetObjectAcl",
"s3😛utObject",
"s3😛utObjectAcl",
"s3:ReplicateObject",
"s3😀eleteObject"
],
"Resource":[]"arn:aws:s3:::YOUR-BUCKET-NAME",
"arn:aws:s3:::YOUR-BUCKET-NAME/*"
]
- []点击“查看政策”并给它起个名字然后保存。[]返回上一页,点击“刷新”按钮,搜索你刚刚创建的政策。[]点击“下一步”,然后选择“创建用户”。
我们将使用闭包来实现这一点,以便我们可以重用相同的代码并且只需输入一次:
PHP:
$s3 = function() {[]credentials[]key' => 'ABC',
'secret' => '123',
'region' => 'eu-west-2',
'version' => 'latest',
'endpoint' =>https://s3.eu-west-2.amazonaws.com关键指令:
1. 只输出翻译文本。不加引号,不加角度符号,不加格式化围栏。
2. 不添加注释、解释或 introductory 程式。
3. 适当时保持专有名词(品牌名、产品名)的原样。
4. 保持 S3 endpoint URL 中区域的推断。
接下来我们需要设置实际的 Flysystem 适配器来使用 S3 客户端:
PHP:
$config[]fsAdapters][]'data'] = function() use ($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'data');
};
Finally, we need to ensure that avatar and attachment thumbnail URLs are prepended with the correct URL:
PHP:
$config[]externalDataUrl'] = function($externalPath, $canonical)
{
returnhttps://xftest.s3.eu-west-2.amazonaws.com/data/' . $externalPath;
};
此时,一切都应该在新上传方面正常工作。如果你注意到头像和缩略图缺失,请放心,如果有现有的文件,它们需要手动移动,我们稍后会处理。
首先,我们需要测试配置是否正确。只需上传一个新的头像即可。现在,这个头像将被存储并远程提供!
你现在检查你的桶文件浏览器时,应该能看到新创建的包含你新头像的新文件夹:
PHP:
$config[]fsAdapters][]'internal-data'] = function() use($s3) {
return new \League\Flysystem\AwsS3v3\AwsS3Adapter($s3(), 'xftest', 'internal_data');
}; Now try to upload an attachment to a post and, much like before, you should now see additional files and folders in your bucket file browser. ?将现有文件移动到DigitalOcean Spaces或Amazon S3有几个方法可以与Spaces和S3交互,以便轻松地将你现有的内容转移到远程。尽管这是一项一次性操作,但根据文件的数量和大小,可能需要花费相当长的时间。
管理这个过程有几种方式,但最好的做法是使用一个名为的工具s3cmd一个流行的跨平台命令行工具,用于管理S3和兼容的存储桶。
安装s3cmd工具到服务器上,并运行命令来将文件复制到新的位置,无论你使用的是Spaces还是S3都是可能的。
为了避免重复编写内容,我将留给你DigitalOcean的一份指南,该指南详细介绍了如何使用s3cmd迁移现有的文件。
s3cmd 2.x Setup :: DigitalOcean Product Documentation
s3cmd 是一款流行的跨平台命令行工具,用于管理 S3 和兼容的 S3 存储桶。使用 s3cmd 需要:版本 2.0.0+ 或更高。你可以通过 s3cmd --version 检查你的版本。来自包管理器的版本可能过时了,所以我们建议你使用 s3cmd...www.digitalocean.com注意:当复制您现有的数据文件时,它们需要设置为公共。您可以将ACL设置为公共以进行复制:Examples of s3cmd 2.x Usage with DigitalOcean Spaces :: DigitalOcean Documentation
S3CMD 命令示例,用于在 Spaces 中进行常见操作,如上传和管理文件、设置权限和加密。www.digitalocean.com