如何一次在多个服务器上组织Web应用程序部署?

时间:2013-04-05 23:34:42

标签: php deployment

所以 - 让我说我开发了一个PHP应用程序,我在一个与生产环境相同的流浪盒中开发。所以 - 作为最终结果,我会得到一个带有代码的* .tar.zip文件......

如何组织部署到生产环境中,那里有很多应用服务器?我的意思是 - 我很困惑如何同时将代码同步推送到生产中?

更多信息:

服务器代码上的

存储如下:

project
  +current_revision ->link to revisions/v[n]
  +revisions
    +v1
    +v2
    +v3
    ...
  +data

因此,当我必须部署更改时,我通常会运行一个部署脚本,使用ssh将更新的tar上传到服务器上,在修订版中将其解压缩到特定目录,将其符号链接到current_revision并重新启动php-fpm ....这样我就可以回滚只需通过符号链接到旧版本即可。

使用多重服务器困扰我的是,并非所有的盒子都会立即更新,即。从技术上讲,可能会出现一些故障。

2 个答案:

答案 0 :(得分:2)

如果您正在寻找“随时可用”的答案,则需要提供有关您的设置的更多信息。例如,如果您计划将git用于VCS,则可以编写一个简单的shell脚本,用于提取服务器的最新提交和rsync。或者,如果您在Symfony之上构建,capifony是一个很棒的工具。如果您使用AWS,则Vagrant的作者编写的provider plugin非常易于使用,您可以指定要为哪些计算机带来upprovision的正则表达式。

如果您正在寻找更多的“路线图”,那么您需要考虑的因素是:

  1. 尽可能简化在远程和本地环境中构建相同的框,并尝试确保您的配置强调idempotence
  2. 考虑您的版本控制/发布结构;什么资源很少或永远不会改变?将其包含在setup函数中而不是deploy函数中,并且不要将它们包含在同步运行中。
  3. 分离您的开发和系统管理问题;即,不要只用* .tar.gz包装一个流浪盒,并将其绑定到config.vm.box_url。原因是每次部署时都必须使用新的盒子重新打包每个生产服务器,而不是仅仅更改服务器上的文件,或者从服务器添加/删除一些软件包。
  4. 查看一些配置管理工具,例如ChefPuppet;即使您最终没有使用它们,它们也会让您了解系统管理员专业人员如何解决这个问题。

答案 1 :(得分:0)

很多方法。如果从准系统开始(没有云基础设施),我就是SVN分支钩子的粉丝。拥有代码的SVN仓库。在其上设置一个post-commit挂钩,检查/ branch / production /中是否有任何更改。

如果有,请让post-commit挂钩启动所有自动推出程序 - 在这种情况下,一个简单的方法是让所有服务器知道* svn export分支。就这么简单!

(*这是艰难的一步)