Tech

在Dotcloud上搭建NodeJS+MongoDB环境

主要目的是练习KnockoutJS和Bootstrap,后台为了保持一致就用现成的NodeJS + MongoDB了。写好需要的功能,本地测试通过之后想试着布置一下,正好也可以了解Dotcloud架设这种环境的方法,网上没有现成的文档,有相关的文章,但不是用ExpressMongoskin写的,所以自己动手搭建了一个,现在把方法分享一下。

Dotcloud Configure

新建一个项目,目录结构和其他应用基本相同。忘了的话可以参考这篇架设Django的文章。根目录是kanoya-on-dotcloud,kanoya是NodeJS项目目录,目录中的文件列表如下:


kanoya-on-dotcloud下的dotcloud.yml文件指定使用什么语言和数据库:

编辑supervisord.conf,指定NodeJS执行的主文件,目录(directory)通常不需要改:

这两个是dotcloud用到的配置文件,注意它们的位置不在同一级。它们只和dotcloud有关,和NodeJS没关系。

NodeJS真正会用上的,主文件(app.js)不用说,没人会把本地都跑不起来的项目传上去,唯一要注意的是,listen端口必须是8080,不然会报502错误。关键是package.json文件,只是多加一个逗号就会导致出错,所以要仔细检查

将整个项目文件push上去。

$ dotcloud push kanoya kanoya-on-dotcloud/
# upload kanoya-on-dotcloud/ ssh://dotcloud@uploader.dotcloud.com:443/kanoya
# rsync
building file list … done
上传的文件列表
……
03:15:17 —> All services have been initialized. Deploying code…
03:15:17 [www.0] The build started
03:15:18 [www.0] Fetched code revision rsync-1325733312349
03:15:21 [www.0]
03:15:21 [www.0]
03:27:32 [www.0] node: started
03:15:24 [www.0] The build finished successfully
03:15:24 —> Deploy finished

Deployment finished. Your application is available at the following URLs
www: http://kanoya-perchouli.dotcloud.com/

Log

顺便分享log文件的类型和查看方法,已经熟悉了可以跳过这一段。

Dotcloud上运行的服务看不到输出,所以log文件是很重要的记录。NodeJS主要是两种log文件。一是Deploy时,如果npm安装相应模块失败——通常都是package.json错误导致的——会直接给出log地址,比如:

10:47:28 [www.0] npm ERR! File: /home/dotcloud/rsync-1325760431049/kanoya/package.json
10:47:28 [www.0]
10:47:28 [www.0] npm ERR! JSON.parse Failed to parse package.json data.
10:47:28 [www.0] npm ERR! /home/dotcloud/rsync-1325760431049/kanoya/npm-debug.log

另一种是NodeJS用console.log命令输出的调试信息,位置在/var/log/supervior 下。可以用dotcloud ssh命令登录上去查看,也可以直接输出到本地:

$ dotcloud run kanoya.www “ls /var/log/supervisor/*.log | xargs cat” > local.log
$ dotcloud run kanoya.www “cat /home/dotcloud/rsync-1325760431049/kanoya/npm-debug.log” > local.log

MongoDB

经过上面的设置、调试,至少NodeJS是已经跑起来了,接着配置MongoDB。流程是:先用root帐号登录,创建一个新数据库,然后添加一个可以访问这个数据库的用户。

$ dotcloud info kanoya.data #如果dotcloud.yml里写的是db,这里就是kanoya.db
config:
    mongodb_password: dSTqWEhUzdrJcwHXXXXX #root的密码
datacenter: Amazon-us-east-1b
ports:
   -name: mongodb
    url: mongodb://root:dSTqWEhUzdrJcwHXXXXX@kanoya-perchouli-data-0.dotcloud.com:20661 #在NodeJS里要用到这个URL
type: mongodb
$ dotcloud run kanoya.data mongo
kanoya.data:PRIMARY> use admin
kanoya.data:PRIMARY> db.auth(“root”,”dSTqWEhUzdrJcwHXXXXX”)
1
kanoya.data:PRIMARY> use kanoya #建立一个名为kanoya的collection(当数据库理解吧…)
kanoya.data:PRIMARY> db.addUser(“perchouli”,”mypassword”) #密码不要有@符号,至少我是失败了的…
kanoya.data:PRIMARY> db.items.insert({JSON格式的数据})
kanoya.data:PRIMARY> db.items.find() #查看数据插入是否成功

最后修改app.js。主要就是其中的mongourl了,SO上有回答说设置为 mongo:// 形式,但我加上前缀以后完全连接不上,最终成功运行的代码如下:

搭建结束,前台效果可以看 http://kanoya-perchouli.dotcloud.com/ ,后台代码在github上,还有其他问题欢迎评论。

2 thoughts on “在Dotcloud上搭建NodeJS+MongoDB环境”

  1. 新年快乐呀。有空更新一下插件吧,尤其是把style拿出来。

    多说项目里用了三个nodejs项目,lessc, handlebarsjs, uglifyjs.
    未来可能还会用node搭socket.io

    1. 新年快乐v= =v
      嗯,更新了,新后台美观多了。 因为域名在备案复查中不幸中枪,刚搬完家所以之前没更新orz
      handlebars和jqtpl挺像的,之前没用过,看看去。

Leave a Reply

Your email address will not be published. Required fields are marked *