当多个实例共享一个 S3 存储桶时,Mastodon remove-orphans 是否安全?

当多个实例共享一个 S3 存储桶时,Mastodon remove-orphans 是否安全?

我有两个 Mastodon v4.2.0 实例,一个暂存服务器和一个实时/生产实例。它们共享一个 AWS S3 存储桶用于文件存储。两者都托管在 DigitalOcean 上。

使用此配置运行命令是否RAILS_ENV=production bin/tootctl media remove-orphans安全?我担心从暂存服务器运行该命令将删除实时服务器所需的文件。

此命令的文档说:

扫描不属于现有媒体附件的文件并将其删除。请注意,某些存储提供商会对列出对象所需的 API 请求收费。此外,此操作需要逐个迭代每个文件,因此速度会很慢。

由此我得知,该命令删除了 Mastodon 数据库中未记录的文件。我担心的问题是,一个实例的数据库中记录的文件在另一个实例中看起来就像孤儿文件。

我担心该remove-orphans命令在两个实例共享的 S3 存储桶上不安全,这是对的吗?

答案1

回答我自己的问题:不,这个命令不一定安全运行。具体来说,如果你的 S3 存储桶(或其他存储介质)中有任何不属于 Mastodon 数据库的文件,那么该命令就是不安全的。

此外,如果您有以下情况,该命令是不安全的超过一个Mastodon 数据库指向同一个 S3 存储桶。就我而言,我有一个指向同一个存储桶的生产实例和一个暂存实例。由于两个实例都不知道另一个实例的文件,因此media remove-orphans在任何一个实例上运行都不安全。

我无意中运行了这个命令一小会儿,然后才发现出了问题。我以前经常bin/tootctl accounts refresh --all从远程服务器恢复本地删除的文件。

相关内容