Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将网站部署到Web服务器?_Php_Svn_Deployment_Webserver - Fatal编程技术网

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

Php 如何将网站部署到Web服务器?,php,svn,deployment,webserver,Php,Svn,Deployment,Webserver,在我的公司,我们的商业网站有一个由8名web开发人员组成的团队(完全用PHP编写,但这不重要)。团队中的每个人都在同一时间从事不同的项目,每当他们完成任务时,他们都会立即部署它(因为现在业务发展很快) 目前,开发是在一个共享服务器上进行的,所有开发人员都在同一个代码库上工作(使用RCS将文件“锁定”到其他人之外)。当部署到期时,更改的文件被复制到“暂存”服务器,然后同步脚本将文件上载到主Web服务器,并从主Web服务器分发到其他9台服务器 非常高兴的是,web开发团队向我们寻求帮助以改进流程(在

在我的公司,我们的商业网站有一个由8名web开发人员组成的团队(完全用PHP编写,但这不重要)。团队中的每个人都在同一时间从事不同的项目,每当他们完成任务时,他们都会立即部署它(因为现在业务发展很快)

目前,开发是在一个共享服务器上进行的,所有开发人员都在同一个代码库上工作(使用RCS将文件“锁定”到其他人之外)。当部署到期时,更改的文件被复制到“暂存”服务器,然后同步脚本将文件上载到主Web服务器,并从主Web服务器分发到其他9台服务器

非常高兴的是,web开发团队向我们寻求帮助以改进流程(在我们抱怨了一段时间之后),现在我们对设置他们的开发环境的想法如下:

  • 一个带有虚拟目录的开发服务器,这样每个人都有自己的代码库
  • SVN(或任何其他VCS)负责跟踪变更
  • 用于测试保存最新签入代码的中央服务器
现在的问题是:我们如何将更改的文件部署到服务器上,而不意外地上传来自其他项目的bug?我的第一个想法是简单地从存储库中导出最新版本,但这并不能完全控制文件

你如何处理这种情况?您使用的是哪种部署脚本

(这是一个特殊的挑战:该网站在过去10年中实现了有机发展,因此项目不会被分割成小块,而是一个特定功能的文件分布在目录树上。)

您需要查看:

  • 连续积分
  • 对代码的签入运行单元测试以检查它是否没有bug
  • 如果代码包含bug,则可能会拒绝该代码
  • 夜间锻炼
  • 只发布最后一个没有bug的构建

您可能无法找到完美的解决方案,尤其是一开始,但您使用所选解决方案的次数越多,每个人都会感到更舒适,并且能够提出改进建议。

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

Cassy-显然,要完全理顺源代码管理,您还有很长的路要走,但听起来您已经走上了正轨

拥有单独的沙盒肯定会对事情有所帮助。接下来,请确保网站始终只是subversion的特定修订、标记或分支的干净签出

我们使用git,但我们有类似的设置。我们用一个版本号标记一个特定的版本(在git中,我们还可以在标记中添加一个描述;这对于发行说明很好!),然后我们有一个脚本,任何有权“发布”的人都可以运行该脚本,它包含两个参数——将要更新的系统(数据中心,以及如果我们正在更新测试或生产服务器)然后是版本号(标签)

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

在上,我们在每个页面的底部添加一条html注释,注释中包含当前服务器名称和版本,这样就很容易看到“现在正在运行什么?”


还有一大堆其他的内务管理任务,比如…

您可能可以使用Capistrano,尽管它更适合ruby,但有一些描述了如何在PHP中使用它

我认为Phing可以用于CVS,但不能用于SVN(至少这是我上次读到的)

还有一些类似Capistrano的项目是用PHP编写的

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

  • 标记要部署的文件
  • 使用a中的标记签出文件
    特定目录
  • 将目录符号链接到当前目录 文档根目录(易于回滚到 (上一版本)

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

    我们通常有一个本地开发环境用于测试(也就是说,webserver本地)未受限制的代码(您根本不想提交不起作用的代码),但该开发环境甚至可以位于使用共享文件夹的Separate服务器上

    然而,提交的代码在投入生产之前应该部署到临时服务器进行测试。

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

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

    自然地检查存储库,跟踪内容,并进行部署


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

    不幸的是,无法确定构建是否没有bug。事实上在当前的工作方式中,没有构建这样的东西……听起来像是在开玩笑——这些都是很好的事情,但他们必须先走才能运行。如果你安装VersionControl_SVN PEAR包,Phing实际上可以使用SVN。