我想在Jelastic平台上部署一个使用Play Framework 2.5编写的应用程序。我设法使用Play2War插件进行Play,但它还不支持Play 2.5。如何在Jelastic上使用Docker部署Play 2.5应用程序?
对平台的支持建议使用Docker容器或VPS。我以前从未与Docker合作过。有一个SBT native packager plugin提供了一种自动创建带有SBT的Dockerfile的方法。 因此,这里是我的新plugins.sbt文件:
// The Play plugin
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.11")
// Web plugins
addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3")
addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7")
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0")
addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.2")
// Play enhancer - this automatically generates getters/setters for public fields
// and rewrites accessors of these fields to use the getters/setters. Remove this
// plugin if you prefer not to have this feature, or disable on a per project
// basis using disablePlugins(PlayEnhancer) in your build.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0")
// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using
// enablePlugins(PlayEbean).
addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.0")
// Play Eclipse plugin
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")
// Play native packager support for Docker
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.2.0-M8")
这里是基于一些例子泊坞窗设置我build.sbt文件:
import com.typesafe.sbt.packager.docker._
name := """VestaWeb"""
version := "1.0-SNAPSHOT"
lazy val root = (project in file(".")).enablePlugins(PlayJava, PlayEbean, DockerPlugin)
scalaVersion := "2.11.7"
// Configure Docker settings
maintainer in Docker := "eeproperty"
dockerRepository := Some("eeproperty")
dockerBaseImage := "frolvlad/alpine-oraclejdk8:latest"
dockerCommands := dockerCommands.value.flatMap {
case [email protected]("FROM", _) => List(cmd, Cmd("RUN", "apk update && apk add bash"))
case other => List(other)
}
// Add dependencies from Maven
libraryDependencies ++= Seq(
filters,
javaCore,
javaJdbc,
cache,
javaWs,
"mysql" % "mysql-connector-java" % "5.1.28",
"com.stripe" % "stripe-java" % "2.10.0",
"com.typesafe.play" %% "play-mailer" % "5.0.0",
"it.innove" % "play2-pdf" % "1.5.1",
"com.google.api-client" % "google-api-client" % "1.22.0",
"org.apache.commons" % "commons-compress" % "1.12"
)
// Remove the documentation from the dist
sources in (Compile, doc) := Seq.empty
publishArtifact in (Compile, packageDoc) := false
// Disable strange behavior in local run
fork in run := false
命令:
activator docker:stage
生成此Dockerfile:
FROM frolvlad/alpine-oraclejdk8:latest
RUN apk update && apk add bash
MAINTAINER eeproperty
WORKDIR /opt/docker
ADD opt /opt
RUN ["chown", "-R", "daemon:daemon", "."]
USER daemon
ENTRYPOINT ["bin/vestaweb"]
CMD []
和其他一些东西,如docker/
文件夹。
命令:
activator docker:publish
出版Dockerfile(也许其他文件???)我多克库。我不知道Docker推动什么,以及它如何知道如何将Play应用嵌入到Alpine Linux基础镜像中。
我将我的资源库添加到一个Docker实例和Jelastic,并且我开始了它。我可以通过SSH登录到我的root帐户,但与容器中的应用程序没有任何关系。当我尝试在浏览器中打开Jelastic节点时,什么都没有显示。
默认情况下,Play Framework使用端口80的端口9000和Jelastic负载。我想我不得不添加一个iptables
命令到我的Dockerfile来重定向从80到9000的交通。
我已经阅读了很多关于“Dockerize Play应用程序”的教程,但他们从未解释如何部署应用程序,只有如何在本地运行容器与activator docker:publishLocal
。
我错过了什么观点?
是否在本地的码头工人的工作和/ opt /文件夹不是空的? – Aless