按客户端划分Symfony2目录结构

时间:2013-03-16 22:44:50

标签: symfony

在客户端入口点是子域的多客户端场景中,我想知道是否可以将我的客户端分成基本上包含应用程序的目录(如缓存,配置,日志,内核),然后将符号链接返回到其余的(供应商,src和web)的“核心”Symfony目录。这让我可以保持应用程序与我的捆绑包统一,但为每个客户端提供了一个单独的配置。然后我将我的子域指向各自的目录。

从表面上看,它似乎很有希望,并且比我一直在考虑的其他方法更简单。 如果我想将客户端升级到版本2或添加组件,我可以切换捆绑包,甚至将符号链接指向一个全新的源。它也可能很好地扩展。 我也想知道使用这种方法是否允许我在客户端之间维护单独的安全上下文,而不是检查子域并重定向以在用户手动切换子域时进行身份验证。

下行将是多个配置文件的重复,并且更多涉及初始客户端设置(但在我看来,老实说没有坏事)。

Symfony2是否具有足够的灵活性来处理这种重新安排? 在多客户端应用程序中是否存在分离缓存的速度或安全性等好处? 在每个配置中使用单独的防火墙会为每个子域产生不同的安全上下文吗?



背景/补充信息:
我正在重新开发一个多客户端/租户的应用程序。我在重新设计中使用Symfony2,因为原始版本位于Doctrine之上,我现在需要更强大的框架功能。我想维护一个应用程序(它在所有客户端中都是相同的)并为每个客户端提供单独的数据库。我的期望是100-200个客户最大的现实(如果我过去,我会庆祝,然后担心它)。数据库之间的架构是相同的,我为了便于备份/恢复而分离,以及稍后的单独升级路径。

我花了很多时间阅读关于多重性的许多问题和答案。还有关于使用路由和内核侦听器来使用子域来收集客户端ID,然后动态选择数据库连接等等。我最终找到了blog post from Orm-designer.com outlining what they did when they moved their site to a new VPS。他们详细介绍了帖子中的目录结构,让我思考如何根据自己的目的调整概念。

1 个答案:

答案 0 :(得分:0)

如果我理解你,你有:

  • 您的应用程序基于Symfony 2,
  • 数据库结构,
  • 几台机器,

你需要:

  • 在~200个节点上部署您的应用程序(它们可能位于不同的节点上) 机),
  • 保持配置易于维护,
  • 为每个应用程序使用相同的源代码,

你需要:

  • 在您的应用程序中实施维护模式,
  • 决定哪些文件是用户specyfic,
  • 来自某个共享位置的所有非用户specyfic sym-link到客户端文件夹的文件,
  • 实施rsync脚本以更新所有用户通用的文件,

每次您想要更新应用程序的版本时:

  • 让客户知道您的应用程序将无法使用 时间,
  • 将所有应用程序置于维护模式,
  • rsync所有计算机之间的公共代码,并清除每个客户端的缓存/部署资产,
  • 如果需要,准备备份并运行数据库更新脚本,
  • 在所有客户端计算机上运行功能测试并关闭维护模式,

客户端文件夹:

Machine 1
  SourceFolder
    app
    bin
    src
      Company
        YourBundle
           *Controller
           Resources
             config
             *css
             ...
           ...
    *vendor
    web

带有*的目录是指向同一台计算机上多个客户端共享的文件夹的sym-links,其余目录是用户specyfic。

相关问题