让Play!Framework运行在OpenShift上

OpenShift是什么?

OpenShift is Red Hat's free, auto-scaling Platform as a Service (PaaS) for applications. As an application platform in the cloud, OpenShift manages the stack so you can focus on your code.

对了,它就是RedHat的云服务,支持几乎所有的主流开发语言和开发框架,而且拥有相当高的自主性,对建立的每个应用程序能最高能免费使用1536M内存,3000M空间,具体解释请看这里

它有一个很有特色的功能,叫DIY模式,用于支持OpenShift官方没有本地支持的开发语言和开发框架。后面我们来详细看看它的DIY模式,并使用DIY模式来运行基于Play1.2.X的Web Application。


OpenShift有一个命令行工具,使用ruby开发的,所以在安装之前需要首先安装ruby环境。如何安装请看这里,linux和mac os 安装都很容易,几个命令行就能搞定,在windwos上安装需要注意一个细节,其中的RubyInstaller 不要安装太带有空格的文件夹里面,在Git的bash中使用OpenShift的命令行工具时会出问题。


OpenShift使用Git作为代码同步工具,Git For Windows 的安装方式网上已经有很多教程了,不清楚的可以直接Google,这里就不多做说明了,只是需要注意在安装Git For Windows的时候记住勾选这里


看到这里,你应该已经安装了rhc和Git,如果其中遇到什么问题,不好意思,这个特别不好贴图,我没办法Step By Step。


现在,我们来一步一步的创建一个DIY的应用,并最终运行一个Play Application。

1、注册openshift账号,传送门在这里

2、创建Domain

命令行输入 rhc domain create -n [你的Domain的名称,通常可以用自己的英文表示,这里我使用modun] -l [你的openshift邮箱账号,这里我使用[email protected]],所以,我自己的完整的命令时这样的: rhc domain create -n modun -l [email protected].首次运行的时候rhc会给你创建一对公私密匙,此密匙通常保存在“C:\Users\Modun\.ssh”文件夹下,你按照rhc的提示步骤很轻松的就能走下来。

3、创建DIY应用

在第二步完成后,你应该已经创建了自己的domain,下面来让我们走上自己关键的一步,创建DIY应用。


在输入命令之前,你需要使用命令行先导航到你希望创建Play工程的文件目录下,比如我自己的“H:\JAVA-Play APPs” ,因为在应用创建完成后rhc默认会创建一个本地Git仓库,仓库名称为你的应用名称,然后使用Pull命令将OpenShift云端的应用程序结构和数据同步到你的本地仓库中。


现在让我们来创建自己的应用吧,输入rhc app create -a [应用名称] -t diy-0.1,提示输入密码,然后等待创建成功,这里我使用 rhc app create -a play1demo -t diy-0.1。命令行成功执行后,你的本地文件夹里面应该已经存在了应用程序Git目录了。走到这里其实你已经在OpenShift的云上创建了一个可运行的Web Application。


程序地址大概是这样的http://play1demo-modun.rhcloud.com/,Git仓库地址大概是这样的ssh://[email protected]/~/git/play1demo.git/,为了方便后面的Push,我们将仓库地址添加到remote中去,git remote add origin ssh://[email protected]/~/git/play1demo.git/。

4、修改DIY应用,让其支持Play1.2.x

DIY应用的原理其实非常简单,就是它会给你一个TCP端口号,你需要做的事情就是使用你自己喜欢的语言或框架启动一个Http服务器,然后监听它给你的端口号(现在为8080端口),OpenShift会将此端口的所有东西转发出去。


同步下来的目录中有两个非常重要的目录,看这里,一个叫diy的目录可以直接删除掉,因为里面有一个ruby写的小型http服务器,它会和你抢占服务端口,有它没你,有你没它,所以你需要将它删除掉。然后呢,就是.openshift这个目录了,DIY的特别之处就在这里了,此目录中有两个子目录,一个是action_hooks,应用程序钩子,另一个是cron,定时任务触发器。我们要着重看看action_hooks这个目录。里面有6个Bash文件,没错了,是可以执行你自己编写的bash的文件哦,爽不爽?执行顺序分别是stop,pre_build,build,deploy,start,post_deploy,每次我们从本地Git Push到OpenShift上后,就会依次执行这几个文件的。


为了让OpenShift能本地支持PlayFramework的编译和运行(注意,不是打包成War运行哦),我们需要修改其中的pre_build,start,和stop这三个文件。


我并不会linux bash,需要走这里下载这几个文件,不过需要说明的是,直接使用这几个文件有一点小问题,会造成不能正常的开启和关闭Play自带的Jetty服务器。原因是在这几个文件编写后,OpenShift的云端目录结构改变了。

所以,你可能需要使用我附件中提供的文件了,虽然我不会写bash,但是修改几个小地方还是没问题的哦。


好了,现在说说这几个文件的作用吧。pre_build主要是做服务器端PlayFramework的版本和环境监测,如果服务器端还没有下载PlayFramework,pre_build可以立即下载并解压到正确的地方去。start当然就是让你有机会执行play Run 命令了,stop是让你有机会执行play stop 命令。

5、Git Push 到OpenShift

当代码修改好后,先执行git add -A,然后 git commit -m"modified",最后使用自己修改后的代码 git push origin  或者使用附件中的代码直接push都是可以的

结束语

当然了,这是我第一次如此认真的写一篇技术文章,看了下时间,从晚上9点30分写到凌晨1点,中途大概有半个小时和一个朋友聊QQ去了。我只是想说,这样短短的一篇文章肯定不能让您真正的了解OpenShift,我只是尽量做一个大概的介绍,然后将我在这过程中遇到的一些问题提前分享出来,避免对OpenShift有兴趣的人花无谓的时间。下面我将您可能需要的拓展阅读知识贴在下面。


1、OpenShift 官方网站

2、OpenShift 官方微博(没错,有新浪微博哦

3、牛人博客一(请备好梯子)

4、官方社区牛人博客

5、投票吧,票票多了OpenShift会考虑原生支持Play应用的,喜欢Play的朋友要顶哦





自己认真写了这些东西后才发现前人写的那些经验文章确实不易,对于google重度使用者的我,真的要衷心感谢你们,自己也在此自勉一下,将来有时间也要多写,将此精神传承下去,Modun 加油,你能行!

猜你喜欢

转载自modun.iteye.com/blog/1595857