如何使用 SBT 原生打包器部署 Scala Play 框架 API

Posted

技术标签:

【中文标题】如何使用 SBT 原生打包器部署 Scala Play 框架 API【英文标题】:How to deploy a Scala Play framework API using the SBT native packager 【发布时间】:2015-04-17 11:00:29 【问题描述】:

我创建了一个基于 Scala Play 框架 2 的 Web API。过去,我使用 SBT 插件生成 war 文件,以便使用 Tomcat 在生产环境中进行部署。现在可以使用 SBT 原生打包器插件从 Play 项目构建原生包。我用它从我的网络应用程序中生成了一个 debian 包。

但是,我不明白它是如何工作的。我可以生成并安装 debian 包并启动守护程序,但我的 API 似乎没有监听请求。

在第一种情况下,Tomcat 托管包含 Play 应用程序的 war 文件并管理 HTTP 连接。我觉得我的 debian 包中缺少一些部分,以便像 Tomcat 下的 war 文件一样正常工作。

问题是,如何使用本机打包程序插件来部署独立的 HTTP API?什么负责处理 HTTP 连接?我的项目中缺少什么?

提前致谢

【问题讨论】:

【参考方案1】:

Play 应用程序使用它们自己的轻量级 http 服务器运行。

构建独立项目问题

sbt dist

或者如果你使用激活器

activator dist

这会创建一个目录target/universal/your-app.zip

如果你解压缩内容,你会发现一个独立的应用程序结构

/bin
/lib
/conf
/share

您可以在其中找到启动服务器的 shellscripts

bin/your-app
bin/your-app.bat (windows)

战争文件的分发似乎已从播放中删除。类似的问题在这里问: Deploy play as a war file into a servlet container, even if it uses JPA heavily?

【讨论】:

感谢您的回答。是否也可以构建一个打包在 debian 包中的独立应用程序? 原生打包器只构建独立的 dist。但是,如果要部署它,则需要稍微配置一下。请参阅scala-sbt.org/sbt-native-packager/topics/play.html 并确保您使用的是正确的端口并且 wpp 正在实际运行

以上是关于如何使用 SBT 原生打包器部署 Scala Play 框架 API的主要内容,如果未能解决你的问题,请参考以下文章

Sbt 本机打包程序不创建服务脚本文件

sbt 原生打包器 dockerCommands 复制

使用 sbt 运行多个应用程序

使用 SBT 将编译后的 Scala 文件打包到 jar 中

sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类

在多模块 Java/scala 项目中有一个通用的 webapp?