配置 Discourse 的自动备份

:bookmark: 本指南说明了如何为 Discourse 配置自动备份,包括在本地服务器和 S3 兼容存储上的存储选项。

了解如何为您的 Discourse 平台设置自动备份。

本指南涵盖了配置自动备份、将其存储在本地服务器或 S3 兼容存储上,以及管理存储保留选项(如 Amazon Glacier)。

配置自动备份

  1. 导航到 /admin 设置。
  2. 选择 Backup (备份) 部分。
  3. backup_frequency 设置为您想要的间隔天数。默认值为 7 (每周)。设置为 1 进行每日备份,或设置为 0 以禁用自动备份。最大值为 30

backup_frequencybackup_frequency100%75%50%

附加备份设置

  • backup_time_of_day — 备份运行的每日时间 (UTC)。默认值: 3:30
  • backup_with_uploads — 在计划的备份中包含上传文件。默认值: 已启用。禁用此项将仅备份数据库。
  • maximum_backups — 要保留的最大备份数。旧的备份会自动删除。默认值: 5
  • remove_older_backups — 删除早于指定天数的备份。留空表示禁用。

将备份存储在本地服务器上

默认情况下,备份存储在您的本地服务器上。对于自托管实例,请在 /var/discourse/shared/standalone/backups/default 访问它们。

将备份存储在 S3 兼容存储上

使用管理面板

  1. 创建一个 S3 存储桶 (bucket)。
  2. 在管理面板中设置 s3_backup_bucket
  1. 配置 s3_access_key_ids3_secret_access_keys3_region
  2. backup_location 设置为 “S3”。

image

:warning: 警告

将备份和常规上传存储在相同的存储桶和文件夹中已不再受支持,并且将无法工作

s3_backup_bucket 路径应用于备份。如果您需要使用包含其他文件的存储桶,请确保在配置 s3_backup_bucket 设置时提供一个前缀(示例:my-awesome-bucket/backups),并确保带有该前缀的文件是私有的。

从现在起,所有备份都将上传到 S3,而不再存储在本地。本地存储将仅用于备份和恢复期间的临时文件。

转到管理仪表板中的 Backups (备份) 选项卡以浏览备份——您可以随时下载它们以进行手动异地备份。

app.yml 中使用环境变量

您还可以使用 app.yml 中的环境变量配置 S3 备份。有关更多信息,请参阅 为上传配置 S3 兼容对象存储提供商

请注意,上述文章涵盖了 app.yml 中用于备份文件/图像上传的 S3 设置。如果您想将 S3 用于备份(而不是用于文件/图像上传),则可以从 app.yml 配置中省略以下参数:

  • DISCOURSE_USE_S3
  • DISCOURSE_S3_CDN_URL
  • DISCOURSE_S3_BUCKET

在这种情况下,您也无需配置 after_assets_precompile 步骤,也无需配置 CDN。

请确保包含您的存储提供商所需的所有其他参数,如文章所述。以下是一个仅激活 S3 备份的示例配置(针对 Scaleway S3):

DISCOURSE_S3_REGION: nl-ams
DISCOURSE_S3_ENDPOINT: https://s3.nl-ams.scw.cloud
DISCOURSE_S3_ACCESS_KEY_ID: my_access_key
DISCOURSE_S3_SECRET_ACCESS_KEY: my_secret_access_key
DISCOURSE_S3_BACKUP_BUCKET: my_bucket/my_folder
DISCOURSE_BACKUP_LOCATION: s3

归档到成本更低的存储

请注意,在 AWS S3 上,您还可以启用 Glacier 存储桶生命周期规则的自动迁移,以保持您的 S3 备份成本较低。其他存储提供商通常也有类似的服务。

59 个赞

You are able to Archive Backups from your S3 Bucket to Glacier.
It is cheaper, but an Restore attemps more Time.

This Site will Help you to reduce Backup costs.:

11 个赞

Setting this up can be rather confusing. Here’s a simple guide to help you out.

  • Log into your Discourse admin panel
  • Configure daily backups
  • Set maximum backups to 7
  • Log into your Amazon Web Services account
  • Go in the S3 Dashboard
  • Open the bucket containing the backups
  • Click on the properties tab
  • Activate versioning
  • Open the Lifecycle menu
  • Add a rule for the whole bucket
  • Set current version to expire after 15 days
  • Set previous version to
  • Archive to Glacier after 1 days
  • expire after 91 days
  • Save and logout

How it works

Versioning will keep backups automaticly deleted by Discourse. One day after beeing deleted it will be moved to the Glacier storage. After 91 days it will be delete from the Glacier storage.

Warning

Amazon charge you for item stored in Glacier for 90 days even if you delete them before. Make sure your Glacier Lyfecicle keep your file at least 90 days.

11 个赞

I may have missed this, but how to I make sure a bucket for backups is private the proper way? Setting up file and image uploads to S3 doesn’t seem to be described here.

1 个赞

Looks like there is no such option anymore.

UPD: ah, now it’s split into 2 steps of this wizard.

So I guess it should be like this:

2 个赞

如果为实例分配了 AWS 角色,并在“设置”菜单中启用了 s3 use iam profile,S3 备份功能是否可以在没有 IAM 访问密钥和密钥的情况下正常工作?

编辑:答案是肯定的!只需确保正确设置了区域即可。

1 个赞

我也遇到过这个问题,通过在策略文档中添加几行代码解决了:

"Resource": [
        "arn:aws:s3:::your-uploads-bucket",
        "arn:aws:s3:::your-uploads-bucket/*",
        "arn:aws:s3:::your-backups-bucket",
        "arn:aws:s3:::your-backups-bucket/*"
      ]

这是否应该添加到原始帖子(OP)中(该帖子不是 wiki)?或者也许应该添加到 Set up file and image uploads to S3 的原始帖子(OP)中?

2 个赞

是否有充分的理由不将每日备份设为默认选项?

原帖需要修正之处

添加关于将 S3 备份移至 Glacier 的内容?
删除 S3 相关内容,并链接到 Configure an S3 compatible object storage provider for uploads

那样会过度且昂贵。这就像我们不建议每 500 英里就更换一次汽车机油一样。

你们每周备份一次服务器?

我认为你之前提到的“每 500 英里换一次机油”的类比,很适合用来回答“为什么不保留 30 个备份?”这个问题,但在这里似乎不太适用。

难道你不觉得,如果人们要保留 5 个备份,大多数人会更希望每天备份一次吗?这样即使需要恢复到某个备份,他们最多也只会丢失一天的数据。我记得唯一一次旧备份派上用场的情况,是当图片从“墓碑”中丢失时。

如果他们的磁盘空间少到连 5 个备份都存不下,那么让他们在 5 天内就意识到这一点(此时他们还记得自己做了什么)似乎比等待 4 到 5 周要好得多。

1 个赞

是的,没错,这是针对我自己托管的服务器。

如果你偏好不同的设置,请随意从默认值开始修改。有什么阻碍你这样做吗?

1 个赞

哎呀,真没想到!

我正在清理像这样的主题。如果默认设置被更改,那就不需要了!

我相信默认设置不会被更改,所以我会继续推进。:wink

2 个赞

每周一次是一个不错的起点,也是一个稳妥的默认选项。

1 个赞

我也遇到了完全相同的问题!

建议在初始帖子中也添加一条关于此问题的说明!

3 个赞

如果能用于上传到其他兼容 S3 的提供商(例如运行 MinIO)那就太好了。

如果您想使用 MinIO,请参阅 使用对象存储进行上传(S3 及其克隆)。如果您希望备份和资产使用不同的服务,那恐怕行不通(尽管可以通过设置触发器将数据从一个存储桶复制到另一个存储桶)。

不,只是为了备份,这样它们会自动推送到我网络中的另一台机器上。

那么,我链接的指南正是您需要的。

1 个赞

能否比每天一次更频繁?我宁愿不做假设,将备份频率设置为浮点数。

1 个赞

如果您需要更频繁的备份,则需要从外部执行备份。

3 个赞