【问题标题】:Play framework create DEB and deploy it on Ubuntu 14.04Play framework 创建 DEB 并在 Ubuntu 14.04 上部署
【发布时间】:2015-06-30 05:05:26
【问题描述】:

我正在使用带有 Scala 的 Play Framework 2.3.8,并且我正在尝试创建 DEB 包以将其安装在产品服务器上。安装后它应该会通过“服务”自动运行

我已经添加到build.sbt:

import com.typesafe.sbt.packager.Keys._

packageDescription := """Admin Application"""

maintainer := """Admin <contact@maintainer.com>"""

执行后

activator debian:packageBin

它会生成deb文件,但安装后脚本/etc/init.d/testApplication不起作用

如何让它在 Ubuntu 14.04 上运行?

我尝试在http://www.scala-sbt.org/sbt-native-packager/archetypes/java_server/的基础上使用Java Application Archetype

我已添加:

import com.typesafe.sbt.SbtNativePackager._
import NativePackagerKeys._

packageArchetype.java_application

但还是没有成功

===== 更新

设置Upstart后,在安装过程中我得到:

Selecting previously unselected package testApplication.
(Reading database ... 61317 files and directories currently installed.)
Preparing to unpack testApplication_0.1_all.deb ...
Unpacking testApplication (0.1) ...
Setting up testApplication (0.1) ...
Creating system group: testApplication
Adding group `testApplication' (GID 115) ...
Done.
Creating user testApplication in group testApplication
start: Unknown job: testApplication
testApplication could not be started. Try manually with service testApplication start
Processing triggers for ureadahead (0.100.0-16) ...

手动运行脚本仍然没有任何结果

michal@cantrace:~$ sudo /etc/init.d/testApplication start
 * Starting testApplication                                  [ OK ]
michal@cantrace:~$ ps aux |grep java
michal    1807  0.0  0.0  11744   920 pts/0    S+   18:33   0:00 grep --color=auto java

【问题讨论】:

  • “不工作”是什么意思?有任何错误信息吗?脚本是否存在?
  • 它显示类似* Starting deamon testApplication 的内容并且没有java 进程,我正在通过ps aux |grep java 进行检查。使用 debs 对你有用吗?
  • application.log 中的任何消息?
  • 它甚至没有运行应用程序,没有application.log

标签: scala ubuntu playframework playframework-2.0 sbt


【解决方案1】:

我在 Debian 上遇到过类似的问题。 DEB 包的默认配置被破坏。默认情况下,应用程序会在启动时在/usr/share/[your application name] 中创建一个RUNNING_PID 文件。由于文件权限无效,这将失败。修复:

  • 安装好DEB包后,编辑/etc/default/[your applicaiton name],取消注释下面一行,重启服务:

    -Dpidfile.path=/var/run/[your application name]/play.pid

  • 或者,将 sbt-native-packager 升级到 v1.0.0 并覆盖默认配置。

要升级,

  1. [project root]/project/plugins.sbt,添加:

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0")

  1. [project root]/build.sbt 中,删除以下导入:

//import com.typesafe.sbt.SbtNativePackager._
//import NativePackagerKeys._

  1. 创建[project root]/dist/conf/application.ini 并指定新的默认值:

# Since play uses separate pidfile we have to provide it with a proper path
-Dpidfile.path=/var/run/[your application name]/play.pid

希望对你有帮助。

【讨论】:

  • -Dpidfile.path=/dev/null 是一个很好的举措,因为 systemd 通常扮演这个角色。
【解决方案2】:

DebianLike 系统中有两个基本的服务管理器。

  • Upstart Ubuntu 14 的默认设置
  • SystemV Debian 7 的默认值

根据目标系统,您应该使用UpstartSystemV

import com.typesafe.sbt.packager.archetypes.ServerLoader.YourServiceManager

packageArchetype.java_server

serverLoading in Debian := YourServiceManager

Upstart将它的脚本存储在/etc/init

SystemV 将其脚本存储在/etc/init.d

您可以在此处了解有关此配置的更多信息:

http://www.scala-sbt.org/sbt-native-packager/archetypes/java_server/index.html#customize

【讨论】:

  • 当我尝试sudo service testApplication start 时,它返回start: Unknown job。当我尝试 sudo /etc/init.d/testApplication start 它显示正在启动 Starting testApplication 但没有 java 进程
  • 您的应用位于/usr/share/testApplication/bin/testApplication。请尝试从 shell 调整它并在这里写下发生了什么
  • 它在 9000 端口上运行应用程序,所以守护程序脚本有问题
  • 对不起。我在这里弄得一团糟。我使用Debian,它默认使用SystemV。在您的情况下 - Ubuntu 最好使用 Upstart,这是该系统的默认设置。这就是service 命令在 Ubuntu 上找不到脚本的原因。请在您的build.sbt 中将SystemV 切换为Upstart。如果您仍然有问题附上列表/etc/init/testApp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 2015-08-31
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多