0

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 上传更改?

4

4 回答 4

5

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

这是我在安装了 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 &

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

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

我希望这有帮助。

于 2012-08-21T20:15:41.580 回答
3

您不应该将您的应用程序打包为战争,除非您有义务这样做或有充分的理由,因为您将失去框架的重要功能(即使使用 servlet 3.0 ,您也会错过 websocket 支持)。

一种选择是通过dotCloud服务部署您的应用程序。该服务在 Amazon EC2 之上运行,使您能够轻松选择堆栈和垂直扩展。当然,你必须决定它是否物有所值,但你可以免费测试。

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

于 2012-08-18T09:58:47.370 回答
2

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无论如何检查一下看看发生了什么也没有什么坏处。

于 2012-08-12T03:54:42.147 回答
1

如果您愿意升级到 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 的创始人兼 CEO

于 2015-12-10T09:10:55.287 回答