7

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

让我为你分解一下:

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

http://mydomain.com
|
|--------/客户1/
|
|--------/客户2/
|
|--------/customer3/ + 自定义功能

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

但是,客户 3 想要功能 X 或 Y,因此我们为他编写了该功能并将其添加到应用程序中。

但是,只要代码库有更新(即框架核心类中的安全修复),所有三个客户都应该获得基本代码的更新!

管理这种设置的最佳方式是什么?使用 FTP 手动上传所有文件很痛苦,而且无法合并代码。

使用 Git 或许是一种解决方案,但我该如何去做呢?为每个客户创建单独的存储库?如果我们发展到超过一百个客户怎么办?

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

4

3 回答 3

2

我记得几年前这样做了,所以你必须考虑到我现在对此有点生疏了。

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

对此的一个主要问题是,如果您导致说语法错误并将其上传到中央服务器,它将被拉到所有其他服务器并破坏它们!您最好使用 cron 作业来发出不使用框架的拉取请求,因此损坏的框架不会破坏它执行拉取请求以修复框架中的语法错误。一旦您在中央服务器上修复了语法错误,这至少增加了自动修复自身的能力。但是,在这种情况下,拥有一个用于测试每个更新的登台服务器确实非常重要。

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

在上传到中央服务器之前,您必须对此进行严格测试,以防止出现大量错误!不理想!单元测试、登台服务器、小而简单的更新但更频繁(大更新更有可能出错,如果出错则需要撤消更多)都有助于降低风险。

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

明智的设计,你最好看看其他语言框架,看看它们是如何做的。您必须坚持良好的设计原则,仅在适用的情况下使用设计模式,并注意 MVC!

进一步阅读...

这不是一件容易的事,所以要小心。

于 2012-11-23T19:12:06.780 回答
1

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

  • 发散代码的开发和支持
  • 将代码从(任何)SCM 部署到实时系统

回答第一个问题(对于任何现代) SCM 正在分支和合并分支(每个客户都有自己的分支,您将需要的部分从您的单个开发分支合并到其中,或者 /better/ 与您的“每个任务的分支”合并在所有需要的目标中合并任务分支,避免挑选)

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

于 2012-11-23T18:47:57.820 回答
0

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

于 2012-11-23T18:45:34.360 回答