我正在开发一个使用 Postgres 数据库的普通 django 网站。我在本地开发,有 3 个 VPS 服务器用于测试、准备和生产。每个 VPS 都运行自己的 Linux / Apache / Python / Postgres 堆栈,并有自己的数据库。
我开始发现,随着使用 git 进行持续部署,暂存实际上已经变得多余(从暂存转移到生产需要交换 IP 地址,这需要重新启动 VPS)。
我可以预见到暂存唯一有用的情况是当需要进行复杂的数据库迁移时,即使在那时,由于暂存和生产中的 Postgres 数据库没有镜像,因此可能会出现丢失迁移之间输入的数据的问题。
我的问题是,我是否应该在准备阶段和生产阶段之间镜像 Postgres?(如果是,该怎么做?)我做得对吗?我真的找不到太多关于 Web 应用程序部署最佳实践的文档。
答案1
如果您认为需要多次进行复杂的数据库迁移,那么我认为您应该在暂存和生产之间镜像 Postgres。手动进行迁移很容易出错,因此您几乎肯定会收回在设置迁移上投入的时间。
我不是 Postgres 专家,但这里有一个复制选项概述。
答案2
您可以在升级期间将实时站点设为只读,以避免迁移期间的数据丢失。
答案3
假设您有针对 postgresql 数据库的备份系统?如果是这样,您可以使用这些备份来填充暂存/开发环境中的数据。我有一些使用复制的客户端(主要在 MySQL 空间中)。
对于备份/暂存:生产 --replication--> 暂存 --mysqldump --> 备份
对于开发:备份--mysqlimport-->开发
当需要在部署上进行测试时,他们只需中断复制即可。此系统使用频率不高(每年 2-4 次)。缺点是,有时您必须重置复制,这可能需要生产系统停机一段时间。
可能有更简洁的实现,但他们发现这种方法效果很好。好消息是,他们只需将代码提升到暂存系统,中断复制,然后他们基本上就拥有了一个用于回归和应用程序测试的当前实时框。