【问题标题】:Synchronizing multiple servers and local machines with the same data / source code用相同的数据/源代码同步多台服务器和本地机器
【发布时间】:2015-10-14 09:50:27
【问题描述】:

背景:

由 2 名开发人员组成的团队构建 Web 应用程序。通过 Flask 实现 RESTful 后端。使用 Linux、Apache、Redis 和 Postgres。

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

除了 4 个数据库之外,每个开发人员还有一个额外的数据库用于测试。该测试数据库需要在两个开发人员之间始终完全相同。

开发者 B 拥有自己的数据分支,向开发者 A 处理的主存储库发送拉取请求。

问题:

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

开发人员在不同的环境和不同的分支上工作。我们使用 github 中的拉取请求将代码传输到开发者 A 的主仓库。

问题

您对解决我们的数据库问题有什么建议?有没有更好的数据共享方式?开发者 A 和开发者 B 是否有更好的方式来共享他们的环境和源代码?

【问题讨论】:

    标签: database git postgresql docker virtual-machine


    【解决方案1】:

    今年我一直在为类似规模的环境解决这个问题。技术不同,但简而言之:

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

    代码 在几次错误的开始之后,我们已经确定了特征分支方法和一个好的工作提议。见http://nvie.com/posts/a-successful-git-branching-model/。目前我们有生产和开发分支。只有一个人处理“功能”(或我们配对)。功能应该是短暂的。必要时,我们可能会在多个功能之间切换。我们可以在需要时从一个功能合并到另一个功能。当我们重新合并到开发中时,这一切都非常干净。开销很小,我们很少踩到对方的脚趾。当我们做差异时,我们会清楚地知道我们需要手动修复什么。一个好的 GIT UI 工具会有所帮助。

    数据库 您可以使用共享数据库进行开发。我们没有。每个开发者都有一个独立的环境。我们可能需要集合,但通常来自 UAT 或 prod 而不是彼此。我创建了一个全面的管理页面。在任何环境中,我们都可以导出集合集。有一些机制可以在需要时发送此导出。这用于获取 prod 数据并将其放置在 UAT 中以进行问题复制。然后我们可以返回到集成和开发进行修复。同样,开发人员可以使用相同的应用程序管理页面共享数据。

    发布 从 dev -> integration -> uat -> prod 的链上也由应用程序管理页面处理。任何系统都可以导出,但只能到下一阶段。它不会自动导入。导入不是自动的。目标环境的管理员被告知有可用的版本。他们可以从管理页面导入它。我们对代码和数据库集合做同样的事情。

    集成它而不是知道要运行哪个脚本很有用。如果它在您的环境中有效,它可能是一个单独的应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      • 2013-12-19
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 2022-06-28
      相关资源
      最近更新 更多