【问题标题】:Java Play 2 - DeploymentJava Play 2 - 部署
【发布时间】:2012-08-08 18:26:30
【问题描述】:

2012 年 8 月 18 日更新

我正在使用 Play 2.0.2,我想将我的应用程序部署到 Amazon Webservices。我认为最简单的方法是通过 Elasticbeanstalk。

我使用 Play2war 打包我的应用 https://github.com/dlecan/play2-war-plugin/

我可以用

打包它
play war

根据play2war的使用指南,我将文件重命名为ROOT.war,因为我使用的是Linux 32bit Tomcat7。

我还使用了 play2war 教程中描述的 servlet 3.0。 (tomcat 7 -> servlet 3.0)。

文件大小为 31mb。

每次我使用 Elasticbeanstalk 时,我都会得到相同的日志。

2012-08-18 00:25 GMT+0200
WARN
Environment health has been set to RED
2012-08-18 00:25 GMT+0200
INFO
Launched environment: elosource. However, there were issues during launch. See event log for details.
2012-08-18 00:25 GMT+0200
INFO
Your health check URL may be misconfigured. If your application does not respond to requests at http://elosource.elasticbeanstalk.com:80/, modify the health check URL to a valid path.

我使用 Linux 32/64 位、Tomcat7(servlet 3) 和 Tomcat6(servlet2.5) 对其进行了测试。我总是得到相同的结果。

我还尝试为运行状况检查器添加一个额外的 html 文件。

  • 你会推荐我做什么?

  • 我有哪些替代方案才能让我的应用在 ec2 上运行?

  • 是否有说明如何手动将我的应用部署到 ec2 以及所有需要的依赖项(如 mongodb、play 等)的指南?

  • WAR 文件也比较大~30mb,用我的 dsl 1k 上传这么大的文件真的很痛苦。有没有办法只用 Elasticbeanstalk 上传更改?

【问题讨论】:

  • 我不明白您的日志中没有任何错误,您为什么要在错误日志中添加它?
  • 对不起,我昨天真的很累。应该是“日志中总是出现同样的错误”

标签: servlets amazon-web-services playframework-2.0 war amazon-elastic-beanstalk


【解决方案1】:

好的,我知道这不是您问题的直接答案,因为我没有使用 beanstalk,但正如您在其中一个 cmets 中要求的那样:

这是我在安装了 jvm 的 Linux EC2 实例上运行我的 play2 应用程序的方法:

  1. 在您的本地机器上,在您的项目目录中,运行play dist
  2. 发送dist/yourapp-1.0-SNAPSHOT.zip 文件(或您拥有的任何 dist 名称 配置)到 EC2 实例
  3. SSH 到您的实例
  4. 解压dist文件到你想要的目录,cd那里
  5. 运行chmod +x start
  6. 运行nohup ./start &

您现在可以在 EC2 上本地运行 play2 应用程序,并使用 websocket 和所有很酷的东西。我不需要配置任何特别的东西来让它工作。我正在使用配置为任何其他数据库的 RDS 数据库。

显然,它比 beanstalk 更麻烦,因为您必须自己配置服务器并手动设置自动缩放。但这是目前我发现在 AWS 上运行具有所有功能的 play2 的最佳方式。

我希望这会有所帮助。

【讨论】:

  • 谢谢,这就是我要找的。一个问题,我正在使用 MongoDB,我必须在我的 linux 实例上手动安装依赖项还是 play 为我做所有事情?
  • 不得不说我没用过MongoDB,所以不能确定。 Play 应该负责获取正确的库来编译和运行,但是您必须在某个地方运行 mongoDB 服务器。如果您也打算在 EC2 上运行它,那么您也必须手动启动服务器(据我了解,无论如何您都不能在 beanstalk 上运行 mongoDB 服务器)。但是,您可以获取托管的 mongoDB 服务器(例如 mongolab),或者您可以直接使用亚马逊自己的 RDS、SimpleDB 或 Dynamo。
  • 另外,我刚刚发现:eugenedvorkin.com/… 这显然是关于 play1 的,而 play2 的部署可能与 play1 不同,但它可能会对您有所帮助。
  • 而且,MongoDB 有一个专注于在 EC2 上安装的页面:mongodb.org/display/DOCS/Amazon+EC2
  • activator universal:packageZipTarball 删除第 5 步
【解决方案2】:

您不应该将您的应用程序打包为一个战争,除非您有义务这样做或有很好的理由,因为框架的you will loose great features(即使使用 servlet 3.0 you will miss websocket support)。

一个选项是通过dotCloud 服务部署您的应用程序。该服务运行on top of Amazon EC2,使您能够轻松选择堆栈和垂直扩展。当然你得判断是不是worth the price,但是你可以免费测试。

还有其他 PaaS 提供商可以让您部署 play 2 应用程序:

【讨论】:

  • 是的,谢谢,atm 我正在使用heroku,但我有一个问题,servlet 3.1 会解决所有问题吗?还是原生 play2 客户端总是更好?我想看看如何将本机 play2 应用程序部署到 ec2。你能给我推荐一些资源吗?
【解决方案3】:

INFO: The APR based Apache Tomcat Native... 不是重要的部分。 Tomcat 将在没有它的情况下启动,并且编译它不会使您的实例健康。事实上,您的 catalina.out 日志记录看起来完全正常。

我的猜测是 Beanstalk 的错误消息是准确的:您的健康检查 URL 配置错误。无论出于何种原因,您的应用程序都没有在端口 80 上返回根文档,这可能会以多种方式出现。尝试将静态 html 或简单的 jsp 页面添加到应用程序的根目录(WAR 中的顶级),并让 Beanstalk 进行检查。 Beanstalk 的默认端口配置应该可以工作(如果我没记错的话,它会通过 apache 将流量传递给 tomcat 并返回,但我有一段时间没看过了),但无论如何检查$CATALINA_HOME/conf/server.xml 只是为了看看发生了什么并没有什么坏处。

【讨论】:

  • 谢谢,我会调查的。但是我对网络服务器还是很陌生,所以我需要一些时间才能再次响应。
  • 试试只显示“ok”的 HTML 页面。这至少会将其隔离到健康检查或 Tomcat。
【解决方案4】:

如果您愿意升级到 Play 2.3.x 或更高版本,Boxfuse 提供原生 Play 2 支持来解决此问题。

您现在可以简单地执行boxfuse run my-play-app-1.0.zip -env=prod,这将自动:

  • 为您的 Play 2 应用量身定制最小 AMI
  • 创建弹性 IP
  • 创建具有正确权限的安全组
  • 启动您的应用实例

所有未来的更新都作为零停机时间的蓝/绿部署

这也适用于 Elastic Load Balancer 和 Auto-Scaling Groups,Boxfuse 免费套餐旨在适应 AWS 免费套餐。

您可以在此处阅读更多信息:https://boxfuse.com/blog/playframework-aws

免责声明:我是 Boxfuse 的创始人兼首席执行官

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多