在服务器群集上持续部署

时间:2013-08-06 15:08:16

标签: php mysql jenkins distributed-system continuous-deployment

我目前正在处理一个处于过渡阶段的初创公司。

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

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

  • 我主要担心的是我们如何从单一切换部署 服务器到一组服务器?每个服务器都有自己的htdoc 和SQL数据库,在我需要执行的当前设置下 每个服务器上的脚本听起来都是令人讨厌的东西 做。我正在寻找可用于自动执行系统管理员任务的puppet,但我不确定它是否是将新版本部署到集群的强大方法。

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

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

1 个答案:

答案 0 :(得分:1)

我正在运行类似的场景,但我正在为我的生产环境使用云提供程序,以便我不需要关心数据库,多服务器实例等的复制。(我使用的是pagodabox,但AWS会也工作得非常好。)

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

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

我认为数据库同步在部署期间不是一个大问题。这可能取决于您使用的实际基础设施。像宝塔或aws这样的云提供商会为您处理它。