17

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

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

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

4

6 回答 6

19

这里有几类工具。有些人使用这些类别的工具组合。例如,我有时会同时使用 Puppet 和 Capistrano。请参阅Puppet 或 Capistrano - 为工作使用正确的工具进行讨论。

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

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

这方面的工具通常具有回滚到以前版本的功能。所以他们会检查你的源到releases/目录,如果一切顺利的话,创建一个从“current”到“releases/”的符号链接。如果有问题,您可以通过运行将删除“当前”并将其链接到以前的版本/目录的命令来恢复到以前的版本。

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

将文件获取到生产箱的选项:

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

包装工具

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

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

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

  • Cfengine就是这个类别中的一个工具。
  • Puppet旨在改进 Cfengine。它有一个学习曲线,但许多人发现值得花时间弄清楚如何进行配置。一旦你开始工作,每个盒子都会定期检查中央服务器并确保一切都是最新的。如果有人编辑文件或更改权限,则会检测到并更正。因此,与上面的部署工具不同,Puppet 不仅将文件放在适合您的位置,而且确保它们保持原样。
  • Chef比 Puppet 小一些,采用了类似的方法。
  • Smartfrog是该类别中的另一个工具。
  • Ansible使用纯 YAML 文件,不需要在它管理的服务器上运行代理

有关此类工具和更多工具的比较,请参阅 Wikipedia 文章,开源配置管理软件的比较

于 2009-05-30T11:17:10.620 回答
3

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

于 2008-10-15T16:45:25.813 回答
2

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

你的包应该被设置,以便它们包含的脚本参考配置文件,该配置文件在每个主机上都不同,具体取决于每个主机上需要运行的脚本。

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

虽然这个过程听起来有点复杂,但如果你有很多脚本和很多主机要部署它们,从长远来看,它真的可以得到回报。

于 2008-10-13T22:51:31.070 回答
1

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

于 2008-10-16T13:22:12.340 回答
1

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

于 2008-10-13T23:13:03.990 回答
0

要做的第一件事是将所有这些脚本放入源代码控制存储库(svn 或 git 都很好),以便您可以跟踪这些脚本随时间的变化。

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

于 2008-10-15T18:31:13.700 回答