部署工具的最佳实践&生产脚本?

时间:2008-10-13 22:33:43

标签: deployment release lamp release-management

我有许多批处理过程在Linux / PHP网站的幕后运行。它们的数量和复杂性开始增长,因此我想对它们进行少量处理。

我的源代码树有一堆cpp文件和脚本,按开发组织但不考虑部署。编译完所有可执行文件后,我需要在一组机器上放置各种脚本和二进制文件。不同的计算机需要为其批处理过程使用不同的可执行文件,脚本和配置文件。我也有一些我写的属于每台机器的工具。目前,此部署过程是手动且容易出错的。

我猜我最终会得到一个在源代码树根目录下运行的脚本,并为任何一台机器构建一个更小的树。然后,我只是将它同步到适当的机器上。但我很好奇其他人是如何处理这类问题的。有什么想法吗?

6 个答案:

答案 0 :(得分:19)

这里有几类工具。有些人使用这些类别的工具组合。我有时会使用Puppet和Capistrano。有关讨论,请参阅Puppet or Capistrano - Use the Right Tool for the Job

旨在部署应用程序的脚本工具:

此类别中的工具的一般模式是您创建脚本和/或配置文件,通常使用类似于Makefile的命令集,并且该工具将ssh到您的生产框,检查您的源代码,并运行其他必要的步骤。

此区域中的工具通常具有回滚到先前版本的工具。所以他们会检查你的源到发布/目录,并创建一个从“当前”到“发布/”的符号链接,如果一切顺利的话。如果出现问题,您可以通过运行一个删除“当前”的命令并将其链接到以前的版本/目录来恢复到以前的版本。

  • Capistrano来自Rails社区,但是是通用的。 Capistrano的用户可能对deprec感兴趣,这是Capistrano的一套部署配方。
  • Vlad the Deployer是Capistrano的替代品,再次来自Rails社区。
  • 编写您自己的shell脚本或Makefile。

将文件存入生产箱的选项:

  • 从源头直接结帐。如果你的生产箱缺乏开发工具,特别是源代码管理工具,那么这并不总是可行的。
  • 在本地结帐源,然后将其tar / zip up。使用scp或rsync复制tarball。对于类似Amazon EC2部署的情况,这有时是首选,其中压缩的tarball可以节省时间/带宽。
  • 在本地结帐源,然后将其同步到生产箱。

包装工具

使用您的操作系统包装系统生成包含应用程序文件的包。创建一个主包,其中包含您需要的其他包作为依赖项。 RubyWorks系统就是一个例子,用于部署Rails堆栈和示例应用程序。然后是使用apt,yum / rpm,Windows msi或其他任何部署给定版本的问题。回滚涉及卸载并重新安装旧版本。

旨在安装应用程序/配置并维护一组系统的常规工具

这些工具并不专门针对部署Web应用程序的问题,而是针对一组服务器或整个公司的工作站部署/维护Apps / Configs的更普遍的问题。它们更多地针对系统管理员,而不是Web开发人员,尽管他们都发现它们很有用。

  • Cfengine是此类别中的工具。
  • Puppet旨在改善Cfengine。它有一个学习曲线,但许多人发现值得花时间弄清楚如何进行配置。一旦你完成它,每个盒子定期检查中央服务器并确保一切都是最新的。如果有人编辑文件或更改权限,则会检测并更正此问题。因此,与上面的部署工具不同,Puppet不仅可以将文件放在正确的位置,还可以确保它们保持这种状态。
  • Chef比Puppet年轻一点,采用类似方法。
  • Smartfrog是此类别中的另一个工具。
  • Ansible适用于普通的YAML文件,不需要在其管理的服务器上运行代理

要比较此类别中的这些工具和更多工具,请参阅维基百科文章Comparison of open source configuration management software

答案 1 :(得分:3)

看看cfengine tutorial,看看cfengine是否适合您的情况。对于小型网站来说可能有点过于复杂,但如果将来涉及更多计算机和更多配置,在某些时候你最终会使用cfengine或类似的东西。

答案 2 :(得分:2)

以您的发行版使用的格式创建自己的包,例如Debian软件包(.deb)。这些可以复制到每台计算机并手动安装,也可以设置自己的存储库,并将其添加到源列表中。

应该设置您的软件包,使其包含的脚本参考配置文件,每个主机上的配置文件都不同,具体取决于每个脚本需要运行的脚本。

要将它们组合在一起,您可以创建一个元数据包,它只取决于您创建的每个其他包。这样,当您设置新服务器时,您将安装该一个元软件包,其他软件包将作为依赖项引入。

虽然这个过程听起来有点复杂,但是如果你有许多脚本和许多主机来部署它们,那么从长远来看它确实会得到回报。

答案 3 :(得分:1)

我必须经常向几个客户推出PHP脚本和Apache配置。由于他们都运行Debian Linux,我在我的服务器上设置了一个Debian软件包存储库,所有客户要做的就是输入 apt-get upgrade 并获得最新版本。

答案 4 :(得分:1)

Puppet是另一种可以在这种情况下使用的工具。它与cfengine类似 - 您创建了所需部署的模型,Puppet计算了如何将环境置于此状态。

答案 5 :(得分:0)

要做的第一件事是将所有这些脚本放入源控件存储库(svn或git都很好),以便您可以跟踪这些脚本的更改。

如果您对ruby感兴趣,请查看Capistrano,它非常适合部署到群集中的多台计算机,并且相当容易设置。它可以直接从您的版本控制系统中读取文件。