Как мобильный разработчик, я часто вынужден использовать бекенд-функционал для своих приложений. Не важно, для каких функций, но так или иначе он нужен практически в каждом проекте.

Любителям все делать «с нуля», можно написать свой сервис и особо не заморачиваться поиском готовых решений, что не всегда целесообразно, так как для внесения изменений в логику работы сервиса требуется произвести неприлично много лишних действий из-за какой либо ерунды.

К счастью, я не отношусь к подобным «хардкорщикам», потому и использую сервис «Parse» в своей работе. Просто и хорошо, благо, что сервис позволяет практически «накликать» нужный функционал. Но недавно я задумался, что в один прекрасный момент лимитов сервиса может оказаться недостаточно и тогда придется переходить на платное использование сервиса или делать собственный бекенд.

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

Часто многие компании (Пример: DEVPROM, GITLAB) позволяют бесплатно использовать свои продукты для размещения на собственном сервере, так как в этом случае не расходуются их ресурсы и сервисы дополнительно популяризуются за счет более массового распространения. Естественно, поддержка для продукта в данном случае если и предоставляется, то очень ограниченная, потому ключевую роль играет качество документирования продукта. Если все прозрачно и документировано, то можно без особого труда использовать подобные решения. Если нет, то лучше поискать другие варианты.

Кому интересна информация, добро пожаловать под кат.

О BaasBox


BaasBox — сервис, написанный на Java, использующий в своей работе «Play Framework». Сервис примечателен тем, что помимо использования собственных облачных ресурсов позволяет загрузить его на собственный сервер и использовать без каких-либо ограничений.

В настоящее время сервис имеет собственные SDK для JavaScript, Android и iOS устройств и поддерживает:

1) Управление контентом
  • работу с коллекциями объектов;
  • создание, модификацию и удаление объектов;
  • управление ролями доступа;
  • настраиваемые запросы для работы с объектами;
  • управление произвольными данными, хранящимися на сервисе.


2) Управление пользователями
  • регистрация;
  • вход пользователя в систему;
  • выход из системы;
  • управление профайлом пользователя;
  • восстановление забытых паролей;
  • авторизация пользователя через Facebook и Google+;
  • управление ролями пользователей: администраторы, зарегистрированные пользователи, бэк-офис пользователи, создание новых ролей.


3) Управление файлами
  • создание и выборка файлов на сервере;
  • получение мета-информации о файлах;
  • ACL (список контроля доступа, который определяет, кто или что может получать доступ к конкретному объекту).


4) Отправка PUSH-уведомлений
  • Поддерживается для Android и iOS устройств.


5) Резервирование, восстановление и сброс БД

6) REST API
  • Позволяет редактировать API для взаимодействия с сервисом.


Достаточно функциональное решение для бекенд-сервиса мобильных приложений. На случай, если возможностей сервиса окажется недостаточно, «из коробки» предусмотрено расширение через создание собственных плагинов, по аналогии «CloudCode» в «Parse».

Пошаговое выполнение


Вначале нам потребуется свой VDS-сервер. Для экспериментов я решил воспользоваться сервисом, предоставляемым компанией FirstVDS за разумные деньги.

В любом случае, содержание такого сервиса не сильно бьет по карману независимых разработчиков. Тем более что в любом случае получится дешевле, чем коммерческая подписка «Parse».

Использование именно FirstVDS — это мой выбор, ни в коем случае не является рекламой данной компании и вы можете выбрать компанию по своему разумению, или же использовать для этих целей «домашний» сервер. Нам нужна лишь возможность поднять java-машину на unix-системе и хороший сетевой канал.

Итак, тариф для тестов, VDS-OVZ-Разгон.

За 359 руб./месяц я получил сервер со следующими характеристиками:
  1. Intel Xeon (2 ядра) > 2ГГц;
  2. Оперативная память: 1024 Мб;
  3. Место на диске: 60 Гб;
  4. Трафик: Безлимитный;
  5. Скорость канала: 1 Гбит/сек (по заверениям представителей компании FirstVDS).

От панели управления сервером я отказался по причине того, что не видел необходимости ее использования, так как данный сервер будет использоваться только под бекенд приложения. На случай, если возникнет такая необходимость, можно использовать бесплатные аналоги ISPManager, наподобие «VestaCP».

На почту пришло письмо с параметрами доступа, можно подключиться к серверу и установить BaasBox.

Работа с Unix-системами обычно не вызывает затруднений, в случае отсутствия опыта пользования подобными системами информация легко «гуглится» на просторах сети!

Соединяемся через консоль по протоколу SSH. Кто-то использует для этих целей сторонние приложения, я же использую стандартный терминал Mac OS X, позволяющий комфортно работать с сетью прямо из него.

Набрав команду: «ssh 1хх.1хх.2хх.2хх -l root» и введя пароль от учетной записи администратора, мы видим системное сообщение сервера и приглашение консоли.

Приглашение консоли сервера
image


На данном этапе наш сервер пуст, на нем установлена лишь операционная система (в моем случае выбор пал на Linux Debian) с набором стандартных системных служб.

На сайте BaasBox есть подробная инструкция по установке и использованию сервиса, я же кратко пройдусь по этапам установки, благо, что сия процедура не занимает и 5 минут).

Здесь будут приведены команды для консоли unix-сервера на примере ОС Debian.

Первое, что нам требуется сделать, это прописать репозиторий, с которого и будет установлена виртуальная машина java. И установить машину на сервер.

«sudo» — может не использоваться с правами «root» в Debian!

Добавляем репозиторий в систему:

sudo add-apt-repository ppa:webupd8team/java -y

Обновляем пакеты:

sudo apt-get update

Устанавливаем java-машину:

sudo apt-get install oracle-java8-installer

Версия установленной java-машины
image


Нам также может потребоваться распаковщик для архивов:

sudo apt-get install unzip

Подготовка сервера практически завершена. Теперь можно приступить к загрузке и запуску нашего бекенд-сервиса.

Загрузим BaasBox с официального сайта:

wget --content-disposition http://www.baasbox.com/download/baasbox-stable.zip

Проверим имя загруженного архива системы с помощью команды:

ls

Мы видим, что загруженная версия последнего стабильного пакета имеет имя «baasbox-0.9.2.zip».

Распакуем его:

unzip baasbox-0.9.2.zip

И перейдем в распакованную папку:

cd baasbox-0.9.2

Изменим разрешения для запуска скрипта:

chmod +x ./start

Запустим наш BaasBox-сервис:

./start


Успешный старт сервиса
image

Перейти в панель управления можно набрав в адресной строке браузера адрес вида: «IP_СЕРВЕРА:9000» для доступа к панели администрирования сервиса.

Переход по адресу на порт: 9000
image

Для доступа к панели управления, после установки используются стандартные значения: «admin/admin» и номер приложения — «1234567890».

Авторизация администратора
image

В дальнейшем, пароль администратора можно изменить и настроить сервис для своих нужд более детально. На данном этапе, мы с минимальными затратами времени, получили полностью готовый сервис для своего приложения.

Dashboard нашего сервиса
image

Остается лишь прописать старт скрипта при перезагрузке сервера, чтобы наш сервис стартовал автоматически. На этот случай есть множество вариантов, которые dы можете использовать. Для этих целей я обычно использую следующий пример: linuxguru.ru/administration/avtozagruzka-skriptov-v-debian

Коннект приложения к вновь созданному сервису


В данном примере, будет рассмотрен коннект приложения к вновь созданному сервису для iOS-устройств с использованием языка «Objective-C».

Итак, первое, что нам следует сделать, это загрузить SDK для своего приложения. Загрузка SDK возможна как с использованием «CocoaPods» -> pod 'BaasBoxSDK', так и олдскульным способом добавления SDK в проект методом простого перетаскивания в IDE XCode. Для этого, SDK можно загрузить по ссылке: www.baasbox.com/download-page

Далее, мы импортируем заголовочный файл. По моему опыту импорт лучше произвести с использованием PCH-файла проекта, так как если приложение достаточно большое, мы избавимся от частого включения заголовочного файла в проекте.
#import «BAAClient.h»

Затем инициализируем SDK для работы с сервисом. Наилучшее место — инициализация его в делегате приложения.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Инициализация SDK
    [BaasBox setBaseURL:@"http://instavds.ru:9000"
                appCode:@"1234567890"];
		// Проверяем коннект через создание тестового пользователя
		BAAClient *client = [BAAClient sharedClient];
       [client createUserWithUsername:@"Test"
                          password:@"password"
                        completion:^(BOOL success, NSError *error) {
                            if (success) {
                                NSLog(@"User is %@", client.currentUser);
                            } else {
                                NSLog(@"ERROR = %@", error.localizedDescription);
                            }
                            
                        }];    

    return YES;
}

Вот, собственно, и все! За короткое время мы добились работы нашего мобильного приложения с полноценным baas-сервисом, не накладывающим на нас лимиты по использованию ресурсов и прочих ограничений.

Успешный вывод в консоль информации о зарегистрированном пользователе
image

Выводы


Данный материал не рассматривает в полной мере возможности сервиса BaasBox, а призван обратить ваше внимание на существующие альтернативные варианты Parse.

Если вы не используете все возможности Parse-комбайна, то возможно в будущем BaasBox, развернутый на собственном сервере, послужит вам хорошую службу.

P.S.: Пример использования сервиса BaasBox в реально работающем приложении для iOS-устройств я подробно рассмотрю в следующей статье.

В настоящий момент, я не использую BaasBox в продакшене, но данный сервис мной принят на вооружение, что когда возникнет необходимость миграции с «Parse» на свой сервис, я знаю какие шаги мне стоит предпринять, чтобы сберечь несколько сотен долларов в месяц.

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


  1. solver
    15.06.2015 18:08

    А почему переход на платную подписку вдруг стал незапланированным расходом?
    И как там с надежностью решения на дешевых VDS? Если она конечно нужна вообще…


    1. InstaRobot Автор
      15.06.2015 18:23

      Незапланированный лишь по той причине, что не все хорошо монетизируется. Тем более когда работаешь только на себя, а не организацию, то копейка счет любит!

      А VDS в наше время на достаточно хорошем уровне производительности. Я пробовал дедик на РЕГ РУ, очень все прилично!


      1. Fedcomp
        21.06.2015 19:10

        Не советую брать VDS у reg.ru, вечные проблемы.


        1. InstaRobot Автор
          21.06.2015 19:12

          У РЕГ.РУ я пробовал дедик. За VDS сказать ничего не могу. Есть куча других хостеров, выбор — это личное дело каждого!


  1. getId
    16.06.2015 05:59

    Бесплатный Parse даёт 30 запросов в секунду. Вы уже готовы и знаете, какой VPS нужно будет заказывать: мощность процессора и объём памяти, чтобы выдержать такое на java-приложении?


    1. InstaRobot Автор
      16.06.2015 10:08

      Нет. Я не готов пока отказаться от Parse. Еще далеко до превышения лимитов, а BaasBox на данный момент как альтернативная платформа при превышении. Мне интересно получать новый опыт, пробуя на зуб альтернативные решения.

      По возможностям сервера? Здесь судить лучше, отталкиваясь от того, как делалась логика работы в самом МП.


  1. nedved
    16.06.2015 09:27

    Дает ли BaasBox возможность аналитики подобно той, которая есть в Parse?


    1. InstaRobot Автор
      16.06.2015 10:14
      +1

      Такой возможности там нет. Но к слову сказать, аналитика Parse меня не впечатлила. Всегда использую другие платформы аналитические. Тем более, что эпловый Коннект научился давать ту аналитику, которую не покажет никакая другая платформа. В частности, просмотры приложения в сторе! А поведение пользователя, можно обработать и во Фларри, и в Яндекс. У кого к чему душа лежит.


  1. n0ne
    16.06.2015 10:06

    Ваш вдс выдержит 250000 активных пользователей в сутки при 1 гиге памяти и жавой бэкэндом?! Х-м…


    1. InstaRobot Автор
      16.06.2015 10:17

      Не выдержит конечно. ВДС я брал, чтобы сделать пример работы с реальным сервером, а не локалхостом. Когда поставлю реальный рабочий сервер, то мой тариф будет от 4 гига с возможностью расширения.


      1. InstaRobot Автор
        16.06.2015 10:34

        И отвечая на прошлый вопрос, я вспомнил про интересный момент)!

        BaasBox может быть установлен на локалхост или в локальной сети! Нет привязки к интернет. Можно разработку вести в любых условиях, впоследствии просто переписав адрес коннекта приложения!


        1. n0ne
          16.06.2015 10:40

          Очень сомнительное преимущество в 21 веке (-:


          1. InstaRobot Автор
            16.06.2015 11:07

            Не скажите, я часто работаю в электричке! Сеть по пути даже в телефоне пляшет


      1. evgen_povt
        16.06.2015 10:43
        +1

        Так вопрос остается открытым — какая конфигурация выдержит 30 запросов/секунду, и сколько она будет стоить?
        И на сколько в дальнейшем ее легко будет масштабировать на 40,50 или 100 запросов/секунду.


        1. InstaRobot Автор
          16.06.2015 11:11

          Такие потребности легко обеспечивает Xeon со средним камнем (не топовым), RAM от 6 гб и канал от 250 мбит. Стоимость разная, но в среднем дедик обойдется Вам в РЕГ.ру в пределах 5000 руб./месяц.