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

Deployment 部署工具的最佳实践&;生产脚本?,deployment,release,lamp,release-management,Deployment,Release,Lamp,Release Management,我在Linux/PHP网站的后台运行了许多批处理过程。它们的数量和复杂性开始增加,所以我想给它们带来一些过程 我的源代码树有一堆cpp文件和脚本,它们是根据开发而不是部署来组织的。编译完所有可执行文件后,我需要将各种脚本和二进制文件放在一个计算机集群上。不同的机器需要不同的可执行文件、脚本和配置文件来进行批处理。我也有一些工具,我写的,属于每台机器。目前,此部署过程是手动的,并且容易出错 我猜我最终会得到一个脚本,它运行在源代码树的根上,并构建一个较小的树,其中包含任何机器所需的所有内容。然后,

我在Linux/PHP网站的后台运行了许多批处理过程。它们的数量和复杂性开始增加,所以我想给它们带来一些过程

我的源代码树有一堆cpp文件和脚本,它们是根据开发而不是部署来组织的。编译完所有可执行文件后,我需要将各种脚本和二进制文件放在一个计算机集群上。不同的机器需要不同的可执行文件、脚本和配置文件来进行批处理。我也有一些工具,我写的,属于每台机器。目前,此部署过程是手动的,并且容易出错


我猜我最终会得到一个脚本,它运行在源代码树的根上,并构建一个较小的树,其中包含任何机器所需的所有内容。然后,我将把它重新同步到适当的机器上。但我很好奇其他人是如何处理这类问题的。有什么想法吗?

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

您的软件包应该设置为它们所包含的脚本可以参考一个配置文件,每个主机上的配置文件是不同的,这取决于每个主机上需要运行哪些脚本

为了将它们联系在一起,您可以创建一个元包,它只依赖于您创建的其他每个包。这样,当您设置一个新服务器时,您安装了一个元包,其他包作为依赖项引入


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

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

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

首先要做的是将所有这些脚本放入源代码管理存储库(svn或git都很好)这样您就可以随着时间的推移跟踪这些脚本的更改


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

是在这种情况下可以使用的另一种工具。它类似于cfengine—您可以创建所需部署的模型,并了解如何使环境达到这种状态。

这里有几种类型的工具。有些人使用这些类别的工具组合。例如,我有时使用木偶和卡皮斯特拉诺。请参阅以进行讨论

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

这类工具的一般模式是创建一个脚本和/或配置文件,通常使用类似于Makefile的命令集,该工具将ssh连接到您的生产框,签出源代码,并运行任何其他必要的步骤

此区域中的工具通常具有回滚到以前版本的功能。因此,他们会将您的源代码签出到releases/目录,如果一切顺利,还会创建一个从“current”到“releases/”的符号链接。如果出现问题,您可以通过运行一个命令来恢复到以前的版本,该命令将删除“current”并将其链接到以前的版本/目录

  • 来自Rails社区,但是通用的。Capistrano的用户可能对Capistrano的一组部署方法感兴趣
  • 是Capistrano的替代品,同样来自Rails社区
  • 编写自己的shell脚本或Makefile
将文件放入生产框的选项:

  • 直接从源代码签出。如果您的生产箱缺少开发工具,特别是源代码管理工具,则不总是可能的
  • 在本地签出源代码,然后对其进行tar/zip压缩。使用scp或rsync复制tarball。这有时是类似AmazonEC2部署的首选,在这种部署中,压缩tarball可以节省时间/带宽
  • 在本地签出源代码,然后将其重新同步到生产框
打包工具

使用操作系统的打包系统生成包含应用程序文件的包。创建一个主包,该主包与所需的其他包具有依赖关系。该系统就是一个例子,用于部署Rails堆栈和示例应用程序。然后就需要使用apt、yum/rpm、Windows msi或其他工具来部署给定的版本。回滚涉及卸载和重新安装旧版本

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

这些工具并不是专门针对部署web应用程序的问题,而是针对部署/维护一组服务器或整个公司工作站的应用程序/配置的更一般的问题。它们的目标更多的是系统管理员,而不是web开发人员,尽管两者都可以发现它们很有用

  • 是属于这一类别的工具
  • 旨在改进CFE发动机。它有一个学习曲线,但许多人认为花时间来研究如何进行配置是值得的。一旦启动,每个框都会定期检查中央服务器,确保所有内容都是最新的。如果有人编辑文件或更改