使用相同的数据/源代码同步多个服务器和本地计算机

背景:

build立一个由2名开发人员组成的Web应用程序。 RESTful后端通过Flask。 使用Linux,Apache,Redis和Postgres。

  • 3台服务器:
    • 1用于生产
    • 1发展
    • 1为UAT
  • 4个数据库:
    • 1用于PROD / UAT服务器
    • 1用于DEV服务器
    • 1在他本地机器上的开发者A.
    • 1为他的本地机器上的开发者B.
  • 2本地机器/开发人员

除了4个数据库之外,每个开发者都有一个额外的数据库用于testing。 这个testing数据库在两个开发人员之间必须始终保持一致。

开发人员B拥有自己的数据分支,向开发人员A开发的主数据库发送请求。

问题:

我们没有真正的协议来轻松地在每个数据库之间传输数据。 例如,开发人员testing数据库往往是不同的,这会导致混乱。 将数据从DEV移动到UAT / PROD是手动完成的。

开发人员在不同的环境和不同的分支上工作。 我们在github中使用pull请求将代码转移到开发者A的主要回购。

你推荐什么样的解决scheme来解决我们的数据库问题? 有没有更好的方式来分享数据? 开发者A和开发者B是否有更好的方式来共享他们的环境和源代码?

今年我一直在为这个类似规模的环境研究这个问题。 技术是不同的,但总之:

  • 2-3个开发者
  • 每个开发人员都有完整的环境
  • 集成,UAT和生产服务器对(所有虚拟机)。
  • Linux,Mongodb,Django和Angular

代码经过一些错误的开始,我们已经解决了function分支的方法和一个好的工作主张。 请参阅http://nvie.com/posts/a-successful-git-branching-model/ 。 目前我们掌握生产和开发分支。 只有一个人在“function”(或我们配对)上工作。 function应该是短暂的。 必要时我们可能会在多个function之间切换。 我们可以在需要时从一个function合并到另一个function。 当我们重新融入发展的时候,这一切都相当干净。 开销很小,我们很less踩到对方的脚趾。 当我们做差异清楚我们需要手动修复。 一个好的GIT UI工具有帮助。

数据库您可以使用共享数据库进行开发。 我们没有。 每个开发者都有独立的环境。 我们可能需要收集,但通常来自UAT或刺激,而不是彼此。 我创build了一个全面的pipe理页面。 在任何环境下,我们都可以导出集合集。 有机制在需要的地方发送这个输出。 这用于产生数据并将其置于UAT中以进行问题复制。 然后,我们可以退回到集成和开发维修。 同样,开发者可以使用相同的应用程序pipe理页面共享数据。

发布从开发 – >集成 – > uat – > prod上链,也由应用程序pipe理页面处理。 任何系统都可以导出,但只能到下一个阶段。 它不会自动导入。 导入不是自动的。 目标环境中的pipe理员被告知发布是可用的。 他们可以从pipe理页面导入。 我们对代码和数据库集合也是这样做的。

集成它而不知道要运行哪个脚本是有用的。 这可能是一个单独的应用程序,如果在你的环境中工作面糊。