用于管理应用程序的应用程序(架构)
App for managing apps (architecture)
我知道这将是一个非常广泛的问题,我很确定这在当今世界并不是什么新鲜事,但我现在真的不知道从哪里开始。
我已经开始研究基于 rails 的服务,该服务允许用户创建、配置和管理他们的项目(基本上是具有自定义功能的单个应用程序的副本)。这些项目将 运行 在一个子域上,可以选择连接他们自己的域。 (与 SquareSpace 和 Wix 以及许多其他网站建设服务处理其网站的方式非常相似)
我希望这些项目尽可能灵活和可定制(包括视觉设计、一些附加功能等),同时保持代码库本身易于设置和更新。
所以我开始的问题是:
- 每个项目是否应该是一个单独的应用程序(基本上是
同一个 repo)有自己的配置、数据库、nginx 和 unicorn
配置等,或者我应该将所有内容都保留在 1 个应用程序中并区分它们
使用不同的配置,可能还有数据库和资产?
- 如果最好将所有东西分开...
- ...最好的设置过程是什么(假设我有基本配置开始)?
- ...我如何才能从一个地方更新它们(包括错误修复、新功能、性能改进等)?
- 如果我将所有项目都放在同一个应用程序中...
- ...我应该如何管理项目之间的配置并发性?
- ...如何分离数据和资产?
一如既往,如果能得到足够的帮助,我将不胜感激。
我没有构建这类东西的经验,也许有一个我不知道的简单解决方案。但我的回答可能会给你一些 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。然后,您可以 运行 在每个容器中进行捆绑安装。
等工具
考虑多租户架构。我们已经将它有效地用于 fleet-genius.com.
以下 link 从 Rails 的角度很好地概述了架构。
http://blog.elbowroomstudios.com/zero-to-multitenant-in-15-minutes-a-rails-walkthrough/
我知道这将是一个非常广泛的问题,我很确定这在当今世界并不是什么新鲜事,但我现在真的不知道从哪里开始。
我已经开始研究基于 rails 的服务,该服务允许用户创建、配置和管理他们的项目(基本上是具有自定义功能的单个应用程序的副本)。这些项目将 运行 在一个子域上,可以选择连接他们自己的域。 (与 SquareSpace 和 Wix 以及许多其他网站建设服务处理其网站的方式非常相似)
我希望这些项目尽可能灵活和可定制(包括视觉设计、一些附加功能等),同时保持代码库本身易于设置和更新。
所以我开始的问题是:
- 每个项目是否应该是一个单独的应用程序(基本上是 同一个 repo)有自己的配置、数据库、nginx 和 unicorn 配置等,或者我应该将所有内容都保留在 1 个应用程序中并区分它们 使用不同的配置,可能还有数据库和资产?
- 如果最好将所有东西分开...
- ...最好的设置过程是什么(假设我有基本配置开始)?
- ...我如何才能从一个地方更新它们(包括错误修复、新功能、性能改进等)?
- 如果我将所有项目都放在同一个应用程序中...
- ...我应该如何管理项目之间的配置并发性?
- ...如何分离数据和资产?
一如既往,如果能得到足够的帮助,我将不胜感激。
我没有构建这类东西的经验,也许有一个我不知道的简单解决方案。但我的回答可能会给你一些 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。然后,您可以 运行 在每个容器中进行捆绑安装。
等工具考虑多租户架构。我们已经将它有效地用于 fleet-genius.com.
以下 link 从 Rails 的角度很好地概述了架构。
http://blog.elbowroomstudios.com/zero-to-multitenant-in-15-minutes-a-rails-walkthrough/