在linux上部署自定义软件?

时间:2009-07-16 19:01:05

标签: linux deployment

我用PHP和C ++编写公司内部软件。

将此类软件部署到linux机器的最佳方法是什么?目前,我们使用svn export,还有其他方法吗?

3 个答案:

答案 0 :(得分:4)

我们使用checkinstall。只需编写一个简单的Makefile,将文件复制到目标机器上的目标目录,然后运行checkinstall以创建RPM,DEB或TGZ包,稍后您可以使用分发包管理工具轻松安装它们。

您甚至可以添加在复制文件之前和之后执行的shell脚本,这样您就可以执行一些前后处理,例如添加用户帐户,crontab条目等。

一旦你变得更高级,你可以添加依赖项到这些包,这样它也可以拉动和安装PHP,MySQL,Apache,GCC库,甚至需要PHP或Apache模块或你可能需要的一些外部C ++库,所有这些都是单一命令。

答案 1 :(得分:1)

我认为这取决于您的部署意味着什么。通常,Web项目的部署过程涉及配置脚本步骤,您可以通过更改简单的配置指令来获取相同的部署包并将其提供给特定服务器(登台,开发,生产)。

根据我使用Linux服务器的经验,这些系统通常是自定义构建的,根据我的经验,我经常使用rsync而不是svn export和/或scp。

可以从命令行执行脚本,如下所示:

$ deploy-site --package=app \
--platform=dev \
--title="Revsion 1.2"

在内部,系统会从SVN获取给定包中的任何内容(我确信你也可以很容易地适应git),生成一个新的唯一标记,其日志条目为“部署版本1.2”。

然后,在将其定义为适当的目标之前,它会使用适当的更改(网址,主机,数据库密码等)修补任何配置脚本。

如果部署存在问题,只需使用早期部署中的一个自动生成的标记再次运行相同的命令即可:

$ deploy-site --package=app \
--platform=dev \
--title="Reverting to Revision 1.1" \
--tag=20090714200154

如果你还要在另一端进行编译,你可以在配置中包含修补Makefile,然后通过ssh执行一个命令,该命令将在rsync进程完成后编译最近部署的代码。

答案 2 :(得分:0)

根据我的经验,在安全性和易部署性之间存在权衡。

对于我的部署,使用scp将文件从一台计算机移动到另一台计算机时,我从未遇到过任何问题。您可以编写一个简单的BASH脚本来获取计算机列表(来自文本文件或STDIN),并将给定目录/应用程序推送到所有计算机上的给定目录。假设你假设它是一个bin目录,最终用户永远不会知道它的区别。

唯一的问题是当你有多个架构和操作系统时,必须在每个架构和操作系统上单独编译。在这种情况下,你可以编写一个脚本(我想到的第一个例子是来自Ruby的Net :: SSH)来获取服务器列表,cd到给定目录,然后运行编译脚本。但是,如果所有计算机使用相同的体系结构和配置,您可以假设只在您用于分发的计算机上编译一次。