Как развернуть мой распылитель API в производство?
Я думаю о том, как должен быть процесс развертывания моего уже локально протестированного остального api для облака, можно сказать, что инфраструктура как служба (а не платформа как служба, такая как Heroku), как amazon.
У меня есть локальная среда с настройкой sbt и запущена, но мой вопрос: как мне развернуть это в рабочей среде?
Правильно ли определить процесс, в котором devops вытаскивает последние изменения из репозитория git, а затем просто запускает sbt run?
Я хочу знать, как команды, использующие scala + spray + sbt, развертывают свой apis в рабочей среде.
Ответы
Ответ 1
Сердце наших услуг - scala + akka + spray + mongo. Поэтому мы используем GitHub для контроля версий. После слияния проверочных PR с главной веткой Jenkins automaticaly tests'n'builds project. Если все тесты были успешными, то Jenking запускает несколько скриптов:
- Увеличить версию проекта (в настоящее время написана в оболочке, но будет изменена на sbt)
- Запустить задачу сборки с sbt-assembly
- Запустить развернуть script (написанный на Python с Fabric), который развертывает нашу банку в EC2
Основываясь на шаге, у вас есть несколько вариантов:
Сделать исполняемую банку с помощью загрузочного файла 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)
}
Сделайте runnable jar как микроядро 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()
}
}
Использование дескриптора TypeSafe:
Невозможно показать пример, но он имеет хорошее введение в github =)
Мы используем все это в разных случаях.
Ответ 2
Вы должны создать банку с плагином sbt-assembly
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.0")
Затем вы можете запустить банку в производстве с помощью java -jar
Если вы укажете номер версии для своего проекта, это довольно классический процесс.
Надеюсь, что это поможет.
Ответ 3
Никогда не ездил в PRO с аэрозолем. Только любимые проекты. Мои предложения здесь следует воспринимать как вдохновение. Я знаю, что некоторые из представленных мной вариантов являются дорогостоящими с точки зрения обслуживания или склонны к ошибкам.
Упаковка
Я использовал только maven-shade-plugin (без опыта работы с sbt), но я думаю, есть аналогичное решение.
Проблемы с упаковкой
Тем не менее, есть несколько проблем с этим подходом. Akka и многие из распылительных модулей используют соглашения reference.conf и application.conf. При сборке/затенении всех ваших зависимостей ресурсы (так как они называются одинаковыми) могут перезаписываться, и вы не сможете запустить приложение.
Быстрое и грязное решение, которое я нашел, заключалось в том, чтобы скопировать/вставить приложение и ref.conf зависимостей в управляемый мной.