使用Node.js + Mongodb构建基于Cloud Foundry的项目

laxila 2012-09-17 11:23:21
加精
随着云计算的兴起,很多厂商都推出了自己的云计算平台,如VMware、Amazon、Google、Microsoft等。

本文将介绍VMware公司的云计算平台 - Cloud Foundry,本文将使用Node.js + MongoDB构建基于Cloud Foundry的项目。

必备知识:

Node.js和NPM命令行的使用。

Node.js的语法。

MongoDB的语法。

Mongoose的语法。

环境搭建:

Windows 7

Node.js + Ruby + vmc(Cloud Foundry CIL命令行工具)

用户级别及难度:

全部用户

适中

范例文件:


http://pan.baidu.com/share/link?shareid=30772&uk=2298510329

通过本文将学会:

掌握Node.js、Ruby、DevKit、vmc(Cloud Foundry CIL命令行工具)的环境配置。

使用tunnel连接Cloud Foundry远程数据库(MongoDB)的方式。

Node.js的配置:

下载:http://nodejs.org/download/

配置:


根据实际情况下载对应的node.js安装包。(选择的版本尽量与Cloud Foundry的Node.js环境保持一致)

由于使用了msi方案,所以直接双击下载后的安装包即可。

重启系统。

验证:


在cmd中键入:node -v / npm -v 如果出现相应的版本号,则安装成功。

Ruby的配置:

Cloud Foundry的操作基于vmc(CIL命令行工具),安装vmc前需要Ruby环境。

由于需要使用Devkit,所以此处的Ruby版本为:1.9.2。(1.9.3在DevKit下有问题)

下载:https://rubyforge.org/frs/?group_id=167(请下载1.9.2-p290版本)

配置:


解压到任意文件夹,如:{盘符}:\DevTools\ruby-1.9.2-p290。

在Windows环境变量中增加:

RUBY_HOME = {盘符}:\DevTools\ruby-1.9.2-p290

Path += %RUBY_HOME%\bin(需配置在系统环境变量,而非用户环境变量)

重启系统。

验证:


在cmd中键入:ruby -v / gem -v 如果出现版本号,则安装成功。

vmc的安装:


安装:

使用gem安装vmc,在cmd中键入gem install vmc。(无需重启)

验证:

在cmd中键入vmc -v,如果出现版本号,则安装成功。

vmc的使用:


建立连接:

vmc target api.cloudfoundry.com (指定Cloud Foundry API地址)

建立账户:

通过网站建立:在http://www.cloudfoundry.com/建立账户。

通过vmc建立,在cmd中键入:vmc add-user [--email, --passwd]。

登陆:

在cmd中键入:vmc login(根据提示输入注册时的邮箱地址及密码)

建立app(Node.js):

在本地建立文件夹,如:{盘符}:\nodejs\local\testcf

定位到testcf根目录,在cmd中键入:npm install express

在testcf文件夹中新增index.js文件,并键入如下内容:

var express = require('express');

var app = express();

app.get('/', function(req, res) {

res.send('Hello from Cloud Foundry');

});

app.listen( process.env.VMC_APP_PORT || 3000 );

console.log( "Server start up!" );

本机测试:


定位到testcf根目录,在cmd中键入:node index.js

控制台出现:“Server start up!”后,在浏览器中键入:http://loaclhost:3000,如显示“Hello from Cloud Foundry”,说明运行成功。

上传App到Cloud Foundry:

定位到testcf根目录,在cmd中键入:vmc push --runtime=node08,生成如下的内容:

Would you like to deploy from the current directory? [Yn]: y

Application Name: ks-test-cf

Detected a Node.js Application, is this correct? [Yn]: y

Application Deployed URL [ks-test-cf.cloudfoundry.com]:

Memory reservation (128M, 256M, 512M, 1G, 2G) [64M]: 128

How many instances? [1]: 1

Bind existing services to 'ks-test-cf'? [yN]: n

Create services to bind to 'ks-test-cf'? [yN]: n

Would you like to save this configuration? [yN]: y

Manifest written to manifest.yml.

Creating Application: OK

Uploading Application:

Checking for available resources: OK

Processing resources: OK

Packing application: OK

Uploading (22K): OK

Push Status: OK

Staging Application 'ks-test-cf': OK

Starting Application 'ks-test-cf': OK

注:上述英文比较简单,翻译略过。由于当前项目并没有使用数据库,所以

不需要绑定(Binding)和建立(Create)任何Service。

在浏览器中键入:http://ks-test-cf.cloudfoundry.com/ ,如出现“Hello from Cloud Foundry”,说明运行成功。(与在本地运行效果一样)

MongoDB的配置:


下载:

http://www.mongodb.org/downloads

配置:

根据实际情况下载对应的MongoDB压缩包。

注:由于Cloud Foundry对应MongoDB的版本是2.0,所以避免出现本地测试环境与Cloud Foundry不一致的情况,尽量选择相应版本。

解压到任意文件夹,如:{盘符}:\DevTools\mongodb-2.0.7。

在Windows环境变量中增加:

MONGODB_HOME = {盘符}:\DevTools\mongodb-2.0.7

Path += %MONGODB_HOME%\bin

重启系统。

验证:

在cmd中键入:mongo --version 如出现版本号,则安装成功。

使用:

在本地建立一个文件夹,如:{盘符}:\mongodb\testdb。

在cmd中键入:mongod --dbpath {盘符}:\mongodb\testdb,即可连接到本地数据库。

注:可以使用MongoVUE等客户端操作MongoDB。

Mongoose的配置:


Mongoose是第三方的Noe.js模块,可以更方便的操作MongoDB。

下载:

在cmd中键入:npm install mongoose

验证:(如出现类似下图的内容,说明安装成功)




注意:

mongoose在安装的时候需要依赖于mongodb(Node.js模块)

如mongodb模块未安装的话,mongoose会自动安装,如上图所示。

独立安装mongodb,在cmd中键入:npm install mongodb(注意npm的版本必须要大于1.1.19,否则会出现错误)

Node.js 连接MongoDB:(Localhost本地方式)

Mongoose的引入:


var db = require( 'mongoose' );

定义一个Object结构:(为了与Cloud Foundry配合)

mongo = {

'hostname' : 'localhost',

'port' : 27017,

'username' : '',

'password' : '',

'db' : testdb

}

注:hostname、port和db这三个属性。(应与你的开发环境相对应)

生成mongoose连接mongodb时的URL字符串:

var generate_mongo_url = function( mongo ) {

return 'mongodb://' + mongo.hostname + ':' + mongo.port + '/' + mongo.db;

}

连接数据库(MongoDB):

db.connect( mongourl );

建立Schame及模型:

var Schema = db.Schema,

ObjectId = Schema.ObjectId;

var testSchema = new Schema({

host : String,

dbs : String,

time : Date

});

绑定模型:

var TestModule = db.model( 'test-cloudfoundry', testSchema );

注:test-cloudfoundry是Collection的名字(Collection相当于SQL的Table概念)

保存数据到Collection:

var test = new TestModule();

test.host = mongo.hostname;

test.dbs = mongo.db;

test.time = new Date();

test.save( function( err ) {

if (!err) {

console.log( 'save complete' )

}

else {

console.log( 'save error = ' + err )

}

});

注:save方法相当于SQL的Insert语句,同时Mongoose还定义了回调函数

以供使用。

运行:

使用mongod --dbpath的方式连接到本地的MongoDB。

定位到test-cf根目录,在cmd中键入:node index.js。

在浏览器中访问http://localhost:3000/,在cmd中出现如下内容,则说明调用MongoDB成功。

mongodb url : mongodb://localhost:2701

/testdbServer start at http://localhost:3000

save complete

注意:

变量mongo可以不用定义为Object类型,只是为了与Cloud Foundry配合才这么处理。

Mongoose独特的Schame机制对应了Table数据结构。

连接Cloud Foundry远程数据库:

安装:


gem install eventmachine --pre

gem install caldecott(如出现异常或如下错误,则需要安装DevKit,否则跳过本节)

Please update your PATH to include build tools or download the DevKit

from 'http://rubyinstaller.org/downloads' and follow the instruction

at 'http://github.com/oneclick/rubyinstaller/wiki/Development-Kit'

DevKit的安装:


下载:http://rubyinstaller.org/downloads/

配置:

解压到任意文件夹,如{盘符}:\DevTools\devkit-4.5.2

定位到devkit-4.5.2根目录,在cmd中键入:ruby dk.rb init

正确安装后,会生成config.yml文件,编辑此文件并键入ruby所在的目录,格式:- {盘符}:/DevTools/ruby-1.9.2-p290(注意横岗、斜杠)

ruby dk.rb review(检查要添加DevKit支持的Ruby列表是否有误,可以略过)

ruby dk.rb install

验证:

gem install caldecott

如未出现任何错误信息,则安装成功。

注意:

DevKit版本号:DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe

DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe对应的Ruby版本:1.9.2-p290

注:上述版本的匹配已验证通过,其他版本未验证。

Node.js 连接MongoDB:(Cloud Foundry远程方式)

新建MongoDB Service:

vmc create-service mongodb testdb

绑定Service到App(ks-test-cf):

vmc bind-service testdb ks-test-cf

注:testdb是刚刚建立的MongoDB;ks-test-cf是之前上传(push)的App Name。

对Node.js连接本地MongoDB进行改造:

修改mongo变量:

if( process.env.VCAP_SERVICES ) {

var env = JSON.parse( process.env.VCAP_SERVICES );

mongo = env[ 'mongodb-2.0' ][ 0 ][ 'credentials' ];

}

else {

mongo = {

'hostname' : 'localhost',

'port' : 27017,

'username' : '',

'password' : '',

'db' : 'testdb'

}

}

注:增加判断当前环境的逻辑,process.env.VCAP_SERVICES是Node.js

提供的系统变量(JSON),保存了当前登陆Cloud Foundry App

(ks-test-cf)的必要信息。

修改generate_mongo_url方法:

var generate_mongo_url = function( obj ) {

if( process.env.VCAP_SERVICES ) {

return 'mongodb://' + obj.username + ':' + obj.password + '@' + obj.hostname + ':' + obj.port + '/' + obj.db;

}

else {

return 'mongodb://' + obj.hostname + ':' + obj.port + '/' + obj.db;

}

}

注:加入了当前环境为Cloud Foundry时,生成mongodb字符串的逻辑,

相对本地连接url来说,增加了username、password。

更新:

定位到testcf根目录,在cmd中键入:vmc update ks-test-cf,如出现下面的内容,则说明更新成功:

Uploading Application:

Checking for available resources: OK

Processing resources: OK

Packing application: OK

Uploading (26K): OK

Push Status: OK

Stopping Application 'ks-test-cf': OK

Staging Application 'ks-test-cf': OK

Starting Application 'ks-test-cf': OK

运行:

在浏览器中键入:http://ks-test-cf.cloudfoundry.com/

在cmd中键入:vmc logs ks-test-cf(查看ks-test-cf的后台打印信息)

Server start up!

mongodb url : mongodb:/XXXXXXXXXXX:XXXXXXXXXXX@172.30.48.68:25176/db

Server start at http://172.30.50.21:12265

save complete

远程连接Cloud Foundry数据库(testdb):

在cmd中键入:vmc tunnel testdb,会出现如下内容:

Binding Service [testdb]: OK

Stopping Application 'caldecott': OK

Staging Application 'caldecott': OK

Starting Application 'caldecott': OK

Getting tunnel connection info: OK

Service connection info:

username : XXXXXXXXXXX

password : XXXXXXXXXXX

name : db

url : mongodb://XXXXXXXXXXX:XXXXXXXXXXX@172.30.48.68:25176/db

Starting tunnel to testdb on port 10000.

1: none

2: mongo

3: mongodump

4: mongorestore

Which client would you like to start

注:其中username和password是Cloud Foundry系统生成,在这里已经隐

去。选择1,可以使用本地客户端进行连接,如之前提到的MongoVUE。

MongoVUE的连接:




注:Service、Port按照如上填写;Username、Password、Database(s)

按照Cloud Foundry给出的内容填写。

注意:

注意env[ 'mongodb-2.0' ][ 0 ][ 'credentials' ]中的'mongodb-2.0'指:MongoDB的版本号。

使用vmc tunnel testdb的时候,需要根据“连接Cloud Foundry远程数据库”节进行配置。

上述修改只给出关键代码,余下代码请看附件。

总结:

vmc需要Ruby环境。

连接Cloud Foundry远程数据库需要Ruby的eventmachine、caldecott这两个包。

安装caldecott需要DevKit的支持。

通过增加Cloud Foundry系统变量:process.env.VCAP_SERVICES来进行当前环境的判断。
...全文
5380 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
kenshin520 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

很长啊,建议楼主整个pdf文档供大家下载。
[/Quote]
嗯,PDF地址:http://pan.baidu.com/share/link?shareid=79642&uk=2298510329
有问题的话,可以随时在这里或者我的微博http://weibo.com/23784148联络我 :)

kenshin520 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 的回复:]

执行这一句后vmc logs ks-test-cf,cloud-foundry给了一个错:
cannot find module 'mongoose'
却是为何?
[/Quote]
你的环境是不是没有安装mongoose这个module?
kenshin520 2012-10-16
  • 打赏
  • 举报
回复
呵呵,没想到,这篇文章已经更新在这里了,只是没有告诉我,还以为一直没有被转过来呢~
这篇文章的原始地址:http://t.k-zone.cn/post/2012-09-13/cloud-foundry
大家在这里留言即可~
Neohan 2012-09-30
  • 打赏
  • 举报
回复
执行这一句后vmc logs ks-test-cf,cloud-foundry给了一个错:
cannot find module 'mongoose'
却是为何?
YHL27 2012-09-26
  • 打赏
  • 举报
回复
不错的哦。。。
  • 打赏
  • 举报
回复
这个基于Cloud Foundry的项目究竟做什么用的
梦幻巧克力 2012-09-23
  • 打赏
  • 举报
回复
好复杂,谢谢楼主
joker981924 2012-09-23
  • 打赏
  • 举报
回复
鼓励下楼主,赞美分享
xiaoqiang3214 2012-09-21
  • 打赏
  • 举报
回复
http://un.zhubajie.com/r/?u=7314963&l=http://task.zhubajie.com/post/
xiaoqiang3214 2012-09-21
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120913/17/fac34745-28d4-4b5b-b301-2e6425b2e350.html?seed=932620697&r=79722298#r_79722298
ziyishiliw 2012-09-21
  • 打赏
  • 举报
回复
虽然看不懂,觉得不错
yingjunyu 2012-09-20
  • 打赏
  • 举报
回复
incompatible encoding regexp match (GBK regexp with UTF-8),这个错误如何解决?
许文君 2012-09-18
  • 打赏
  • 举报
回复
国内还没有做的比较像样的云
熊半城 2012-09-18
  • 打赏
  • 举报
回复
楼主v5,对我很有帮助,看看先
xcz140652 2012-09-18
  • 打赏
  • 举报
回复
本文将使用Node.js + MongoDB构建基于Cloud
dongbeier 2012-09-17
  • 打赏
  • 举报
回复
嗯。楼主的信息很有用。
imvman 2012-09-17
  • 打赏
  • 举报
回复
很长啊,建议楼主整个pdf文档供大家下载。
liuyinuo_2012 2012-09-17
  • 打赏
  • 举报
回复
这的很不错哦
luxing106 2012-09-17
  • 打赏
  • 举报
回复
不懂,不过看似很好
噢噢噢噢 2012-09-17
  • 打赏
  • 举报
回复
前十有我,。。。。
加载更多回复(5)
适用人群IT从业相关人群,0~10年工作经验者课程概述【技术选型】  SpringBoot2.x+MongoDB4.x+Vue均选用能进行生产环境部署的稳定版本【开发模式】前后端分离开发,即当前端又当后端,分角色开发【课程受益】一次上手,即学即会,提供全套源代码,直接可以运行【技术介绍】MongoDB目前NoSql中最流行的数据库,互联网的必备神器,目前最新的版本4.x;本课程针对4.x进行搭建和讲解;MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB的数据模式可以随着应用程序的发展而灵活地更新。MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性

547

社区成员

发帖
与我相关
我的任务
社区描述
Cloud Foundry是业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。
社区管理员
  • Cloud Foundry社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧