1

我目前正在与一家处于过渡阶段的初创公司合作。

我们有一个 PHP Web 应用程序,并利用在 jenkins 上运行的标准单元和回归测试(selenium)的持续集成。我们有一个开发服务器来托管新提交的代码和一个暂存服务器,它可以将构建准备好部署到生产服务器。我们部署到生产服务器的方式是通过一个基本的脚本来提取最新的 svn 副本并覆盖 htdocs 目录中的更改。任何 SQL 更改都通过 MySQL Workbench 的同步功能应用。

此设置适用于非常基本的环境,但由于高流量,我们现在正处于从单服务器设置到集群的过渡中,我遇到了一个难题。

  • 我主要关心的是我们如何将部署从单个服务器切换到服务器集群?每台服务器都有自己的 htdocs 和 SQL 数据库,在当前设置下,我需要在每台服务器上执行脚本,这听起来像是一件可恶的事情。我正在研究可用于自动化系统管理员任务的 puppet,但我不确定它是否是一种将新构建部署到集群的强大方法。

  • 我的第二个问题与数据库有关。现在我的假设是代码更改将立即应用,但由于我们将有一个数据库主/从复制,我担心数据库更改将需要更长的时间来传播,从而在部署期间引入不一致。代码和数据库如何同时同步?

  • 我的第三个问题与数据库更改的自动化有关。有谁知道我可以自动化更新数据库模式的过程而无需手动运行同步?目前我必须手动运行工作台同步工具,而我真的在寻找一种提交和忘记的方法。我提交它,数据库更改会在开发和 QA 设置中自动同步。

4

1 回答 1

1

我正在运行类似的场景,但我在生产环境中使用云提供商,这样我就不需要关心数据库、多服务器实例等的复制。(我正在使用 pagodabox,但 AWS 也可以完美运行美好的)。

我建议您为数据库迁移创建真正的迁移,以便通过 svn 或其他方式跟踪这些迁移。在这种情况下,您还可以提供信息,如何回滚。我正在使用https://github.com/doctrine/migrations,但主要是因为我使用学说作为 ORM。

如果您有迁移工具,您可以轻松地在部署脚本中添加命令,以便在部署后运行这些迁移。

我不认为数据库同步在部署过程中是一个大问题。这可能取决于您使用的实际基础架构。像 pagoda 或 aws 这样的云提供商会为您处理它。

于 2013-08-06T15:20:28.173 回答