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 应用程序的部署:
physical/virtual 服务器上的独立应用程序:如果您想在 metal/server instance/etc 上部署您的应用程序.如果没有任何其他前置应用程序,那么您需要 运行 您的应用程序在端口 80
而不是 9000
上。因为您希望您的用户转到 example.com
而不是 example.com:9000
。
physical/virtual 服务器上 http 服务器后面的独立应用程序:您可以使用 front end http server(例如 Nginx)和 运行 你的 Play 应用程序在它后面。这样您就可以使用前端 http 服务器作为您应用程序的桥梁。事实上,您可以将它用作应用程序多个实例的负载均衡器。
Docker化您的应用程序:这一次,您从您的应用程序制作一个docker图像,并将该图像放入容器管理系统(例如,Kubernetes)。然后您需要创建一个负载均衡器,将流量从 public Internet 引导到您的容器管理系统。
云服务部署:还有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 &
我正在使用 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 应用程序的部署:
physical/virtual 服务器上的独立应用程序:如果您想在 metal/server instance/etc 上部署您的应用程序.如果没有任何其他前置应用程序,那么您需要 运行 您的应用程序在端口
80
而不是9000
上。因为您希望您的用户转到example.com
而不是example.com:9000
。physical/virtual 服务器上 http 服务器后面的独立应用程序:您可以使用 front end http server(例如 Nginx)和 运行 你的 Play 应用程序在它后面。这样您就可以使用前端 http 服务器作为您应用程序的桥梁。事实上,您可以将它用作应用程序多个实例的负载均衡器。
Docker化您的应用程序:这一次,您从您的应用程序制作一个docker图像,并将该图像放入容器管理系统(例如,Kubernetes)。然后您需要创建一个负载均衡器,将流量从 public Internet 引导到您的容器管理系统。
云服务部署:还有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 &