前段时间试着将play项目部署到Ubuntu Server上,因为在windows上后台运行方式启动play项目($play start)只能启动一个play实例,再启动其他play项目会导致所有项目全部不能执行……

Ubuntu Server资源占用低,并且Linux内核确实比Windows更适合做服务器。不过长久以来一直对纯命令行的操作方式没有自信,也一直没去尝试。直到后来我发现了WinSCP和PuTTY。

关于这两个工具详细的来龙去脉我还没有仔细了解,不过幸好它们都很易用。WinSCP类似FTP客户端,在Ubuntu Server上安装了ssh server之后就可以用sftp的方式连接,以图形界面的方式上传和下载文件的确非常方便。PuTTY则是一个远程命令行工具。有了这两件工具,操作Ubuntu Server就非常简单了。

PuTTY的默认界面非常矬,但只需稍加配置就能摇身变成一个非常现代的命令行窗口。另外在WinSCP中配置PuTTY的路径后可以直接启动PuTTY,也是非常方便的一项功能。即使在本地虚拟机中,PuTTY也比原生命令行界面好用得多。比如可以向上滚屏,还有你不需要老是ctrl+Alt在虚拟机和宿主机器反复切换了,更有用的是,正确设定字符编码之后它可以显示中文。

所谓工欲善其事,必先利其器。工具讲完了,现在回到正题。play依赖的东西不多,只需要JDK环境。这里我偷懒用$sudo apt-get install openjdk-7-jdk安装了openjdk7。用sun jdk也可以,不过稍微麻烦一些。将play1.2.4放在用户目录下,配置环境变量,当然也不要忘了给play加上可运行权限,再拷几个play项目过来,$play dependencies解决下依赖问题,然后$play run运行一下,好,一切正常。

play项目默认的配置文件里有运行模式的设置,只要用$play id命令把服务器上play的id设成prod,项目会自动以生产模式运行。因为需要预编译,用$play run的时候又没有任何反馈,需要耐心等一会才可以访问。同时运行多个项目的时候要注意设置不同的端口号。

虚拟机上的Ubuntu Server分配了512M内存,用topfree命令查看了一下内存占用情况:系统占用一百来兆,勉强运行了3个play项目,前两个占用内存接近两百兆,第三个基本上是个"hello world"级的项目,只占六十多兆。每一个play应用都运行在一个jvm中,内存占用量有点大,像那种在一个tomcat中部署二十几个应用的情况简直是难以想像的。

部署play项目本身非常简单,貌似也没有什么play的部署和管理工具。想了解一下在同一台服务器上部署多个play应用也没搜到什么有用的结果。play的典型使用场景是将一个大型的应用部署到多台服务器组成的集群上去,那得是多么玩具级的应用可以在512M内存的虚拟主机上部署三个啊。

另外一个问题是在同一个浏览器下分别登录两个应用的时候,它们的session cookie发生冲突了,因为它们在session cookie中储存的都是"username",并且由于IP相同,两个应用处于同一个”域“里。这个问题在开发期间问题不大,因为一般一次只运行一个项目。在生产环境下会加上一个http服务器做反向代理,然后为这些应用分配不同的域名或者至少是二级域名,也可以避免出现这种问题。如果非要在开发的机器上解决这个问题的话,看来只好去动自己机器的host文件去了。



blog comments powered by Disqus