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

App for managing apps (architecture)

我知道这将是一个非常广泛的问题,我很确定这在当今世界并不是什么新鲜事,但我现在真的不知道从哪里开始。

我已经开始研究基于 rails 的服务,该服务允许用户创建、配置和管理他们的项目(基本上是具有自定义功能的单个应用程序的副本)。这些项目将 运行 在一个子域上,可以选择连接他们自己的域。 (与 SquareSpace 和 Wix 以及许多其他网站建设服务处理其网站的方式非常相似)

我希望这些项目尽可能灵活和可定制(包括视觉设计、一些附加功能等),同时保持代码库本身易于设置和更新。

所以我开始的问题是:

  1. 每个项目是否应该是一个单独的应用程序(基本上是 同一个 repo)有自己的配置、数据库、nginx 和 unicorn 配置等,或者我应该将所有内容都保留在 1 个应用程序中并区分它们 使用不同的配置,可能还有数据库和资产?
  2. 如果最好将所有东西分开...
    1. ...最好的设置过程是什么(假设我有基本配置开始)?
    2. ...我如何才能从一个地方更新它们(包括错误修复、新功能、性能改进等)?
  3. 如果我将所有项目都放在同一个应用程序中...
    1. ...我应该如何管理项目之间的配置并发性?
    2. ...如何分离数据和资产?

一如既往,如果能得到足够的帮助,我将不胜感激。

我没有构建这类东西的经验,也许有一个我不知道的简单解决方案。但我的回答可能会给你一些 ideas/pointers 开始。

1) 很难给出准确的答案,但基于高个性化标准和你所说的 "copies of a single app",我会选择更 PAAS 的架构SAAS-like。所以分离应用程序。

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

  • A main rails app,带有主网络服务器和主 nginx conf。通配符域。
  • 一堆动态管理的 docker 容器。每个容器都从 您的单个应用程序 初始化,然后由用户进行个性化设置。用户通过主 rails 应用与其容器相关联。当从主应用程序创建容器时,主要的 nginx 配置被更新(即通过在 sites-enabled 添加一个文件,它定义了一个新的 'server' 绑定新容器的开放端口,并且正确的 'server_name').
  • 每个都包含 rails 个应用程序,提供一个独特且 共享的 rails 引擎 。 rails 引擎是通过在 Gemfile 中添加相应的 gem 来发布的,因此它可以被更新。

2.2) 你更新'shared rails engine'gem。然后,您可以 运行 在每个容器中进行捆绑安装。

对此类设置感兴趣的人可能会考虑 dokku and deis.

等工具

考虑多租户架构。我们已经将它有效地用于 fleet-genius.com.

以下 link 从 Rails 的角度很好地概述了架构。

http://blog.elbowroomstudios.com/zero-to-multitenant-in-15-minutes-a-rails-walkthrough/