我正在开始使用PHP开发一个新项目,我很乐意从其他开发人员那里获得有关他们首选的PHP部署策略的反馈。我希望自动化一些东西,以便一旦提交更改,就可以快速迁移到开发或生产服务器。
我有使用Capistrano和Ruby进行部署的经验以及一些基本的shell脚本。
在我第一次独自潜水之前,听听其他人在他们的项目中如何处理这个问题会很棒。
目前,开发人员处理站点的本地安装并将更改提交到subversion存储库。通过从svn导出标记版本并将其上载到服务器来进行初始部署。
通过手动上传更改的文件,通常会逐步进行其他更改。
答案 0 :(得分:108)
对于PHP,具有Phing构建脚本的SVN是可行的方法。 Phing类似于ANT,但是用PHP编写,这使得PHP开发人员可以更轻松地修改他们的需求。
我们的部署程序如下:
还有phpUnderControl,它是一个持续集成服务器。我认为对于网络项目而言,这并不是很有用。
答案 1 :(得分:23)
我目前正在部署PHP using Git。使用Git的最新副本更新我的生产服务器只需要一个简单的git push生产。它简单快捷,因为Git足够聪明,只能发送差异而不是整个项目。它还有助于在我的硬件故障的情况下在Web服务器上保留存储库的冗余副本(尽管我也推送到GitHub是安全的)。
答案 2 :(得分:14)
我们使用Webistrano,这是Capistrano的网络前端,并且非常满意。
Webistrano允许SVN,GIT和其他人进行多阶段,多环境部署。它具有内置的回滚支持,支持单独的服务器角色,如web,db,app等,并且可以并行部署。它允许您在多个级别上覆盖配置参数,例如每个阶段,并记录每个部署的结果,可选择邮寄它。
尽管Capistrano和Webistrano是Ruby应用程序,但部署“recipes”的语法简单而强大,足以让任何PHP程序员都能理解。最初Capistrano是为Ruby on Rails项目而构建的,但很容易适应PHP项目。
配置完成后,非常容易被非程序员使用,例如部署暂存版本的测试人员。
为了尽可能提供最快的部署,我们安装了fast_remote_cache方法,该方法更新了远程服务器上的svn工作副本缓存,然后将结果硬链接。
答案 3 :(得分:7)
我使用Apache Ant部署到不同的目标(dev,QA和live)。 Ant旨在用于Java部署,但它为部署任意文件提供了非常有用的一般案例解决方案。
build.xml文件的语法非常容易学习 - 您可以定义在命令行上调用ant程序时运行的不同目标及其依赖项。
例如,我有dev,QA和live的目标,每个目标都取决于cvsbuild目标,该目标从我们的CVS服务器检出最新的头版本,将相应的文件复制到构建目录(使用fileset标记) ,然后将构建目录rsyncs到相应的服务器。有一些怪癖需要学习,而且学习曲线并不完全平坦,但是我已经这么做了多年,没有遇到任何麻烦,所以我会根据你的情况推荐它,虽然我很好奇其他答案我是什么我会在这个帖子上看到。
答案 4 :(得分:6)
我使用Git手动填充。一个用于开发的存储库,它获得git push --mirror
个公共存储库,而实时服务器则是第三个存储库。我认为这部分与您自己的设置相同。
最大的不同之处在于,我几乎为我正在进行的每一项改变都使用了分支(我现在已经有大约5个),并且往往会在它们之间来回切换。除了合并其他分支外,主分支不会直接更改。
我直接从主分支运行实时服务器,当我完成另一个分支并准备合并它时,将服务器翻转到该分支一段时间。如果它坏了,把它放回主人需要几秒钟。如果它工作,它将合并到master中,并且实时代码会更新。我想在SVN中对此进行类比将有两个工作副本,并通过符号链接指向实时副本。
答案 5 :(得分:3)
我知道Phing现在已被提及过几次,但我对phpUnderControl的运气很好。对我们来说,我们
答案 6 :(得分:3)
自制部署脚本的替代方案是部署到平台即服务,为您提取大量工作。 PaaS通常会提供自己的代码部署工具,以及扩展,容错(例如,在硬件发生故障时不会出现故障),并且通常是用于监控,日志检查等的强大工具包。还有部署到a的好处已知的良好配置,将随着时间的推移保持最新(少一点让你头痛)。
我推荐的PaaS是dotCloud,除了PHP(see their PHP quickstart)之外,它还可以部署MySQL,MongoDB和一大堆附加服务。它还有零停机部署,即时回滚,对SSL和websocket的完全支持等好消息。还有一个永远不错的免费套餐:)
当然,因为我在那里工作,我有点偏颇!除了dotCloud之外值得一试的其他选择是Pagodabox和Orchestra(现在是Engine Yard的一部分)。
希望这有帮助!
所罗门
答案 7 :(得分:2)
您自动而盲目地将更改从存储库更改为生产服务器听起来很危险。如果您提交的代码包含回归错误,那么您的生产应用程序会出现故障怎么办?
但是,如果你想要一个PHP的持续集成系统,我想Phing是PHP的最佳选择。我自己没有测试过,因为我做的是手工制作的方法。 SCP。
答案 8 :(得分:2)
我迟到了,但我想我会分享我们的方法。我们使用Phing Phingistrano,它通过预先构建的构建文件为Phing提供类似Capistrano的功能。它非常酷,但只有在你现在使用Git时才有效。
答案 9 :(得分:1)
我在服务器上有一个SVN发布分支的工作副本。更新站点(没有架构更改时)就像发布SVN更新命令一样简单。我甚至不必将网站脱机。
答案 10 :(得分:1)
另一种选择是使用Capistrano。显然它不像PHP那样与PHP集成,但你仍然可以将它用于很多东西。
最后,您始终可以编写shell脚本。到目前为止,这就是我所做的。
答案 11 :(得分:1)
http://controltier.org/wiki/Main_Page
我们将把它用于多服务器部署&维护。
答案 12 :(得分:1)
迟到一年但...... 就我而言,部署不是自动的。我觉得部署代码并自动运行数据库迁移脚本很危险。
相反,subversion挂钩仅用于部署到测试/登台服务器。在运行测试并确保一切正常后,代码将在迭代结束时部署到生产中。对于部署本身,我使用定制的Makefile,它使用rsync传输文件。 Makefile还可以在远程服务器上运行迁移脚本,暂停/恢复Web和数据库服务器。
答案 13 :(得分:1)
在我自己的工作中,我的团队已经为capistrano的部署开发了一个面向Phing的替代品,我们还整合了一些像PHPUnit测试,phpcs和PHPDocumentor这样的好东西。我们已经把它作为git repo,可以作为git中的子模块添加到项目中,并且它运行良好。我已将它附加到少数几个项目中,并且模块化程度足以使其适用于我们的几个环境中的任何项目(分段,测试,生产等等)。
使用phing构建脚本,您可以手动从命令行运行它们,我也成功地使用Hudson和现在的Jenkins ci自动构建/部署例程。
我现在无法发布任何链接,因为回购还没有公开,但我被告知我们有时会很快开源,所以如果您有兴趣请随时联系我如果您对使用phing和git自动部署有任何疑问。
答案 14 :(得分:0)
我猜SVN部署方式不是很好。这是因为:
您需要为全世界打开SVN访问
在生产网络服务器中有很多.svn
我认为Phing生成一个分支+将所有js / css + replace stage config + ssh上传到所有www服务器是更好的方法。
ssh到10 www服务器和svn up也很麻烦。