Что нам стоит «Parse» построить или как без особого напряжения поднять его opensourse-аналог на собственном сервере

от автора

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

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

К счастью, я не отношусь к подобным «хардкорщикам», потому и использую сервис «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» на свой сервис, я знаю какие шаги мне стоит предпринять, чтобы сберечь несколько сотен долларов в месяц.

ссылка на оригинал статьи http://habrahabr.ru/post/260345/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *