我正在寻找管理PHP Web应用程序的多个实例的最佳方式(或最简单的方法),这些实例共享相同的代码库。
让我为你分解一下:
我们的域正在托管应用程序的多个实例,每个实例都有自己的设置文件和数据库。
http://mydomain.com
|
| ------ / customer1表/
|
| ------ /的customer2 /
|
| ------ / customer3 / +自定义功能
让我们说客户1& 2购买了应用程序(我们为它们托管),并且它们具有该应用程序的基本模型。 (即未定制)
但是,客户3需要功能X或Y,因此我们为他编写该功能并将其添加到应用程序中。
但是只要代码库有更新(即框架核心类中的安全修复程序),所有三个客户都应该获得基本代码的更新!
管理此类设置的最佳方法是什么?使用FTP手动上传所有文件很麻烦,并且无法合并代码。
使用Git可能是一个解决方案,但我该如何去做呢?为每个客户创建单独的存储库?如果我们成长到超过一百个客户怎么办?
欢迎任何见解,包括为什么我们应该或不应该使用这样的设置。 (但请记住,我们将成为为客户提供应用程序的人员)
答案 0 :(得分:1)
您在一个问题中混合了两个不同的任务
回答第一个问题(对于任何现代)SCM是分支和合并分支(每个客户都有自己的分支,您可以从中单个开发分支合并所需的部分,或/更好/使用“每个任务分支”将所有需要的目标中的任务分支合并,避免采摘樱桃
关于第二个问题的答案是“构建工具”,它可以与您的SCM交互(您需要在稍后写更多详细信息以获得更详细的答案)
答案 1 :(得分:1)
我记得多年前这么做,所以你必须考虑到我现在有点生疏了。
我构建了一个独立框架,它将所有包含组合成一个.php文件。任何使用它的框架都会执行PULL请求,如果其框架的md5与中央服务器上的框架匹配,则不需要更新。否则,它将通过https下载新框架并替换它自己的副本。这创建了一个自动更新系统,该系统已被拉到所有其他使用它的应用程序。
一个主要的问题是,如果你说一个语法错误并将其上传到中央服务器,它将被拉到所有其他人并打破它们!您最好使用cron作业来生成不使用框架的pull请求,这样破坏的框架就不会破坏它执行拉动请求来修复框架中的语法错误。这至少增加了在中央服务器上修复语法错误后自动修复自身的能力。但是,在这种情况下,拥有一个测试每个更新的登台服务器非常重要。
当然,这只是基础知识,好像你说的是框架使用的图像,它们也需要被拉过来,以及任何SQL更新等等。
在上传到中央服务器之前,您必须对此进行重新测试,以防止出现质量错误!不太理想!单元测试,登台服务器,小而简单的更新,但更频繁(大型更新有更多可能出错,如果出现问题则更多撤消)将有助于降低风险。
您还必须构建框架非常非常非常非常好,从而在规划有许多不同的网站时使其尽可能灵活。如果你在开始时设计错误,那么几乎不可能在未来重新设计。例如,使用PDO进行数据库访问可能是明智的,允许所有应用程序能够使用不同的数据库,而您的类等仍然不知道如何与数据库交互(无论是mysql还是oracle),不过,我如果可以,建议至少坚持一个。
设计明智,你最好看看其他语言框架,看看他们是如何做的。您必须坚持良好的设计原则,仅在适用的地方使用设计模式,并注意MVC!
进一步阅读......
这不是一件容易的事,所以请注意。
答案 2 :(得分:0)
使您的自定义功能模块化。使用与WordPress / Joomla类似的架构,它具有插件或扩展。这使您的客户可以轻松拥有单独的功能集,但所有功能集都共享相同的基本代码。