如何将网站部署到Web服务器?

时间:2009-02-05 10:16:33

标签: php svn deployment webserver

在我的公司,我们的业务网站有一组8位Web开发人员(完全用PHP编写,但这无关紧要)。小组中的每个人都在同时处理不同的项目,每当他们完成任务时,他们会立即部署它(因为这些天业务发展很快)。

目前,开发发生在一个共享服务器上,所有开发人员都使用相同的代码库(使用RCS将文件“锁定”远离其他文件)。部署到期时,更改的文件将被复制到“临时”服务器,然后同步脚本将文件上载到我们的主Web服务器,从那里将文件分发到其他9台服务器。

很高兴,网络开发团队向我们寻求帮助以改进流程(在我们抱怨一段时间后),现在我们建立开发环境的想法如下:

  • 具有虚拟目录的开发服务器,以便每个人都有自己的代码库,
  • SVN(或任何其他VCS)以跟踪变化
  • 用于测试持有最新签入代码的中央服务器

现在的问题是:我们如何设法将更改的文件部署到服务器而不会意外地从其他项目上传错误?我的第一个想法是简单地从存储库中导出最新版本,但这不能完全控制文件。

你如何处理这种情况?你有什么样的部署脚本?

(作为一项特殊挑战:该网站在过去十年中有机增长,因此项目不会分成小块,但一个特定功能的文件遍布目录树。)

7 个答案:

答案 0 :(得分:10)

Cassy - 在您完全按顺序完成源代码管理之前,您显然还有很长的路要走,但听起来就像您在路上一样!

拥有单独的沙箱肯定会有所帮助。接下来确保网站始终只是从subversion中清除特定版本,标签或分支。

我们使用git,但我们有类似的设置。我们使用版本号标记特定版本(在git中我们也可以为标记添加描述;适用于发行说明!)然后我们有一个脚本,任何有权访问“执行发布”的人都可以运行,需要两个参数 - 将更新哪个系统(数据中心,如果我们更新测试或生产服务器),然后是版本号(标签)。

该脚本使用sudo然后在共享帐户中运行发布脚本。它会检查相关版本,最小化javascript和CSS 1,将代码推送到环境的相关服务器,然后重新启动需要重新启动的内容。发布脚本的最后一行连接到其中一个Web服务器,并将错误日志定为尾部。

our websites我们在每个页面底部包含一个html注释,其中包含当前服务器名称和版本 - 让您可以轻松查看“现在正在运行什么?”

1以及其他许多内务处理任务......

答案 1 :(得分:2)

如果他们对共享代码库进行了大量更改,您应该考虑对单个项目(在相同的代码库上)使用分支和合并。

我们通常有一个本地开发环境用于测试(意思是本地网络服务器)用于测试未提交的代码(您根本不想提交无法运行的代码),但开发环境甚至可以在separeate服务器上使用共享文件夹。

但是,应该将已提交的代码部署到登台服务器进行测试,然后再将其投入生产。

答案 2 :(得分:1)

你可以使用Capistrano,尽管更多的是ruby,有一些articles描述了如何将它用于PHP

我认为Phing可以用于CVS,但不能用于SVN(至少我上次阅读的内容)

还有一些模仿Capistrano的项目,但用PHP编写。

否则,还有一个定制的解决方案:

  1. 您要部署的标记文件。
  2. 使用标签中的结帐文件 特定目录
  3. 将目录符号链接到当前 文档根目录(易于回滚到 以前的版本)

答案 3 :(得分:1)

自然地查看SVN以获取存储库,Trac跟踪内容,Apache Ant进行部署。

基本流程是在Subversion中进行管理,跟踪Trac中的repositroy和开发人员,并使用Ant部署脚本通过所需的设置推送您的站点。 Ant允许您轻松地将项目部署到特定位置。 (开发/测试/产品)等。

答案 4 :(得分:0)

您需要查看:

  • 持续集成
  • 在签入代码时运行单元测试以检查它是否无错误
  • 如果代码包含错误,可能会拒绝代码
  • 每晚制作
  • 仅发布无错误的最后一个版本

您可能无法获得完美的解决方案,特别是一开始就没有,但您使用所选解决方案的次数越多,每个人都会越舒适,并能够提出改进建议。

答案 5 :(得分:0)

我们每晚都会检查ant的稳定性。并使用ant脚本进行部署。它易于配置和使用。

答案 6 :(得分:0)

我昨天给了另一个问题similar answer。基本上,您可以在分支机构中工作并在上线之前进行集成。

你必须要做的最重要的事情是你正在处理文件的更改,而不是单个文件。一旦你有分支机构,就没有真正的当前版本,只有版本有不同的变化。