S3上的多站点备份问题--备份存储在根目录

我在 AWS EC2 上有一个多站点实例。我的备份配置如下:

DISCOURSE_S3_BACKUP_BUCKET: lc-sitename
DISCOURSE_S3_SECRET_ACCESS_KEY: secret-key
DISCOURSE_S3_ACCESS_KEY_ID: key-id
DISCOURSE_BACKUP_LOCATION: s3

多站点实例的备份存储在存储桶的根目录下,但在用户界面列表中没有显示。主站点的备份按预期存储在 default 目录下。这意味着备份在恢复时不可见,并且不会根据设置进行修剪。

多站点配置块如下所示:

        site:
           adapter: postgresql
           database: site
           pool: 25
           timeout: 5000
           host: data
           password: secret
           host_names:
             - community.site.org

会不会是因为没有设置 DISCOURE_USE_S3,导致备份存储在了错误的位置?(我尝试在 discourse.conf 中设置 use_s3,但没有重启 unicorn,而是运行了一个命令行备份,它仍然将其存储在根目录下,而不是子站点的名称下)。

S3 上曾出现过一些上传问题(可能是存储桶配置错误),因此 S3 仅用于备份。

1 个赞

我又花了一个半小时处理这个问题。

其中一个多站点网站正将其上传备份正确地放入正确的目录,但有两个不行。

那些没有放到正确位置的网站是从单个站点实例恢复的数据库,所以我的猜测是数据库中有某些东西强制将备份放入备份文件夹的根目录,而不是站点名称(或默认站点的默认值)。

@gerhard 抱歉打扰您,但您能否快速查看一下,看看我是否忽略了什么明显愚蠢的问题?

是的,上传存储是按设计进行的,如果备份来自单个站点实例,则恢复方式不同。

      was_multisite = BackupMetadata.value_for("multisite") == "t"
      upload_path = "/#{Discourse.store.upload_path}/"
      uploads_folder = was_multisite ? "/" : upload_path

但这不应该是关于备份放在哪里,而不是关于图像恢复到哪里吗?

1 个赞

是的。

没错。

但是,哎呀:

正如我(正确地)之前所说,这个实例(目前?)仅将 S3 用于备份,而不用于上传。

问题在于 3 个子站点中有 2 个的备份被放在了备份存储桶的根目录中。主站点按预期将它们推送到 default,而一个多站点实例将它们推送到 sitename 目录。

1 个赞

嗯,这行为很奇怪。您是指从浏览器上传的备份还是系统创建的备份?

我找不到系统创建的备份会出现在错误位置的原因。代码看起来很简单。

s3_helper 使用正确的存储桶和多站点名称进行配置。

我的意思是,无论是从 Web 界面还是通过 rake 任务为 3 个多站点主机中的 2 个(这两个主机都已从另一台服务器迁移)创建备份,都会将备份上传到备份 S3 存储桶的根目录,而不是上传到 sitename/backupname

这对我来说也很奇怪。

我将尝试在这些函数中添加一些 puts 来查看是否能追踪到问题所在。

我认为我 putssource_path,它在操作系统中具有正确的完整路径,但当它上传到 S3 时,站点名称已不在路径中。

下周我将再次仔细查看。备份在那里,只是 Discourse 找不到它们。