2013-07-01 3 views
21

Я думаю о том, как должен быть процесс развертывания моего уже локально протестированного остального api для облака, можно сказать, что инфраструктура как служба (а не платформа как служба, такая как Heroku), как amazon.Как развернуть мой распылитель API в производство?

У меня есть локальная среда с настройкой sbt и запущена, но мой вопрос: как мне развернуть это в производственной среде?

Неправильно ли определить процесс, в котором декомпиляторы извлекают самые последние изменения из git repo, а затем просто запускают sbt run?

Я хочу знать, как команды, использующие scala + spray + sbt, развертывают свой apis в производственной среде.

ответ

27

Сердце наших услуг - scala + akka + spray + mongo. Поэтому мы используем GitHub для контроля версий. После слияния проверочных PR с главной веткой Jenkins automaticaly tests'n'builds project. Если все тесты прошли успешно, то Jenking работает несколько сценариев:

  1. версии Increment проект (в настоящее время написано в оболочке, но будет изменена на SBT)
  2. Выполнить задачу сборки с sbt-assembly
  3. Run развертывание сценария (написана на Python с Fabric) которым развертывается наша баночка с EC2

Basicaly на thrid шаге у вас есть несколько вариантов:

Сделать работоспособную банку с помощью IO/загрузка Spray файла:

object Boot extends App { 
    implicit val system = ActorSystem("ServiceName") 
    val log = system.log 
    val service = system.actorOf(Props[Service], name="serviceActor") 
    IO(Http) ! Http.Bind(service, interface = host, port = port) 
} 

Сделать работоспособную банку как микроядра AKKA в:

В этом случае вы должны расширить Bootable черты и переопределить startup и shutdown методы:

class Kernel extends Bootable { 
    // many lines of code 
    def startup() { 
    scheduler.start() 
    SomeActorSystem.startup() 
    } 

    def shutdown() { 
    scheduler.shutdown() 
    SomeActorSystem.shutdown() 
    system.shutdown() 
    } 
} 

Использование типизированного startscript:

не может показать пример, но он имеет хорошее интро на github =)

Мы используем все таким образом, в различных случаях.

+0

Можете ли вы рассказать о том, как вы обрабатываете грациозное закрытие служб спреев на производстве? Я могу задать вопрос. – dmitry

+0

@dmitry У нас нет необходимости поддерживать долговременные соединения, но в целом вы можете использовать кластер akka с жизненным циклом persistence + elements (hooks). С другой стороны, Spray также построен поверх Akka, поэтому вы можете создать свой собственный модуль, чтобы изящно завершить работу сервера с сообщением «Unbind» игроку-слушателю. 'Unbind' берет грациозное время выключения, затем отправляет его слушателю и ждет завершения, тогда вы можете« выключить »ваш сервис. – 4lex1v

+1

Просто обновленная версия. Похоже, что TypeSafe устаревает startcript для замены на sbt-native-packager https://github.com/sbt/sbt-native-packager –

2

Вы должны построить баночку с плагином sbt-assembly

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.0") 

Затем вы можете запустить банку в производство с Явы -jar

Если вы даете номер версии вашего проекта, это довольно классический обработать.

Надеюсь, это поможет.

-1

Никогда не ездил в PRO с распылителем-аккой. Только любимые проекты. Мои предложения здесь следует воспринимать как вдохновение. Я знаю, что некоторые из представленных мной вариантов являются дорогостоящими с точки зрения обслуживания или склонны к ошибкам.

Упаковка

Я только использовал Maven-тень-плагин (без опыта с SBT), но я предполагаю, что есть подобное решение.

Упаковка Проблемы

Там же несколько проблем с этим подходом, хотя. Akka и многие из распылительных модулей используют соглашения reference.conf и application.conf. При сборке/затенении всех ваших зависимостей ресурсы (так как они называются одинаковыми) могут перезаписываться, и вы не сможете запустить приложение.

Быстрое и грязное решение, которое я нашел, заключалось в том, чтобы скопировать/вставить приложение и ref.conf зависимостей в один из меня под контролем.

 Смежные вопросы

  • Нет связанных вопросов^_^