# 备份的最佳实践

**URL:** https://meta.discourse.org/t/best-practices-for-backups/148630
**Category:** Sysadmins
**Tags:** backups, explanation
**Created:** [2020年四月20日 15:21 UTC](https://meta.discourse.org/t/best-practices-for-backups/148630 "2020-04-20T15:21:23Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2020年四月20日 15:21 UTC](https://meta.discourse.org/t/best-practices-for-backups/148630/1 "2020-04-20T15:21:23Z")

</div>

如果您是自行托管，那么您应该保留异地备份，以防服务器出现灾难性问题。想象一下，某天您的\<服务器提供商\>在没有预警的情况下倒闭了，或者您不小心删除了 `/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。如果您这样做，并将](https://meta.discourse.org/t/setting-up-file-and-image-uploads-to-s3/7229%E3%80%82%E5%A6%82%E6%9E%9C%E6%82%A8%E8%BF%99%E6%A0%B7%E5%81%9A%EF%BC%8C%E5%B9%B6%E5%B0%86) S3 配置信息保存在您可以找到的地方（或保存在您的 `app.yml` 文件中），那么在新服务器设置完成后，您可以直接从 S3 恢复站点。

您可以将设置嵌入到 `app.yml` 文件中。如果在 `app.yml` 的 `env` 部分包含类似以下内容，这些设置将从 Web 界面中消失，您将能够通过 [Restore a backup from the command line](https://meta.discourse.org/t/restore-a-backup-from-command-line/108034) 从命令行恢复备份，而无需创建管理员账户并登录。

```plaintext
  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 中。

### 熟能生巧

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