В этой статье мы обсудим, как развернуть отдельное приложение Scala в AppFog.
AppFog — это платформа как услуга (PaaS), которая поддерживает несколько языков, а также несколько облаков. Он построен на основе открытого исходного кода PaaS Cloud Foundry и может поддерживать любой язык, поддерживаемый Cloud Foundry, например PHP, Java, Scala и т. Д. AppFog позволяет вам использовать ваш язык по выбору, а также инфраструктуру публичного облака. При развертывании приложения вы также можете выбрать поставщика облачных услуг — Amazon, Microsoft, Rackspace и другие. Одним из основных преимуществ поддержки нескольких облаков является то, что вы можете развернуть приложение в нескольких облаках, поэтому, если один сервис отключается, вы можете легко переключиться на другого поставщика.
Многие примеры приложений (Jumpstarts) перечислены на панели инструментов AppFog, что упрощает запуск новых приложений. К сожалению, здесь нет приложений Scala. Итак, чтобы запустить наше приложение Scala, мы будем использовать инструмент командной строки.
Использование инструмента командной строки af
AppFog предоставляет инструмент командной строки для создания и управления вашим приложением. Это приложение оболочки ruby, которое вы можете установить с помощью gem. Поэтому для установки на afвашем компьютере должны быть установлены Ruby и RubyGems. Для установки af:
$ gem install af
С этим инструментом доступно несколько команд для создания приложения, запуска / остановки приложения и так далее. Мы увидим их по ходу дела. Для использования у afвас должна быть учетная запись AppFog, поэтому создайте ее, если у вас ее еще нет. Затем вы должны войти в систему из командной строки, прежде чем создавать приложение.
shameerc$ af login Attempting login to [https://api.appfog.com] Email: username@domain.com Password: ********* Successfully logged into [https://api.appfog.com]
После успешного входа в систему вы можете запустить приложение в AppFog. Перед созданием приложения в AppFog нам необходимо настроить его на нашем локальном компьютере.
Настройка проекта
Для демонстрации я разработал пример приложения Scala от Cloud Foundry, которое будет тестировать палиндром, который находится в Github . В этом приложении мы используем нефильтрованную библиотеку для обслуживания HTTP-запросов в Scala. Мы используем sbt (Simple Build Tool) с плагином sbt-package-dist для сборки и упаковки приложения. Для начала клонируйте пример приложения из Github на свой локальный компьютер.
shameerc$ git clone https://github.com/shameerc/unfilter-me.git scala-unfilter
Шаг внутри scala-unfilterпапки после клонирования исходного кода. Вы увидите исходные файлы Scala, папку проекта sbt и файл сборки (build.sbt). scala.sbt содержит определения сборки, такие как имя приложения, версия и зависимости.
import com.twitter.sbt._ seq(StandardProject.newSettings: _*) packageDistZipName := "af-unfiltered-sample.zip" organization := "com.example" name := "scala-unfilter" version := "0.1.0" libraryDependencies ++= Seq( "net.databinder" %% "unfiltered-filter" % "0.6.4", "net.databinder" %% "unfiltered-jetty" % "0.6.4", "org.clapper" %% "avsl" % "0.3.6", "net.databinder" %% "unfiltered-spec" % "0.6.4" % "test" ) resolvers ++= Seq( "java m2" at "http://download.java.net/maven/2" )
В первых двух строках мы включаем настройки для sbt-package-dist. packageDistZipNameИмя файла пакета, который будет создан этим плагином. Помните, что sbt требует пустой строки между операторами в build.sbt.
Вы можете протестировать приложение локально, запустив sbt.
scala-unfilter shameerc$ sbt run
Он разрешит все зависимости, скомпилирует и автоматически запустит приложение в браузере. Далее нам нужно упаковать приложение для развертывания в AppFog.
scala-unfilter shameerc$ sbt package-dist
Это упакует приложение в заархивированный файл с именем af-unfiltered-sample.zipи сохранит в app-base/dist/scala-unfilter-0.1.0/. Этот файл содержит все jar-файлы и библиотеки, необходимые для нашего приложения.
Развертывание приложения
При развертывании приложения мы в основном загружаем файл пакета на сервер AppFog. af pushэто команда для создания и развертывания приложения в первый раз.
scala-unfilter shameerc$ af push --path=dist/scala-unfilter-0.1.0/
af-unfiltered-sample.zip
Application Name: scala-unfilter
Detected a Standalone Application, is this correct? [Yn]:
1: erlangR14B02
2: java
3: node04
4: node06
5: php
6: python2
7: ruby18
8: ruby192
9: ruby193
Select Runtime [java]: 2
Selected java
Start Command: java $JAVA_OPTS -jar scala-unfilter-0.1.0/scala-unfilter_2.9.1-0.1.0.jar
Application Deployed URL [None]: scala-unfilter.${target-base}
Memory reservation (128M, 256M, 512M, 1G, 2G) [512M]:
How many instances? [1]:
Bind existing services to 'scala-unfilter'? [yN]:
Create services to bind to 'scala-unfilter'? [yN]:
Would you like to save this configuration? [yN]: y
Manifest written to manifest.yml.
Creating Application: OK
Uploading Application:
Checking for available resources: OK
Processing resources: OK
Packing application: OK
Uploading (11M): OK
Push Status: OK
Staging Application 'scala-unfilter': OK
Starting Application 'scala-unfilter': OK
Вышеуказанные шаги загрузят и запустят наше приложение в AppFog. Если --pathпараметр не указан, он будет развернут из текущего каталога. Здесь мы указали путь к zip-файлу для загрузки. Далее будет запрошено имя приложения, которое мы дали scala-unfilter. Затем afопределит тип приложения, которое мы развертываем. Например, если это приложение PHP, оно автоматически обнаружит и попросит нас подтвердить это. В этом случае мы развертываем упакованное приложение. Таким образом, afон был обнаружен как отдельное приложение, и поэтому нас просят выбрать среду выполнения. Для запуска приложений Scala нам нужна среда выполнения Java.
Нам нужно использовать команду Start для запуска приложения. После развертывания приложения AppFog разархивирует файл и поместит его в базовую папку и попытается запустить приложение с помощью java $JAVA_OPTS -jar scala-unfilter-0.1.0/scala-unfilter_2.9.1-0.1.0.jarкоманды в AppFog. Затем вам нужно выбрать URL AppFog, резервирование памяти и номер экземпляра для вашего приложения. Здесь мы приняли значения по умолчанию для них. Затем вы можете связать любые новые или существующие сервисы, в которых нуждается ваше приложение (например, базы данных). Мы пропустили этот шаг здесь.
Далее вас спросят, хотите ли вы сохранить конфигурацию приложения локально. afзапишет конфигурацию приложения в файл с именем manifest.ymlи сохранит его в корне приложения. manifest.ymlбудет иметь всю необходимую информацию о приложении, такую как его имя, URL, команда запуска и т. д. Это облегчит дальнейшее развертывание, так как afбудет считывать значения из этого файла конфигурации. Вы можете напрямую написать файл конфигурации для развертывания приложения, когда вы ознакомитесь с инструментом командной строки.
После того, как вы успешно выполните описанные выше шаги, afсоздайте приложение в AppFog. Затем он загрузит упакованное приложение и попытается начать с помощью команды запуска, которую мы дали. Если других проблем нет, у вас будет запущенное приложение Scala в AppFog, к которому вы можете обратиться по указанному URL.
Модификация и обновление приложения
Вам не нужно выполнять вышеуказанные шаги, когда вы хотите обновить приложение после внесения изменений. После того, как вы закончили модификации, протестируйте их локально и убедитесь, что они работают нормально. Затем упакуйте приложение, используя sbt package-distкоманду, и введите приведенную ниже команду из каталога приложения.
Shameers-MacBook-Pro:scala-unfilter shameerc$ af update Updating application 'scala-unfilter'... Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK Uploading (11M): OK Push Status: OK Stopping Application 'scala-unfilter': OK Staging Application 'scala-unfilter': OK Starting Application 'scala-unfilter': OK
Круто, мы успешно обновили наши изменения в AppFog. При обновлении приложения AppFog полностью удалит старые файлы, заменив их новыми. Поэтому будьте осторожны при хранении статического содержимого, такого как изображения, в AppFog.
Резюме
AppFog — многообещающий многоязычный PaaS. Созданный на основе Cloud Foundry, он поддерживает многие популярные языки, такие как PHP, Java, Ruby и т. Д. В качестве языка на основе Jvm мы также можем запускать приложения Scala в AppFog. В этой статье мы познакомились с использованием инструмента командной строки af и развертыванием автономного приложения Scala в AppFog. Это только начало; Вы можете столкнуться со многими проблемами, когда добавляете в приложение различные функции. Не стесняйтесь оставлять комментарии, если у вас возникли проблемы. Я сделаю все возможное, чтобы ответить на любые вопросы.