Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.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_Deployment_Automation_Web Deployment - Fatal编程技术网

将PHP web系统部署到多个位置

将PHP web系统部署到多个位置,php,deployment,automation,web-deployment,Php,Deployment,Automation,Web Deployment,我正在开发(SoloWebDeveloper)一个相当大的基于web的系统,需要在不同的位置运行。不幸的是,由于一些客户端已经拨号,我们不得不这样做,而没有一个中央服务器为他们所有。每个客户机都是我们VPN的一部分,拨号/ISDN上的客户机可以从我们的Cisco路由器按需拨号。所有客户端都可以在几秒钟内访问 我想知道一次向所有这些客户发布更新的最佳方式是什么。自动化将非常好,因为他们有23个以上的位置可以部署系统,每个位置都是非常定期使用的。因此,在部署时,我需要显示一个“更新”页面,以便在更新

我正在开发(SoloWebDeveloper)一个相当大的基于web的系统,需要在不同的位置运行。不幸的是,由于一些客户端已经拨号,我们不得不这样做,而没有一个中央服务器为他们所有。每个客户机都是我们VPN的一部分,拨号/ISDN上的客户机可以从我们的Cisco路由器按需拨号。所有客户端都可以在几秒钟内访问

我想知道一次向所有这些客户发布更新的最佳方式是什么。自动化将非常好,因为他们有23个以上的位置可以部署系统,每个位置都是非常定期使用的。因此,在部署时,我需要显示一个“更新”页面,以便在更新部分完成时,客户端不会尝试访问系统

你认为什么是最好的解决方案


编辑:找到允许我与Phing同步的文件。我将使用它。

在我工作的公司,我们使用基于web的Java和PHP大型系统。对于所有系统,我们都有自己的开发环境和生产环境。 这家公司有200多名开发者,所以我想你可以想象我们开发的产品的规模

我们所做的是使用ANT和RPM构建归档来创建部署包。这很容易做到。我自己没有做过,但可能值得你去调查。 因为我们使用Linux系统,所以我们可以轻松地部署RPM包,RPM包中的设置脚本可以确保所有内容都到达正确的位置。此外,您还可以获得更合适的版本处理和发布过程

希望这对你有帮助

比尔,
保罗

这有两个部分,让我们先讨论一下简单的部分:

我需要显示一个“更新”页面

如果您需要在保持事务完整性的同时禁用整个站点,并从正在更新的服务器向用户发布消息,那么唯一实用的方法是通过自动前置-这需要提前配置(注意-我相信这可以使用.htaccess文件完成,而无需重新启动Web服务器以获得新的PHP配置):


这里还有一个维护“主”代码存储库的案例(在SVN、CVS或GIT中)。这不是您的标准“在repo中保留代码版本并允许回滚”…此repo保存您当前的生产代码(仅限)。一旦更新准备就绪,您就可以将正在运行的更新代码检查到主repo中。您的所有服务器都会定期检查repo,以查看它是否已更改,如果发现更改,则下载新代码。该检查过程甚至可以包括打开
maintenance.php
文件(symcbean建议)开始回购下载之前,下载完成后删除文件。

可能重复[部署到多台服务器]()和。看一看和。现在忙着查看Phing。会让你知道它是如何进行的。这是RPM软件包的一个好主意。当然是。对于维护页面问题,我没有太多经验。我们在代码中用DB标志实现了这一点,但除非紧急情况,否则永远不会使用它。我们希望我们的产品能够正常运行ys可能可用,因此我们使用负载平衡器。这有助于高负载bt将它们划分到不同的机器和升级。但在我个人使用中,我也在同一台机器上本地使用了负载平衡器。唯一的原因是能够同时更新一个实例。访问者可以访问其他实例在升级期间。这样,您的产品“永远不会”向下。您可以使用符号链接。这样,从旧系统到新系统的更改将是即时的。问题仍然存在于数据库中。负载平衡是一个好主意,但我认为在这种情况下,这是一个非常麻烦的问题。您需要确保两个数据库都正确更改,等等。对数据库的更改是不可能的不总是确定的,如果数据库有更新,它们应该总是向后兼容的。如果你不得不回滚你所做的更新,会发生什么?符号链接非常棒,但对于更大的项目,它可能会非常混乱,当然,当你使用不同的发布策略时,只需复制它即可。应用程序d数据库应该被视为两种不同的产品,它们彼此都不可靠。这样,您总是可以安全地更新。依赖性越小,过程就越安全、更快、更可靠。获得了一个.htaccess文件,它将所有流量重定向到指定的URL
<?php

   if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/maintenance.php')) {
       include_once($_SERVER['DOCUMENT_ROOT'] . '/maintenance.php');
       exit;
   }