Сегодня расскажем и покажем как за полчаса поднять свой Backend as a Service (BaaS) с весьма интересными возможностями.



BaaS — это веб-приложение, которое работает в облаке и предоставляет все необходимое для бизнес/мобильных приложений и сайтов (front-end). BaaS как минимум позволяет:

  • Управлять пользователями и ролями
  • Моделировать предметную область
  • Получать доступ к данным через REST
  • Управлять самими данными (база данных)

Вот здесь уважаемый yurash собрал основные на 2012 год BaaS-системы. Сейчас их значительно больше, но в плане вопросов, которые задают люди о BaaS-платформах, статья актуальна. Кстати, если интересует текущий рынок BaaS (и BAP — business application platform), то могу поделиться в следующей статье.

Что берем для создания BaaS


  • Orienteer — конструктор бизнес-приложений (business application platform) с открытым исходным кодом. В своей основе Orienteer использует OrientDB — NoSQL мульти-парадигмная база данных с крутыми возможностями прямо из коробки.

  • Docker Cloud — свободная платформа для развертывания в облаке контейнеров с приложениями Docker. На Хабре много статей про Docker.

BaaS на основе Docker-Orienteer позволяет быстро создавать приложения и быстро вносить изменения в уже имеющиеся приложения. При этом у системы низкий порог вхождения: простейшее приложение может создать человек, не знакомый с базами данных и программированием.
Связка BaaS-Docker может быть полезна и сервис-провайдерам, малым дизайн студиям и менеджерам in-house дата-систем.

Что получим в итоге


  1. Конструктор модели данных
  2. Широкий список типов данных: от примитивных (INTEGER, STRING и т.п.) до комплексных (LINK, EMBEDDED, LINKMAP, EMBEDDEDMAP), SPATIAL
  3. Экранные формы и виджеты для создания объектов спроектированной модели
  4. Управление пользователями и ролями
  5. Серверные скрипты на JavaScript/SQL
  6. REST-интерфейс с динамическим добавлением/изменением/удалением своих функций
  7. Проектирование и исполнение бизнес-процессов BPMN на основе Camunda
  8. Модульная архитектура для гибкого расширения через java, если очень понадобится

Развертываем


Вот он наш план на ближайшие полчаса

  1. Регистрируемся на Docker Cloud
  2. Регистрируемся на Digital Ocean (AWS, Azure и т.п.)
  3. Связываем Docker Cloud и Digital Ocean: создаем свою ноду
  4. Создаем и запускаем свой сервис Orienteer
  5. Настраиваем под себя

Регистрация на Docker Cloud


Docker Cloud в плане процедуры регистрации не отличается чем-то особенным от других сервисов в интернете.

  1. Заходим на Docker Cloud
  2. Придумываем Docker ID (aka username). Рекомендую использовать только нижний регистр со знаком “-”: если в будущем захотите использовать Docker весьма тесно и будете выпускать свои образы для контейнеров, будет проще адресовывать
  3. Задаем email и пароль
  4. Подтверждаем email, и всё: вы зарегистрированы!

Регистрация на Digital Ocean


  1. Идем на Digital Ocean. Рекомендую использовать эту реферальную ссылку, так как это даст вам дополнительные $10
  2. Регистрация еще проще чем на Docker Cloud: задаете email и пароль
  3. При регистрации рекомендую использовать promo-code от Docker Cloud, который даст вам еще $20. Чтобы узнать его, зайдите в Cloud Settings на Docker Cloud. Вы увидите что-то типа этого:



  4. Подтверждаете email и всё: вы зарегистрированы

Связываем Digital Ocean и Docker Cloud


  1. Идем на знакомую страницу Docker Cloud > Cloud Settings (см. картинку выше)
  2. В строке Digital Ocean нажимаем на перечеркнутую розетку
  3. Авторизуем Digital Ocean для Docker Cloud’а (то есть, вводим email и пароль докера)
  4. Готово

Создаем свой сервис Orienteer


  1. Прежде всего надо создать как минимум одну ноду, на которой будем запускать наш BaaS. Для этого на Docker Cloud:

    • Идем в Node Clusters и нажимаем Create
    • В пункте Providers выбираем Digital Ocean
    • Указываем регион
    • Выбираем тип ноды. Рекомендую выбирать с не менее чем 1 Гб памяти
    • Жмем Create. Вы увидите что-то вроде картинки ниже. Docker Cloud сам закажет, установит, настроит и запустит ноду на Digital Ocean



  2. Осталось совсем чуть-чуть: запустить свою копию Orienteer из образа Docker. Orienteer — гомогенное приложение: все свое носит с собой. Поэтому создавать Docker Stack не понадобится. Нужен лишь сам сервис.

    • Идем в Services и нажимаем Create
    • В предложенном списке сверху выбираем Public Services
    • В блоке слева вводим критерий поиска: orienteer/orienteer
    • Выбираем именно orienteer/orienteer и попадаем на такую страницу:



    • Из всего множества настроек единственное, что обязательно необходимо настроить — это порты, доступные снаружи. Например, так:



    • Жмем Create & Deploy

  3. Придется подождать, пока образ Docker будут скачан на нашу ноду и запущен. Обычно это занимает не больше 3 минут. В итоге вы увидите что-то как на картинке ниже.


    Жмем на ссылку и попадаем на наш собственный BaaS на основе Orienteer. Чтобы войти в систему используйте логин/пароль по умолчанию: admin/admin



Настраиваем под себя




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

Настройку под конкретное ваше приложение можно условно разделить на следующие шаги:

  1. Создать модель данных
  2. Сконфигурировать модель ролей и пользователей
  3. Раздать права по ролям/пользователям
  4. Добавить необходимые скрипты исполняемые на серверной стороне
  5. Настроить интерфейс: виджеты, отчеты, графики, перспективы и т.д.

Нет предела совершенству, поэтому доводить напильником можно до бесконечности: вводя свои виджеты, свои форматы экспорта, бизнес процессы, печатные отчеты, нотификации и т.д. Если есть вопросы по дальнейшей настройке под ваши нужды: всегда рады помочь!
О чем вам было бы интересно почитать в следующий раз в нашем блоге?

Проголосовало 39 человек. Воздержалось 9 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Поделиться с друзьями
-->

Комментарии (10)


  1. yurash
    17.10.2016 13:09
    +2

    Бегло оглядел сайт orienteer.org и документацию https://orienteer.gitbooks.io/orienteer/content И, бегло же, оглядел демку http://demo.orienteer.org. Я бы рекомендовал в первой статье как раз рассмотреть что же можно реально делать в этой «админке», а docker+DO уже можно и для второй статьи оставить.
    Пока что впечатления из разряда «не то чтобы очень». С одной стороны, в основе лежит orientDB про которую пишут много хорошего (хотя я реально с ней не знаком совсем). С другой стороны — документация скудная, ничего не понятно (интересовали пункты 5,6,7 вашего «что получим в итоге»). Однако понятно, что лично мне Business Application Platform как-то не очень интересен. Особенно когда он идёт со своими виджетами. Или я чего не понимаю (что вполне вероятно), но свои виджеты — это тупиковый путь. Ребята с платформой Wakanda долго пилили свои виждеты, в результате год назад поняли что это фэйл и переориентировались на разработку своей платформы для лёгкого использования с Angular, но поезд ушёл.


    1. OrienteerBAP
      17.10.2016 16:47
      +1

      В следующий раз обязательно напишем подробнее, что можно сделать на платформе! От ярлыка «админка» хотелось бы в целом отделаться.
      Спасибо, за Wakanda: странно как в своем исследовании мы нашли 35+ других библиотек и платформ, а вот Wakanda обошли стороной.
      Насчет виджетов: здесь ограничений нет. Если Angular JS, то без проблем можно использовать: ровно и как любой другой JS фреймворк. Создать свой виджет можно и как через java код, так и через UI используя HTML/JS Widget, который работает на подобие jsFiddle.


      1. yurash
        17.10.2016 18:43

        мы нашли 35+ других библиотек и платформ

        Не могли бы вы поделиться списком? А я дополню.

        Создать свой виджет… через UI используя HTML/JS Widget,

        можно пример или руководство, что-то я не нашёл?
        вы про это — https://orienteer.gitbooks.io/orienteer/content/adding_html_and_javascript_widgets.html по-моему это не совсем то. (Там и информации-то почти нет)
        Не скажу за всех разработчиков, но очевидно, что Parse пользовался большим спросом, и хотелось бы видеть «Parse на стероидах», ну или в вашем случае «Parse на orientDB», и я никак не вижу вашу платформу как замену parse (вы нигде не декларируете этого, просто этого ждут от современной BaaS)


        1. OrienteerBAP
          18.10.2016 03:51

          Список выслал в личные сообщения. После причесывания, все-таки, сделаем обзорную статью по BaaS/BAP на текущий момент.

          Насчет Parse. К функционалу Parse стремимся, но есть вещи, которые у нас есть, но нет в Parse, например поддержка бизнес процессов BPMN (через Camunda), фреймворк для создания UI на основе Widgets/Dashboard, интеграция с BIRT и т.п.


  1. OrienteerBAP
    18.10.2016 03:50

    Список выслал в личные сообщения. После причесывания, все-таки, сделаем обзорную статью по BaaS/BAP на текущий момент.

    Насчет Parse. К функционалу Parse стремимся, но есть вещи, которые у нас есть, но нет в Parse, например поддержка бизнес процессов BPMN (через Camunda), фреймворк для создания UI на основе Widgets/Dashboard, интеграция с BIRT и т.п.


  1. IvanSCM
    18.10.2016 18:13

    Замечательно, что вы предоставили Docker контейнер. Мне как разработчику AngularJS (сейчас изучаю Android разработку) будет очень полезно данное приложение.


    1. OrienteerBAP
      18.10.2016 21:34

      Если будут вопросы или проблемы со встроиванием AngularJS в Orienteer виджеты — пишите — поможем. Документация на этот счет достаточно скудная: хотелось бы более четко понять, что здесь больше нужно разработчикам.


  1. dmitrybelsky
    18.10.2016 18:13

    А что-то про multitenancy планируете? Давно что-то подобное искал


    1. OrienteerBAP
      18.10.2016 21:45

      Весьма интересный вопрос, так как последнее время в работе над архитектурой мы крутимся именно вокруг подхода к multitenancy. И вот наши соображения, если совсем коротко:

      Тенант тенанту рознь: прежде всего они могут отличаться по уровню предметной области, которую они разделяют друг с другом. Если пересечений по предментной области нет и не планируется, то multitenancy проще всего организовать через разные Docker контейнеры. Если же тенанты должны использовать одну и туже предментную область, то здесь разграничение делается на уровне безопасности: один тенант не имеет возможности читать объекты другого. Но самый интересный случай, это когда тенанты имеют общую предметную область, но хотят изменять ее незначительно под себя. В этом случае возможно два решения: либо поставлять общую «предметку» через специализированный docker образ, либо позволить уметь работать на одном инстансе Orienteer с двумя и более базами данных OrientDB, причем имея «системные классы» в одной целой.

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


  1. relgames
    27.10.2016 16:08

    http://demo.orienteer.org/login

    Unexpected RuntimeException

    Last cause: User or password not valid for database: 'orienteer-demo-db'
    WicketMessage: Exception in rendering component: [Component id = prompt]