比较不同的 PaaS 平台上的 Node.js 支持 已翻译 100%

oschina 投递于 2013/06/26 16:01 (共 18 段, 翻译完成于 07-08)
阅读 5745
收藏 54
6
加载中

相对其他竞争语言来说,Node.js算是挺年轻的,但随着它逐渐成熟,现在有大把的Node.js托管平台可供我们选择。在这篇文章里我会对几个PaaS服务提供商做一个简单的评测。

文章里并没有包含IaaS的服务商比如AWS或者Joyent,尽管下文中提到的几个选择在概念上有点模糊,既可以被算作PaaS也可以被算作IaaS。

本文主要关注两个方面:部署配置环境变量。同时为方便新手,文中也提供了一些提示、操作面板的截图以及其他的杂项内容。以后的文章中我们会进行一些基本的性能测试,并且评测一下各个平台是否易于扩展。

翻译于 2013/07/09 07:55
2

参赛选手

服务提供商 部署方法 如何配置环境变量 性能
Nodejitsu CLI CLI/web界面 马上就搞
Heroku git CLI
Modulus CLI/网页上传 CLI/web界面
App Fog CLI CLI/web界面
Azure CLI/git CLI/web界面
dotCloud CLI CLI/.yml文件
Engine Yard git ey_config npm模块
OpenShift git SSH + 创建文件
CloudFoundry 马上就搞 马上就搞

安装过程

我开始于一个简单的Express应用,并使用了nconf以便简洁的用一个配置处理多个平台上不同的监听端口设置方法(有时候是必须要设置的),同时加入了一个傀儡变量SECRET。nconf会首先查找传给node命令的参数,之后查找环境变量,然后尝试加载根目录上一级的config.json文件,最后回退到我们在代码中设置的默认值。通过这个过程,在应用被加载时,我就能了解到我们的设置有没有从以上的几个外部来源中被正确的读取到。如果没读到,那么加载应用的响应值就会是默认的SECRET。如果我能获取应用启动后的日志,我还能确定应用所监听的端口号——它被记在NODE_ENV环境变量中。

最后,我在package.json文件中设置了这个对象:"engines": { "node": "v0.10.x" …,以观察各平台的不同反应。

以下排名不分先后……

翻译于 2013/07/09 08:25
2

Nodejitsu

https://www.nodejitsu.com/

作为首批提供Node.js托管服务的提供商之一,Nodejitsu成了Joyent的官方合作伙伴——在Joyent终止了他们的no.de服务之后(搞毛,这域名多牛掰)。Nodejitsu现在没有永久免费服务了,但是他们提供一个每月$3的廉价独立方案,还有一个30天的免费试用。

配置变量

根据文档所说,你可以用任何你想用的端口号,只要是80端口或者大于1024的端口就行。

用我们自己的SECRET设置去覆盖默认值很容易。可以用CLI或者web界面来搞,和其他几个本次一同参测的平台一样。

翻译于 2013/07/09 08:36
2

部署过程

将你的代码推送到Nodejitsu云平台需要通过一个特制的命令行应用(CLI),可以通过npm安装。注册之后你会马上被扔到一个附带安装指令的github repo,虽然这点还算好——但总的来说安装过程还是挺蛋疼的。你得选择一个子域名,然后它会被自动添加到package.json文件里。从我做过的几个测试来看,部署还是很快的。系统会自动增加package.json里的version属性的值,虽然这对我来说无所谓,但有的人可能会觉得很烦。

整个过程中有三个小挫折。第一个是版本问题。部署过程中系统提示如下信息:
info: jitsu v0.12.10-2, node v.10.4
同时人家告诉我系统还不支持0.10.x,必须得用0.8.x版本才行。
第二个是如果我修改了package.json文件里的name属性,系统就不让我部署。
第三个是每回我重新部署的时候,我自己设置的ENV变量都会被抹掉。没准有个办法能解决这问题(译者注:但显然作者没找到)。

翻译于 2013/07/09 08:48
2

杂记和操作面板截图

Nodejitsu以Node.js为中心这一点让我尤为称道,反正自定义设置是通过标准的package.json文件来处理的。你甚至可以自定义部署前(predeploy)和部署后(postdeploy)的钩子(hook)。我个人感觉部署应用和查看日志都挺方便的。Nodejitsu dashboard

翻译于 2013/07/09 08:54
3

Heroku

https://www.heroku.com/

PaaS世界的庞然大物, 使用无所不在的Ruby on Rails 构造出的极端流行的平台。

变量配置

同样是使用CLI设置我们的SECRET,用来覆盖默认值。

所有应用在端口5000上运行,所以你需要监听这个端口。

最后,需要创建一个Procfile来说明web应用:node server.js。这只是支持多语言的PaaS的平台的小小的副作用。

zicode
翻译于 2013/06/30 22:33
1

部署过程

虽然Heroku用"toolbelt" CLI来管理你的账号和应用,但部署过程得用git来完成。你只需要把他们给你的endpoint作为remote加入到你的git配置里去就行了。由于他们不光提供Node.js服务,所以当我发现他们居然支持v0.10.6的时候我真的很兴奋!

我第一次的部署看起来是成功了,但随后收到的错误信息迫使我去研究一开始得给这个应用配置多少资源才行:
heroku ps:scale web=1
之后就一切顺利了。

翻译于 2013/07/09 09:04
2

杂记和控制面板截图

三个月之前我才第一次尝试在Heroku上搞我自己的项目,一方面是因为我对设置自己的服务器多多少少有点偏执,另一方面是因为Heroku把node.js作为一种追加方案来提供(译者注:也就是Node.js不是Heroku最重要的产品)。不过如果能忽略不支持WebSocket以及有误导性的市场策略和统计信息这俩情况,那这也能算是一次如丝般顺滑的体验。

他们下了大力气弄出来这个既漂亮又实用的控制面板,还附带几个很方便的特性(你在别处一般找不到),比如设置某个S3托管的文件作为自定义的404页面,以及向其他用户转移项目所有权的功能。

Heroku dashboard

翻译于 2013/07/09 09:23
2

Modulus

http://modulus.io

这个.io后缀名说明了这是个比较年轻的平台。他们专注于Node.js,并且内置对MongoDB和本地文件存储的支持。

配置变量

变量既可以用web界面也可以用CLI配置。当进行到创建SECRET这一步时我被卡住了。试了几次以后我发现变量的值里不能包括空格!结果在Modulus平台上我没法自定义SECRET。我醉了……囧。

应用必须监听8080端口,但是官方说“我们推荐您使用PORT环境变量( process.env.PORT )。”

翻译于 2013/07/09 09:32
2

部署

部署可以通过CLI来做,但你也可以压缩整个项目并把它通过他们很有趣的网络接口上传。我没有任何问题,部署,但每次要把你整个项目(除了node_modules之外)都打包和上传,这会使它的处理过程比那些使用 git 的“diff”功能或 rsync 的工具慢得多。

至于写作,模块运行于0.8.15版本,并忽略你在 package.json 中指定的任何内容。

其它注意事项和仪表板

我为这些家伙欢呼,并希望他们能继续改善。有个内置MongoDB的选项会是不错的,我喜欢前期定价。

Modulus dashboard

赵亮-碧海情天
翻译于 2013/07/01 19:18
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(5)

A
AlfredDuck
还有nitrous.io
l
lgstarzkhl
还真挺想搞这块的!
戴威
戴威
Modulus很好用,但是我怎么才能监听80端口?
殊麒
殊麒
马上就搞,搞完再搞
wellyao
wellyao
马上就搞!
返回顶部
顶部