如何将我的喷雾API部署到生产中?

jua*_*ara 23 scala akka spray

我正在考虑如何将我已经在本地测试过的rest api部署到云端的流程,让我们说基础架构即服务(不像像Heroku这样的服务平台)就像亚马逊一样.

我的本地环境设置已经启动并运行但我的问题是我应该如何在生产环境中部署它?

定义一个进程,其中devops从git repo中提取最新的更改然后只执行sbt run是否合理?

我想知道使用scala + spray + sbt的团队如何将他们的api部署到生产环境中.

4le*_*x1v 27

我们服务的核心是scala + akka + spray + mongo.所以我们使用GitHub进行版本控制.在将已检查的PR合并到主分支之后,Jenkins自动测试'n'构建项目.如果所有测试都成功,那么Jenking会运行几个脚本:

  1. 增加项目版本(目前用shell编写,但会改为sbt)
  2. 使用sbt-assembly运行装配任务
  3. 运行部署脚本(用Python编写的Python),将我们的jar部署到EC2

基本上在第三步,您有几个选择:

使用IO/Spray启动文件创建一个可运行的jar:

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)
}
Run Code Online (Sandbox Code Playgroud)

制作一个可运行的jar作为Akka的微内核:

在这种情况下,您应该扩展Bootable trait和override startupshutdown方法:

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

  def shutdown() {
    scheduler.shutdown()
    SomeActorSystem.shutdown()
    system.shutdown()
  }
}
Run Code Online (Sandbox Code Playgroud)

使用TypeSafe启动脚本:

无法显示示例,但它在github上有一个很好的介绍=)

我们在不同的情况下使用所有这些方式.