В этой статье мы обсудим, как развернуть отдельное приложение 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: [email protected] 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. Это только начало; Вы можете столкнуться со многими проблемами, когда добавляете в приложение различные функции. Не стесняйтесь оставлять комментарии, если у вас возникли проблемы. Я сделаю все возможное, чтобы ответить на любые вопросы.