2008-10-13 74 views
17

我有一些批处理进程在Linux/PHP网站的幕后运行。他们的数量和复杂性都在不断增长,所以我想为他们带来一小部分流程。将工具和脚本部署到生产的最佳实践?

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

我在猜测我只是想结束一个脚本,它在源码树的根目录下运行,并为任何机器构建一个必需的小树。然后,我将rsync到适当的机器。但我很好奇其他人如何管理这类问题。有任何想法吗?

+0

哇7年后...现在有很多工具,特别是应用程序发布自动化工具。以下是了解更多信息的最佳起始资源:https://en.wikipedia.org/wiki/Application_release_automation – 2016-06-27 20:51:57

回答

2

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

应该设置您的软件包,以便它们包含的脚本可以查看每个主机上配置文件的不同,具体取决于每个主机上需要运行的脚本。

要将它们结合在一起,您可以创建一个元数据包,它仅取决于您创建的每个其他数据包。这样,当你建立一个新的服务器时,你安装了一个元包,而其他包作为依赖被引入。

虽然这个过程听起来有点复杂,但如果你有很多脚本和许多主机来部署它们,它从长远来看可以真正付清。

1

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

3

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

0

要做的第一件事就是将所有这些脚本放到一个源代码控制库中(svn或git很好),以便随着时间的推移可以跟踪这些脚本的变化。

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

1

Puppet是另一种可以在这种情况下使用的工具。它与cfengine类似 - 您创建了所需部署的模型,Puppet会指出如何让环境进入该状态。

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 /压缩。使用scp或rsync将tarball复制过来。有时候,这对于Amazon EC2部署而言是首选,其中压缩tarball可以节省时间/带宽。
  • 本地签出源代码,然后rsync将其复制到生产框中。

包装工具

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

常规工具在安装应用程序/ CONFIGS和维护一套系统的针对

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

  • Cfengine是此类别中的工具。
  • Puppet旨在改善Cfengine。它有一个学习曲线,但很多人觉得值得花时间弄清楚如何完成配置。一旦你完成了,每个盒子都会定期检查中央服务器,并确保一切都是最新的。如果有人编辑文件或更改权限,则会检测并更正此问题。因此,与上述部署工具不同的是,Puppet不仅将文件放在适合您的位置,而且确保它们保持原样。
  • Chef比Puppet稍微年轻一点。
  • Smartfrog是此类别中的另一种工具。
  • Ansible可与普通的YAML文件,并且不需要在服务器上运行它管理

对于这些这一类的比较,还有更多的工具代理,请参阅Wikipedia文章,Comparison of open source configuration management software

+0

伟大的答案,内容翔实,写得很好。只需要注意一下:几年过去了,现在Puppet也在使用Windows。 – Luke404 2013-01-25 16:30:35