因此,我正在安静地构建一个基于Symfony 3的大型SAAS Web应用程序。大约有10-20个应用程序,现在已经发展到超过500多个应用程序。单独的供应商目录已经是每个应用程序150 + MB的大小。带共享代码库的多实例symfony应用程序
所有这些应用程序都有自己的数据库。我想保持这种方式。不过,我相信如果一些代码被共享,这将是很好的。以供应商和src目录为例。这在每个应用程序中都是相同的,但是它们都是在OpCache中单独“加载”的。我相信从资源的角度来看,如果这些目录是共享的,那将是最好的。
Composer和Symfony似乎都不支持共享目录的多实例应用程序。然而,我想知道如果有人有任何线索来实现我的想法或者我的计划不可行?
配置对于每个应用程序(parameters.yml)是不同的,并且web目录在每个应用程序中包含不同的样式表。所以他们需要与其他人分开。
我一直在考虑为此使用环境设置,但我们有环境“测试”,“开发”,“应用程序1”,“应用程序2”等,感觉不对。config_prod.yml突然也变得无法使用。
我的思维方式错了吗?有关如何实现这一目标的任何建议?或者我应该去一个完整的单独实例?
(我们的应用程序使用的是SemVer,如果我们有版本1.0.0,版本1.1.0的共享代码,那么它甚至会很好,所以这甚至是最上面的一个层次,但也许这是下一步)
编辑: 澄清更多; 实质上你可以说web目录和var目录都不可共享。 Web目录包含自定义样式表,并且是主要的入口点。 var目录包含缓存文件,根据其数据库设置,每个应用程序的缓存文件都不相同。 最后,您还有自定义参数文件,每个应用程序都有不同的数据库凭据。
我尝试过符号链接,但作曲家对此并不满意。另外,使用符号链接时,工作目录始终是实际使用的目录,而不是实际的符号链接目录。 我也尝试使用应用程序的vhost文件中的自定义设置。覆盖高速缓存和内核目录是可能的,但是你又失去了你所符合的实际目录。
只是一个想法:Opcache使用真正的路径,你可以替换文件,如果相同的符号链接到“父母”。在作曲家安装后脚本化,你可以从中解脱... – hakre
是的,我试过了。但是,作曲家不支持供应商目录由多个应用程序符号链接。它可以在某个自动加载器中的某处保存路径。 –
我不是指供应商文件夹,而是包中的代码。而不是软件包,但在该级别下的所有文件都是相同的。 Linke递归地比较两个目录树,如果文件相同,则用符号链接替换它。 opcache然后将使用实际路径。这必须在脚本中完成,以便可以通过根除供应商文件夹进行重置,使用composer重新安装,然后重新运行compare&link脚本。 – hakre