在linux上部署自定义软件? 我在PHP和C++中编写公司内部软件。p>

在linux上部署自定义软件? 我在PHP和C++中编写公司内部软件。p>,linux,deployment,Linux,Deployment,在linux机器上部署这种软件的最佳方法是什么?目前,我们使用svn导出,还有其他方法吗?我们使用。只需编写一个简单的Makefile,将文件复制到目标机器上的目标目录,然后运行checkinstall来创建RPM、DEB或TGZ包,稍后可以使用分发包管理工具轻松安装这些包 您甚至可以添加在复制文件之前和之后执行的shell脚本,因此您可以进行一些预处理和后处理,如添加用户帐户、crontab条目等 一旦你得到更高级,你可以向这些包添加依赖关系,这样它也可以拉和安装PHP、MySQL、Apach

在linux机器上部署这种软件的最佳方法是什么?目前,我们使用svn导出,还有其他方法吗?

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

您甚至可以添加在复制文件之前和之后执行的shell脚本,因此您可以进行一些预处理和后处理,如添加用户帐户、crontab条目等

一旦你得到更高级,你可以向这些包添加依赖关系,这样它也可以拉和安装PHP、MySQL、Apache、GCC库,甚至需要PHP或Apache模块或者一些你可能需要的扩展C++ LIBs,所有的都有一个命令。只需编写一个简单的Makefile,将文件复制到目标机器上的目标目录,然后运行checkinstall来创建RPM、DEB或TGZ包,稍后可以使用分发包管理工具轻松安装这些包

您甚至可以添加在复制文件之前和之后执行的shell脚本,因此您可以进行一些预处理和后处理,如添加用户帐户、crontab条目等


一旦你得到了更高级,你就可以向这些包添加依赖关系,这样它也可以拉和安装PHP、MySQL、Apache、GCC库,甚至需要PHP或Apache模块或者一些你可能需要的扩展C++ LIBs,所有的都有一个命令。 对于我的部署,使用scp将文件从一台机器移动到另一台机器从来没有遇到过问题。您可以编写一个简单的BASH脚本来获取机器列表(来自文本文件或STDIN),并将给定的目录/应用程序推送到所有机器上的给定目录。假设你对一个bin目录做了这样的操作,最终用户永远不会知道其中的区别


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

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

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


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

我认为这取决于您所说的部署。通常,web项目的部署过程涉及一个配置脚本步骤,在该步骤中,您可以使用相同的部署包,并通过更改简单的配置指令将其用于特定的服务器(登台、开发、生产)

根据我对Linux服务商的经验,这些系统通常是定制的,根据我的经验,它们通常使用rsync而不是svn export和/或scp

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

$ deploy-site --package=app \
--platform=dev \
--title="Revsion 1.2"
在内部,系统将从SVN获取给定包的主干中的任何内容(我相信您也可以很容易地将其应用于git),并使用日志条目“deploying Revision 1.2”生成一个新的唯一标记

然后,在将其重新同步到适当的目标之前,它将使用适当的更改(URL、主机、数据库密码等)修补任何配置脚本

如果部署有问题,只需使用先前部署中自动生成的标记之一再次运行相同的命令即可:

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

如果您还必须在另一端进行编译,那么您可以在配置中包括修补Makefile,然后通过ssh执行命令,在rsync过程完成后编译最近部署的代码。

我认为这取决于您所说的部署。通常,web项目的部署过程涉及一个配置脚本步骤,在该步骤中,您可以使用相同的部署包,并通过更改简单的配置指令将其用于特定的服务器(登台、开发、生产)

根据我对Linux服务商的经验,这些系统通常是定制的,根据我的经验,它们通常使用rsync而不是svn export和/或scp

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

$ deploy-site --package=app \
--platform=dev \
--title="Revsion 1.2"
在内部,系统将从SVN获取给定包的主干中的任何内容(我相信您也可以很容易地将其应用于git),并使用日志条目“deploying Revision 1.2”生成一个新的唯一标记

然后,在将其重新同步到适当的目标之前,它将使用适当的更改(URL、主机、数据库密码等)修补任何配置脚本

如果部署有问题,只需使用先前部署中自动生成的标记之一再次运行相同的命令即可:

$ deploy-site --package=app \
--platform=dev \
--title="Reverting to Revision 1.1" \
--tag=20090714200154
如果你必须也