Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.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_Git_Web Applications_Version Control - Fatal编程技术网

Php 使用相同的代码库管理多个web应用程序

Php 使用相同的代码库管理多个web应用程序,php,git,web-applications,version-control,Php,Git,Web Applications,Version Control,我正在寻找管理共享相同代码库的多个PHP web应用程序实例的最佳方法(或最简单的方法) 让我为您详细介绍一下: 我们的域承载着应用程序的多个实例,每个实例都有自己的设置文件和数据库 | |------/客户1/ | |------/客户2/ | |------/customer3/+自定义功能 假设客户1和2购买了应用程序(我们为他们托管),并且他们拥有该应用程序的基本模型。(即非定制) 然而,客户3想要特性X或Y,所以我们为他编码该特性并将其添加到应用程序中 但是,无论何时对代码库进行更新

我正在寻找管理共享相同代码库的多个PHP web应用程序实例的最佳方法(或最简单的方法)

让我为您详细介绍一下:

我们的域承载着应用程序的多个实例,每个实例都有自己的设置文件和数据库


|
|------/客户1/
|
|------/客户2/
|
|------/customer3/+自定义功能

假设客户1和2购买了应用程序(我们为他们托管),并且他们拥有该应用程序的基本模型。(即非定制)

然而,客户3想要特性X或Y,所以我们为他编码该特性并将其添加到应用程序中

但是,无论何时对代码库进行更新(即,框架核心类中的安全修复),所有三个客户都应该得到基本代码的更新

管理这种设置的最佳方法是什么?使用FTP手动上传所有文件是一件痛苦的事情,而且不可能合并代码

使用Git也许是一个解决方案,但我该如何去做呢?为每个客户创建单独的存储库?如果我们的客户数量增长到100多家呢


欢迎提供任何见解,包括为什么我们应该或不应该使用这样的设置。(但请记住,我们将为客户托管应用程序)

使您的自定义功能模块化。使用类似于WordPress/Joomla的架构,它有插件或扩展。这使您的客户可以轻松地拥有单独的功能集,但所有功能集共享相同的基本代码。

您在一个问题中混合了两个不同的任务

  • 发散代码的开发与支持
  • 将(任何)SCM中的代码部署到实时系统
第1个问题的答案(对于任何现代的SCM来说)是分支和合并分支(每个客户都有自己的分支,您可以将单个开发分支中需要的部分合并到其中,或者/更好地/使用“每个任务分支”将任务分支合并到所有需要的目标中,避免盲目挑选)


第二个问题的答案是“构建工具”,它可以与您的SCM交互(稍后您必须编写更多详细信息以获得更详细的答案)

我记得几年前做过这件事,所以您必须考虑到我现在对此有点生疏了

我构建了一个独立的框架,它将所有include合并到一个.php文件中。任何使用它的框架都会执行拉请求,如果它们的框架的md5与中央服务器上的框架匹配,则不需要更新。否则,它将通过https下载新框架并替换它自己的副本。这创建了一个自动更新系统,该系统被拉到所有其他使用它的应用程序

这方面的一个主要问题是,如果您导致语法错误,并将其上传到中央服务器,它将被拉到所有其他服务器并破坏它们!您最好使用cron作业来发出不使用框架的pull请求,这样被破坏的框架就不会因为执行pull请求来修复框架中的语法错误而中断它。这至少增加了在中央服务器上修复语法错误后自动修复自身的能力。然而,在这种情况下,让一个临时服务器来测试每个更新确实非常重要

当然,这只是基础知识,就像你说框架使用的图像一样,它们也需要被拉过来,以及任何SQL更新等等

您必须在上传到中央服务器之前对此进行定期测试,以防止出现大量错误!不理想!单元测试、暂存服务器、小而简单的更新,但更频繁的更新(大的更新更容易出错,如果出错则更容易撤销)都将有助于降低风险

您还必须从一开始就很好地构建框架,以便在规划让许多不同的站点使用框架时尽可能灵活。如果你一开始设计错了,以后再重新设计几乎是不可能的。例如,使用PDO访问数据库可能是明智的,允许所有应用程序使用不同的数据库,而您的类等仍然不知道如何与数据库交互(无论是mysql还是oracle),不过,我建议如果可以,至少坚持使用一个

在设计方面,最好看看其他语言框架,看看它们是如何工作的。您必须坚持好的设计原则,仅在适用的地方使用设计模式,并注意MVC

进一步阅读


这不是一项容易的任务,因此请注意。

这些功能是如何设置的?最有可能是基于模块的设置,因此您可以使用数据库表:Client->feature 1->off,client2->feature 2->on,并在代码中启用或禁用该功能。这些功能是模块化的,因为框架支持它。我已经在使用MVC框架,可以用模块进行扩展。我会看看你提供的链接,谢谢!它是一个定制的框架,开源的还是商业的?这很好,所以人们希望它设计得合适。让我们知道你是如何完成这项任务的。