备份的最佳实践

如果您是自行托管,那么您应该保留异地备份,以防服务器出现灾难性问题。想象一下,某天您的<服务器提供商>在没有预警的情况下倒闭了,或者您不小心删除了 /var/discourse,导致整个安装被清除。

最低要求

请确保已启用备份。

需要考虑的站点设置:

  • enable backups(启用备份):开启(默认开启)
  • backup frequency(备份频率):您愿意承受多少数据丢失?(默认:7 天)。@pfaffman 建议设置为 1 天
  • backup time of day(备份时间):您希望在一天中的何时让论坛处于只读状态以进行备份?
  • backup with uploads(备份包含上传文件):开启,除非您将上传文件存储在其他位置或采用其他方式备份。(默认:开启)
  • maxiumum backups(最大备份数量):您有多谨慎?您有多少磁盘空间?(默认:5)

这将允许您在数据库意外损坏时恢复到最近的备份,但如果您的 Discourse 服务器完全消失,则无法提供保护。

异地备份

要在新的服务器上恢复您的站点,至少需要 Discourse 创建的备份文件。如果您拥有 /var/discourse//containers 目录中的容器文件,设置新服务器会容易得多。

具体如何保留异地备份已超出本文档的范围,但一种方法是使用类似 rsync 的工具将数据复制到远程服务器。有许多相关指南可供参考,请选择最适合您的一种。

您的 /var/discourse/containers 文件变化频率较低,因此仅在做出更改时手动备份这些文件并不会太麻烦。这些文件通常包含您的 SMTP 配置和插件,虽然凭记忆重建它们相对容易,但在紧急情况下您肯定不希望这样做。如果发生这种情况,您仍然可以重新启用服务,即使缺少一些插件且邮件功能暂时失效,也可以先让站点勉强运行,然后再逐步修复其余部分。

备份到 S3

保留异地备份最便捷的方式是将其推送到 S3,具体方法请参考:https://meta.discourse.org/t/setting-up-file-and-image-uploads-to-s3/7229。如果您这样做,并将 S3 配置信息保存在您可以找到的地方(或保存在您的 app.yml 文件中),那么在新服务器设置完成后,您可以直接从 S3 恢复站点。

您可以将设置嵌入到 app.yml 文件中。如果在 app.ymlenv 部分包含类似以下内容,这些设置将从 Web 界面中消失,您将能够通过 Restore a backup from the command line 从命令行恢复备份,而无需创建管理员账户并登录。

  DISCOURSE_S3_ACCESS_KEY_ID: 'key'
  DISCOURSE_S3_SECRET_ACCESS_KEY: 'secret'
  DISCOURSE_BACKUP_LOCATION: 's3'
  DISCOURSE_ENABLE_S3_UPLOADS: true
  DISCOURSE_S3_BACKUP_BUCKET: 'my-backup-bucket'
  DISCOURSE_S3_REGION: 'us-west-1'

如果您也将上传文件存储在 S3 中,并且信任 S3 提供商的稳定性,您可以让 Discourse 仅备份数据库(参见上述设置)。这样可以避免存储多份所有上传文件的副本。如果选择此方案,您应执行一次测试恢复,以确保所有上传文件确实都已保存在 S3 中。

熟能生巧

虽然仅保留最新备份的副本是危机恢复的最低要求,但如果您想真正确保备份有效,则至少应测试一次,最好定期进行。启动一台新服务器,看看能否从备份中成功恢复。

30 个赞