Playframework 2.6:如何在没有控制台的情况下启动生产版本?

Playframework 2.6: How to launch a production build without the console?

我正在使用 Play Framework 2.6。使用

创建生产构建 zip 后
dist

在播放控制台中,我使用此代码在服务器上启动应用程序

my-first-app-1.0/bin/my-first-app -Dconfig.file=/path/to/config -Dplay.http.secret.key=$APP_SECRET

这将启动一个以以下结尾的控制台:

[info] p.c.s.AkkaHttpServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

之后我的服务器继续正常工作。但是,关闭控制台(ctrl+C)或退出终端window; ctrl+d 也什么都不做。我在这里错过了什么?

更新

所以我查看了日志,但在服务器关闭之前什么也没有发生。

2018-04-20 02:24:36,207 [INFO] from application in application-akka.actor.default-dispatcher-28 - <some benign application log>
2018-04-20 02:36:25,881 [INFO] from play.core.server.AkkaHttpServer in Thread-5 - Stopping server...
2018-04-20 02:36:25,940 [INFO] from application in application-akka.actor.default-dispatcher-41 - Shutting down connection pool.

当然,这期间我的终端也掉线了(同样,我觉得我的服务器启动方式不对,请指教。)

我得说我没有超高级的经验;但这里有几件事;关于 Play 应用程序的部署:

  1. physical/virtual 服务器上的独立应用程序:如果您想在 metal/server instance/etc 上部署您的应用程序.如果没有任何其他前置应用程序,那么您需要 运行 您的应用程序在端口 80 而不是 9000 上。因为您希望您的用户转到 example.com 而不是 example.com:9000

  2. physical/virtual 服务器上 http 服务器后面的独立应用程序:您可以使用 front end http server(例如 Nginx)和 运行 你的 Play 应用程序在它后面。这样您就可以使用前端 http 服务器作为您应用程序的桥梁。事实上,您可以将它用作应用程序多个实例的负载均衡器。

  3. Docker化您的应用程序:这一次,您从您的应用程序制作一个docker图像,并将该图像放入容器管理系统(例如,Kubernetes)。然后您需要创建一个负载均衡器,将流量从 public Internet 引导到您的容器管理系统。

  4. 云服务部署:还有cloud service deployments。例如,在 Heroku 中,您可以在 build.sbt; 中使用它的插件作为依赖项;然后你将你的应用程序推送到它的结构中,其余的都在这里处理。

对于小团队来说,第三个显然有点矫枉过正;但它可能是解决您的问题的方法;您不想 ssh 进入您的服务器并部署您的 Play 应用程序。与四号相同。对于第一和第二,您可以创建一个 shell 脚本,该脚本根据特定条件(当您的服务器重新启动时)执行,以执行与播放相关的脚本;调出应用程序。

我的问题似乎确实是 Play 因控制台而退出。

我设法通过使用 nohup 开始游戏来解决这个问题: nohup ~/myApp/bin/myApp -Dconfig.file=/path/to/conf -Dplay.http.secret.key=$SECRET &