2016-04-09 3 views
3

Я знаю, что это будет очень широкий вопрос, и я уверен, что это ничего нового в сегодняшнем мире, но я действительно не сейчас, с чего начать.Приложение для управления приложениями (архитектура)

Я начал работать над сервисом на основе рельсов, который позволит пользователям создавать, настраивать и управлять своими проектами (базовые копии одного приложения с настройкой). Проекты будут выполняться на субдомене с возможностью подключения собственного домена. (Совсем похоже на то, как SquareSpace и Wix и многие другие службы создания сайтов обрабатывают свои сайты)

Я хочу, чтобы эти проекты были максимально гибкими и настраиваемыми (включая визуальный дизайн, некоторые дополнительные функции и т. Д.), В то время как простота настройки и обновления для самой кодовой базы.

Таким образом, вопросы я начну с:

  1. Если каждый проект будет отдельное приложение (basicaly копия из же репо) с собственными конфиги, базы данных, Nginx и единорога конфиги и т.д. или я должен хранить все в 1 приложении и различать их с различными конфигурациями и, возможно, базами данных и активами?
  2. Если это лучше держать все отделенное ...
    1. ... что лучший способ установки (при условии, что у меня есть базовая конфигурация, чтобы начать с)?
    2. ... как бы я смог обновить их все (с исправлениями, новыми функциями, улучшением производительности и т. Д.) С одного места?
  3. Если я держу все проекты в одном приложении ...
    1. ... как я должен управлять concurency конфигурации между проектами?
    2. ... как я могу отделить данные и активы?

Как всегда, я был бы признателен за любую достаточную помощь я могу получить.

ответ

1

Рассмотрите архитектуру с несколькими арендаторами. Мы использовали его эффективно для fleet-genius.com.

Следующая ссылка представляет собой хороший обзор архитектуры с точки зрения Rails.

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

+0

Отличная статья и хороший улов с этим камнем. Я знал, что должно быть уже готовое решение для всего. У меня только пара вопросов для решения этой проблемы. 1. Вы бы посоветовали создать отдельное приложение для управления 'tennants' (у которого будут свои собственные пользователи, управление транзакциями и базовые настройки)? Если да, то как переносить теннанты из одного приложения в другое? 2. Как управлять различными макетами, представлениями и активами для разных арендаторов? – Almaron

+0

Вы можете мне немного помочь? – Almaron

+0

В моих целях работает одно приложение со всеми объектами, связанными с организацией через идентификатор организации. Вы можете сопоставлять макеты с организациями или даже с отдельными пользователями в зависимости от того, как вы реализуете макеты и моделируете свои данные. Вы можете использовать простые ассоциации Rails, чтобы связать все. Вам необходимо ограничить доступ, используя CanCan или тому подобное: https://github.com/ryanb/cancan/wiki/Fetching-Records – ob1

2

У меня нет опыта в создании такого рода вещей, и, возможно, есть простое решение, о котором я не знаю. Но мой ответ может дать вам несколько идей/указателей для начала.

1) Трудно дать точный ответ, но на основе критериев высокой персонализации и «копий одного приложения» вы говорите о, я бы для архитектуры более PAAS типа чем SAAS-как. Итак, отдельные приложения.

2,1) Вы можете рассмотреть установку с помощью:

  • A основных рельсов приложения с основным вебом-сервером и основным Nginx конфом. Подстановочный домен.
  • Куча динамически управляемых контейнеров-докеров. Каждый контейнер инициализируется от вашего единственного приложения, а затем персонализируется пользователем. Пользователь связан с его контейнерами через приложение основных рельсов. Когда контейнер создается из основного приложения, основная конфигурация nginx обновляется (т.добавив файл в разрешенных сайтах, которые определяют новый «сервер», который связывает открытый порт нового контейнера и право «имя_сервера»).
  • В каждом прилагаемом рельсовом судне установлен уникальный и общий рельсовый двигатель. Двигатель rails отправляется путем добавления соответствующего Gem в Gemfile, чтобы он мог быть обновлен.

2.2) Вы обновляете драгоценный камень «общий рельс». Затем вы можете запустить установку пакета в каждом контейнере.

Люди, заинтересованные в таких установках, могут рассмотреть такие инструменты, как dokku и deis.

+0

спасибо большое. Я пытался думать по тому же пути. Создание общего движка - приятный штрих, но он будет содержать почти все приложение сам по себе (за вычетом настройки и настройки). Выглядит очень неудобно, что все это происходит отдельно. – Almaron

+0

И я даже не знаю, как смонтировать эту штуку ... – Almaron