我有许多批处理过程在Linux / PHP网站的幕后运行。它们的数量和复杂性开始增长,因此我想对它们进行少量处理。
我的源代码树有一堆cpp文件和脚本,按开发组织但不考虑部署。编译完所有可执行文件后,我需要在一组机器上放置各种脚本和二进制文件。不同的计算机需要为其批处理过程使用不同的可执行文件,脚本和配置文件。我也有一些我写的属于每台机器的工具。目前,此部署过程是手动且容易出错的。
我猜我最终会得到一个在源代码树根目录下运行的脚本,并为任何一台机器构建一个更小的树。然后,我只是将它同步到适当的机器上。但我很好奇其他人是如何处理这类问题的。有什么想法吗?
答案 0 :(得分:19)
这里有几类工具。有些人使用这些类别的工具组合。我有时会使用Puppet和Capistrano。有关讨论,请参阅Puppet or Capistrano - Use the Right Tool for the Job。
旨在部署应用程序的脚本工具:
此类别中的工具的一般模式是您创建脚本和/或配置文件,通常使用类似于Makefile的命令集,并且该工具将ssh到您的生产框,检查您的源代码,并运行其他必要的步骤。
此区域中的工具通常具有回滚到先前版本的工具。所以他们会检查你的源到发布/目录,并创建一个从“当前”到“发布/”的符号链接,如果一切顺利的话。如果出现问题,您可以通过运行一个删除“当前”的命令并将其链接到以前的版本/目录来恢复到以前的版本。
将文件存入生产箱的选项:
包装工具
使用您的操作系统包装系统生成包含应用程序文件的包。创建一个主包,其中包含您需要的其他包作为依赖项。 RubyWorks系统就是一个例子,用于部署Rails堆栈和示例应用程序。然后是使用apt,yum / rpm,Windows msi或其他任何部署给定版本的问题。回滚涉及卸载并重新安装旧版本。
旨在安装应用程序/配置并维护一组系统的常规工具
这些工具并不专门针对部署Web应用程序的问题,而是针对一组服务器或整个公司的工作站部署/维护Apps / Configs的更普遍的问题。它们更多地针对系统管理员,而不是Web开发人员,尽管他们都发现它们很有用。
要比较此类别中的这些工具和更多工具,请参阅维基百科文章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,它非常适合部署到群集中的多台计算机,并且相当容易设置。它可以直接从您的版本控制系统中读取文件。