如何从每日备份中自动恢复我的 Heroku Postgres 登台数据库?

How can I automatically restore my Heroku Postgres staging database from a daily backup?

我已将我的 Heroku 生产数据库安排为每天进行备份,并且我还想每天将备份恢复到我的暂存数据库中。通过这种方式,我可以使暂存盒与生产保持同步以达到 testing/debugging 目的,并每天自动测试恢复过程 运行。

我已尝试将 bash 脚本安排到暂存箱上的 运行 以执行恢复。我的脚本使用 Heroku CLI 提取最新备份的 url 并执行恢复。我遇到的问题是验证 Heroku CLI。由于我无法在dyno上打开浏览器,我需要找到一种安全的方式来进行身份验证。

我应该从某个地方提取 .netrc 文件吗?给测功机 CLI 是个好主意吗?有没有更好的方法来解决这个问题而无需建立另一台服务器来 运行 恢复?

您可以将授权令牌放入暂存环境的 HEROKU_API_KEY 环境变量中。使用 heroku auth:token 生成令牌。

然后使用 heroku config:set HEROKU_API_KEY=token -a staging

设置暂存令牌

从安全的角度来看,这意味着您的暂存环境几乎可以完全访问您的生产环境。

一种更安全的方法是在生产应用程序或新应用程序上有一个计划任务 运行 将数据库备份复制到暂存应用程序有权访问的 S3 存储桶。暂存应用程序从 s3 存储桶中的备份恢复。暂存不需要访问生产。

无论如何这是个好主意 - 如果您无法访问 Heroku,您仍然可以访问您的备份。

有一个用于此的构建包 - https://github.com/kbaum/heroku-database-backups。我鼓励您阅读构建包中的代码——这是一个非常简单的过程。我也会分叉 buildpack,或者只编写您自己的代码,因为它可以完全访问您的生产环境。我永远不会相信第三方构建包。

如果您的工作从生产数据库中擦除敏感信息以进行暂存,则可获得加分。它可以通过以下方式做到这一点:

  • 正在将生产备份恢复到第二个数据库
  • 清除第二个数据库中的敏感信息
  • 备份第二个数据库
  • 将第二个数据库备份推送到 S3 存储桶。