0

所以 - 假设我开发了一个 PHP 应用程序,我在一个与生产环境相同的 vagrant box 中开发它。所以 - 作为最终结果,我将拥有一个带有代码的 *.tar.zip 文件......

如何将部署组织到有大量应用程序服务器的生产环境中?我的意思是-我很困惑如何一次将代码同步推送到生产中?

更多信息:

服务器上的代码存储如下:

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

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

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

4

2 回答 2

2

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

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

  1. 尽可能轻松地在远程和本地环境中构建相同的盒子,并尝试确保您的配置强调幂等性。
  2. 考虑您的版本控制/发布结构;哪些资源很少或永远不会改变?将它们包含在setup函数而不是deploy函数中,并且不要将它们包含在同步运行中。
  3. 将您的开发和系统管理问题分开;即不要只是用 *.tar.gz 打包一个 vagrant box 并通过 .tar.gz 绑定它config.vm.box_url。这样做的原因是,每次部署时,您都必须用新的盒子重新打包每个生产服务器,而不是仅仅更改服务器上的文件,或者从服务器中添加/删除一些包。
  4. 查看一些配置管理工具,例如ChefPuppet;即使您最终没有使用它们,它们也会让您了解系统管理员专业人员如何解决此问题。
于 2013-04-05T23:54:28.220 回答
0

很多方法。如果从准系统(没有云基础设施)开始,我是 SVN 分支钩子的粉丝。为您的代码创建一个 SVN 存储库。在它上面设置一个 post-commit 钩子,它检查 /branch/production/ 中的任何内容是否已更改。

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

(*这是艰难的一步)

于 2013-04-05T23:37:27.770 回答