主要目的是练习KnockoutJS和Bootstrap,后台为了保持一致就用现成的NodeJS + MongoDB了。写好需要的功能,本地测试通过之后想试着布置一下,正好也可以了解Dotcloud架设这种环境的方法,网上没有现成的文档,有相关的文章,但不是用Express和Mongoskin写的,所以自己动手搭建了一个,现在把方法分享一下。
Dotcloud Configure
新建一个项目,目录结构和其他应用基本相同。忘了的话可以参考这篇架设Django的文章。根目录是kanoya-on-dotcloud,kanoya是NodeJS项目目录,目录中的文件列表如下:
kanoya-on-dotcloud/
├── kanoya
│ ├── app.js
│ ├── node_modules
│ ├── package.json
│ ├── public
│ ├── supervisord.conf
│ └── views
└── dotcloud.yml
kanoya-on-dotcloud下的dotcloud.yml文件指定使用什么语言和数据库:
www:
type: nodejs
approot: kanoya
data:
type: mongodb
编辑supervisord.conf,指定NodeJS执行的主文件,目录(directory)通常不需要改:
[program:node]
command = node app.js
directory = /home/dotcloud/current
这两个是dotcloud用到的配置文件,注意它们的位置不在同一级。它们只和dotcloud有关,和NodeJS没关系。
NodeJS真正会用上的,主文件(app.js)不用说,没人会把本地都跑不起来的项目传上去,唯一要注意的是,listen端口必须是8080,不然会报502错误。关键是package.json文件,只是多加一个逗号就会导致出错,所以要仔细检查:
{
"name": "kanoya",
"description": "Knockoutjs and nodejs",
"version": "0.0.1",
"homepage": "http://www.dmyz.org",
"author": "Perchouli",
"private": true,
"main": "app.js",
"dependencies": {
"express": ">= 0.0.3",
"mongodb": ">= 0.x",
"mongoskin": ">= 0.x"
},
"engines": { "node": ">= 0.4.7" }
}
将整个项目文件push上去。
# 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]
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 “cat /home/dotcloud/rsync-1325760431049/kanoya/npm-debug.log” > local.log
MongoDB
经过上面的设置、调试,至少NodeJS是已经跑起来了,接着配置MongoDB。流程是:先用root帐号登录,创建一个新数据库,然后添加一个可以访问这个数据库的用户。
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:// 形式,但我加上前缀以后完全连接不上,最终成功运行的代码如下:
var mongoskin = require('mongoskin');
var express = require('express');
var app = express.createServer();
var mongourl = "perchouli:mypassword@kanoya-perchouli-data-0.dotcloud.com:20661/kanoya?auto_reconnect";
var db = mongoskin.db(mongourl);
//中间是各种app.configure
app.get('/', function(req, res){
db.collection('items').find().toArray(function(err, items){
res.render('item', { 'shopItems' :JSON.stringify(items) });
})
});
app.listen(8080)
搭建结束,前台效果可以看 http://kanoya-perchouli.dotcloud.com/ ,后台代码在github上,还有其他问题欢迎评论。
新年快乐呀。有空更新一下插件吧,尤其是把style拿出来。
多说项目里用了三个nodejs项目,lessc, handlebarsjs, uglifyjs.
未来可能还会用node搭socket.io
新年快乐v= =v
嗯,更新了,新后台美观多了。 因为域名在备案复查中不幸中枪,刚搬完家所以之前没更新orz
handlebars和jqtpl挺像的,之前没用过,看看去。