【个人笔记】将媒体文件同步到Scaleway存储桶(Docker部署长毛象)
本文最后更新于:2022年10月4日 晚上
用docker部署站点的情况下,将媒体文件同步到Scaleway存储桶。本文仅作个人笔记与备忘用,非原创。
参考了以下文章,表示感谢:
https://pullopen.github.io/%E7%AB%99%E7%82%B9%E7%BB%B4%E6%8A%A4/2020/07/22/Move-mastodon-media-to-Scaleway.html
https://www.notion.so/3f645c4a2ab14f34aef37703ee286d3a
关于地区
Scaleway ,该服务商提供如下位置的节点:
- Amsterdam, The Netherlands:
- Region:
nl-ams
- Endpoint:
https://s3.nl-ams.scw.cloud
- Region:
- Paris, France:
- Region:
fr-par
- Endpoint:
https://s3.fr-par.scw.cloud
- Region:
- Warsaw, Poland:
- Region:
pl-waw
- Endpoint:
https://s3.pl-waw.scw.cloud/
- Region:
我们可以登录长毛象服务器的 SSH,利用 Ping 命令来测试从长毛象服务器到外部存储节点的延迟,Ping 的结果数值越低则延迟越小。
例如你想要测试到 [s3.nl-ams.scw.cloud](http://s3.nl-ams.scw.cloud)
的延迟,则输入命令:
1 |
|
使用 Ctrl + C 停止发送 Ping 请求。
比如说 mstdn.homes
到 s3.nl-ams.scw.cloud
的延迟最低。(我尽力了)
1 |
|
创建 Bucket
注册 Scaleway 账户后,点击右上角的 Create
按钮,创建一个 Bucket:
- Name your bucket
- 如果使用自定义域名绑定储存桶,储存桶的名称务必填写媒体服务的子域名,如 [i.mstdn.homes] 或 media.mstdn.homes 等,便于
Cloudflare
的绑定。 - 本教程中,因为我们要绑定 media.mstdn.homes 作为媒体域名,我们将储存桶命名为 media.mstdn.homes。
- 如果使用自定义域名绑定储存桶,储存桶的名称务必填写媒体服务的子域名,如 [i.mstdn.homes] 或 media.mstdn.homes 等,便于
- Choose a Region
- 选择一个距离你的长毛象服务器位置最近的地点(见上方如何选择节点)
- Visibility
- 设置为 Private。请不要设置为 Public,否则任何人都可以看到媒体文件列表。
获取API key
创建 Bucket 成功后,点击右上角账户名 > Credentials 获取 API Key。
你会得到一组密钥,只会显示一次,请立即记录下来。
编辑配置文件
回到长毛象服务器的 SSH,编辑长毛象配置文件:
1 |
|
添加以下内容,注意替换为你的 Bucket 密钥信息:
1 |
|
不填写S3_ALIAS_HOST
的话,会直接从Scaleway的endpoint拉取媒体文件,但是这样从国内访问非常非常慢。用了S3_ALIAS_HOST
可以加上Cloudflare的CDN,会快一些。
在本例中,我们填写的是:
1 |
|
S3_BUCKET
- 填写的是我们创建的桶名称
- 如果使用 Cloudflare,需要以绑定 Cloudflare 的存储桶域名一致
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY
- XXXXXXXXXX 和 YYYYYYYYYY 分别是我们刚刚在 Credential 页面获取的 Key 和 Secret。
S3_REGION
按地区,以 Scaleway 为例:
Amsterdam, The Netherlands 节点:
- S3_REGION 填写:
nl-ams
- S3_HOSTNAME 填写:
s3.nl-ams.scw.cloud
- S3_REGION 填写:
Paris, France 节点:
- S3_REGION 填写:
fr-par
- S3_HOSTNAME 填写:
s3.fr-par.scw.cloud
- S3_REGION 填写:
Warsaw, Poland 节点:
- S3_REGION 填写:
pl-waw
- S3_HOSTNAME 填写:
s3.pl-waw.scw.cloud
- S3_REGION 填写:
S3_ALIAS_HOST:
- 填写了我们绑定 Cloudflare 的存储桶域名
编辑完成后,使用 ctrl + X 退出,按 Y 、回车保存。
保存后,重启 Mastodon:
1 |
|
【docker适用】
1 |
|
绑定 Cloudflare
添加一条 CNAME 记录指向我们刚创建的存储桶:
目标为:
1 |
|
你也可以在 Scaleway 面板的 Bucket Settings 标签页中找到目标地址:
Cloudflare 面板 > DNS > 添加记录 > CNAME,填入名称和目标,点亮代理状态:
Cloudflare 页面规则
添加 DNS 记录后,可以创建页面规则,加大力度缓存媒体文件。特别是对于流量收费的存储服务,可以大大降低成本。
发一张图片,确保图片可以正常上传、显示。
Enjoy ~
迁移已有媒体文件
安装并调试Aws-Cli
打开服务器,进入root用户。安装 awscli
。
aws官方文档如下:
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html
1 |
|
安装完会显示
1 |
|
每次要/usr/local/bin/aws
来使用aws
很麻烦。为了方便我们创建软链接:
1 |
|
就可以直接使用aws了。
1 |
|
按指示依次输入Access Key和Secret Key。Region部分,如果你创建时选择的是巴黎则填写fr-par,阿姆斯特丹则填写nl-ams。Default output format直接回车即可。
1 |
|
迁移原来的文件!
进入mastodon
文件夹,先清理一下文件,运行同步命令:
1 |
|
因为运行时间可能比较长,可以挂在后台运行,将日志文件输出:
1 |
|
如果迁移了原来的文件却发现以前的媒体文件打不开,很可能是
--acl public-read
参数没有加~
如果一切正常,就可以删除public/system
文件夹了~