管理应用程序的应用程序(架构)

3
我知道这可能是一个非常广泛的问题,而且我相信在今天的世界中并不是什么新鲜事物,但我真的不知道从哪里开始。 我已经开始开发一个基于rails的服务,允许用户创建、配置和管理他们的项目(基本上是单个应用程序的副本,并进行自定义)。项目将在子域上运行,并提供连接其自己的域名的选项。(类似于SquareSpace、Wix和许多其他网站构建服务处理其网站的方式)。
我希望这些项目尽可能灵活和可定制(包括视觉设计、一些附加功能等),同时保持对代码库本身的设置和更新的简易性。
那么我先从以下问题开始:
1. 每个项目应该是一个独立的应用程序(基本上是同一版本库中的副本),具有自己的配置、数据库、nginx和独角兽配置等,还是应该将它们全部保存在一个应用程序中,通过不同的配置甚至数据库和资产来区分它们?
2. 如果最好将所有内容分开...
a) ... 最佳的设置流程是什么(假设我有开始基本配置)?
b) ... 如何在一个地方更新它们所有(使用bug修复、新功能、性能优化等)?
3. 如果我在同一个应用程序中保存所有项目...
a) ... 应该如何管理项目之间的配置并发性?
b) ... 如何分离数据和资产?
像往常一样,我会感激任何能够提供足够帮助的人。
2个回答

2

我没有建立这种东西的经验,也许有一种容易的解决方案我不知道。但我的答案可能会给你一些想法/指针来开始。

1)很难给出准确的答案,但基于高度个性化的标准和你所谈到的“单个应用程序副本”,我会选择更像 PAAS 而不是 SAAS 的架构。所以分离的应用程序。

2.1)您可以考虑使用以下设置:

  • 一个主要的Rails应用程序,带有一个主要的Web服务器和一个主要的nginx配置。通配符域名。
  • 一堆动态管理的Docker容器。每个容器都从您的单个应用程序初始化,然后由用户个性化。用户通过主要的Rails应用程序与其容器相关联。当从主应用程序创建容器时,将更新主nginx配置(即通过添加文件在sites-enabled中定义新的“server”,绑定新容器的开放端口和正确的“server_name”)。
  • 每个包含的Rails应用程序都有一个独特且共享的Rails引擎。通过在Gemfile中添加相应的gem来运送Rails引擎,以便可以更新它。

2.2)您可以更新“共享Rails引擎”gem。然后在每个容器中运行bundle install。

对这种设置感兴趣的人可能会考虑使用像dokkudeis这样的工具。


非常感谢。我也在尝试沿着同样的思路考虑。制作一个共享引擎是个不错的点子,但它几乎包含了整个应用程序(除了自定义和配置)。构建整个引擎似乎非常不方便。 - Almaron

1

很棒的文章,那个宝石真是个好发现。我知道一定有已经解决了所有问题的解决方案。 我只有几个问题来总结这个问题。1.您是否建议制作一个单独的应用程序来管理租户(将拥有自己的用户、交易管理和基本设置)?如果是,那么如何将租户从一个应用程序转移到另一个应用程序?2.如何为不同的租户管理不同的布局、视图和资产? - Almaron
你能帮我一下吗? - Almaron
对于我的目的,一个包含所有与组织相关联的对象的单个应用程序通过组织ID工作。您可以根据布局和数据建模的实现方式将布局与组织或甚至单个用户关联起来。您可以使用简单的Rails关联来关联所有内容。您需要使用CanCan或类似工具限制访问权限:https://github.com/ryanb/cancan/wiki/Fetching-Records - ob1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接