使用Node.js + Mongodb構建基于Cloud Foundry的項目

jopen 12年前發布 | 47K 次閱讀 Node.js MongoDB NoSQL數據庫

隨著云計算的興起,很多廠商都推出了自己的云計算平臺,如VMware、Amazon、Google、Microsoft等。

本文將介紹VMware公司的云計算平臺 - Cloud Foundry,本文將使用Node.js + MongoDB構建基于Cloud Foundry的項目。

必備知識:

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

    </li>

  • Node.js的語法。

    </li>

  • MongoDB的語法。

    </li>

  • Mongoose的語法。

    </li> </ul>

    環境搭建:

    • Windows 7

      </li>

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

      </li> </ul>

      用戶級別及難度:

      • 全部用戶

        </li>

      • 適中

        </li> </ul>

        范例文件:

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

          </li> </ul>

          通過本文將學會:

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

            </li>

          • 使用tunnel連接Cloud Foundry遠程數據庫(MongoDB)的方式。

            </li> </ul>

            Node.js的配置:

            • 下載:http://nodejs.org/download/

              </li>

            • 配置:

              • 根據實際情況下載對應的node.js安裝包。(選擇的版本盡量與Cloud Foundry的Node.js環境保持一致)

                </li>

              • 由于使用了msi方案,所以直接雙擊下載后的安裝包即可。

                </li>

              • 重啟系統。

                </li> </ul> </li>

              • 驗證:

                • 在cmd中鍵入:node -v / npm -v 如果出現相應的版本號,則安裝成功。

                  </li> </ul> </li> </ul>

                  Ruby的配置:

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

                    </li>

                  • 由于需要使用Devkit,所以此處的Ruby版本為:1.9.2。(1.9.3在DevKit下有問題)

                    </li>

                  • 下載:https://rubyforge.org/frs/?group_id=167(請下載1.9.2-p290版本)

                    </li>

                  • 配置:

                    • 解壓到任意文件夾,如:{盤符}:\DevTools\ruby-1.9.2-p290。

                      </li>

                    • 在Windows環境變量中增加:

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

                        </li>

                      • Path += %RUBY_HOME%\bin(需配置在系統環境變量,而非用戶環境變量)

                        </li> </ul> </li>

                      • 重啟系統。

                        </li> </ul> </li>

                      • 驗證:

                        • 在cmd中鍵入:ruby -v / gem -v 如果出現版本號,則安裝成功。

                          </li> </ul> </li> </ul>

                          vmc的安裝:

                          • 安裝:

                            • 使用gem安裝vmc,在cmd中鍵入gem install vmc。(無需重啟)

                              </li> </ul> </li>

                            • 驗證:

                              • 在cmd中鍵入vmc -v,如果出現版本號,則安裝成功。

                                </li> </ul> </li> </ul>

                                vmc的使用:

                                • 建立連接:

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

                                    </li> </ul> </li>

                                  • 建立賬戶:

                                    • 通過網站建立:在http://www.cloudfoundry.com/建立賬戶。

                                      </li>

                                    • 通過vmc建立,在cmd中鍵入:vmc add-user [--email, --passwd]。

                                      </li> </ul> </li>

                                    • 登陸:

                                      • 在cmd中鍵入:vmc login(根據提示輸入注冊時的郵箱地址及密碼)

                                        </li> </ul> </li>

                                      • 建立app(Node.js):

                                        • 在本地建立文件夾,如:{盤符}:\nodejs\local\testcf

                                          </li>

                                        • 定位到testcf根目錄,在cmd中鍵入:npm install express

                                          </li>

                                        • 在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!" );
                                          </li> </ul> </li> </ul>

                                          • 本機測試:

                                            • 定位到testcf根目錄,在cmd中鍵入:node index.js

                                              </li>

                                            • 控制臺出現:“Server start up!”后,在瀏覽器中鍵入:http://loaclhost:3000,如顯示“Hello from Cloud Foundry”,說明運行成功。

                                              </li> </ul> </li>

                                            • 上傳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
                                                </li> </ul> </li> </ul>

                                                                注:上述英文比較簡單,翻譯略過。由于當前項目并沒有使用數據庫,所以
                                                                不需要綁定(Binding)和建立(Create)任何Service。

                                                  • 在瀏覽器中鍵入:http://ks-test-cf.cloudfoundry.com/,如出現“Hello from Cloud Foundry”,說明運行成功。(與在本地運行效果一樣)

                                                    </li> </ul> </ul>

                                                    MongoDB的配置:

                                                    • 下載:

                                                      • http://www.mongodb.org/downloads

                                                        </li> </ul> </li>

                                                      • 配置:

                                                        • 根據實際情況下載對應的MongoDB壓縮包。
                                                          注:由于Cloud Foundry對應MongoDB的版本是2.0,所以避免出現本地測試環境與Cloud Foundry不一致的情況,盡量選擇相應版本。

                                                          </li>

                                                        • 解壓到任意文件夾,如:{盤符}:\DevTools\mongodb-2.0.7。

                                                          </li>

                                                        • 在Windows環境變量中增加:

                                                          • MONGODB_HOME = {盤符}:\DevTools\mongodb-2.0.7

                                                            </li>

                                                          • Path += %MONGODB_HOME%\bin

                                                            </li> </ul> </li>

                                                          • 重啟系統。

                                                            </li> </ul> </li>

                                                          • 驗證:

                                                            • 在cmd中鍵入:mongo --version 如出現版本號,則安裝成功。

                                                              </li> </ul> </li>

                                                            • 使用:

                                                              • 在本地建立一個文件夾,如:{盤符}:\mongodb\testdb。

                                                                </li>

                                                              • 在cmd中鍵入:mongod --dbpath {盤符}:\mongodb\testdb,即可連接到本地數據庫。

                                                                </li> </ul> </li> </ul>

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

                                                                Mongoose的配置:

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

                                                                  </li>

                                                                • 下載:

                                                                  • 在cmd中鍵入:npm install mongoose

                                                                    </li> </ul> </li>

                                                                  • 驗證:(如出現類似下圖的內容,說明安裝成功)

                                                                    </li> </ul>

                                                                    • 注意:

                                                                      • mongoose在安裝的時候需要依賴于mongodb(Node.js模塊)

                                                                        </li>

                                                                      • 如mongodb模塊未安裝的話,mongoose會自動安裝,如上圖所示。

                                                                        </li>

                                                                      • 獨立安裝mongodb,在cmd中鍵入:npm install mongodb(注意npm的版本必須要大于1.1.19,否則會出現錯誤)

                                                                        </li> </ul> </li> </ul>

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

                                                                        • Mongoose的引入:

                                                                          var db = require( 'mongoose' );
                                                                          </li> </ul>

                                                                          • 定義一個Object結構:(為了與Cloud Foundry配合)

                                                                            mongo = {
                                                                                'hostname' : 'localhost',
                                                                                'port'     : 27017,
                                                                                'username' : '',
                                                                                'password' : '',
                                                                                'db'      : testdb
                                                                            }
                                                                            </li> </ul>

                                                                                    注:hostname、port和db這三個屬性。(應與你的開發環境相對應)

                                                                            • 生成mongoose連接mongodb時的URL字符串:

                                                                              var generate_mongo_url = function( mongo ) {
                                                                                return 'mongodb://' + mongo.hostname + ':' + mongo.port + '/' + mongo.db;
                                                                              }
                                                                              </li> </ul>

                                                                              • 連接數據庫(MongoDB):

                                                                                db.connect( mongourl );
                                                                                </li> </ul>

                                                                                • 建立Schame及模型:

                                                                                  var Schema   = db.Schema,
                                                                                      ObjectId = Schema.ObjectId;
                                                                                  var testSchema = new Schema({
                                                                                    host  : String,
                                                                                    dbs   : String,
                                                                                    time  : Date
                                                                                  });
                                                                                  </li> </ul>

                                                                                  • 綁定模型:

                                                                                    var TestModule = db.model( 'test-cloudfoundry', testSchema );
                                                                                    </li> </ul>

                                                                                           注: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 )
                                                                                          }
                                                                                        });
                                                                                      </li> </ul>

                                                                                             注:save方法相當于SQL的Insert語句,同時Mongoose還定義了回調函數
                                                                                             以供使用。

                                                                                      • 運行:

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

                                                                                          </li>

                                                                                        • 定位到test-cf根目錄,在cmd中鍵入:node index.js。

                                                                                          </li>

                                                                                        • 在瀏覽器中訪問http://localhost:3000/,在cmd中出現如下內容,則說明調用MongoDB成功。

                                                                                          mongodb url : mongodb://localhost:2701
                                                                                          /testdbServer start at http://localhost:3000
                                                                                          save complete
                                                                                          </li> </ul> </li> </ul>

                                                                                          • 注意:

                                                                                            • 變量mongo可以不用定義為Object類型,只是為了與Cloud Foundry配合才這么處理。

                                                                                              </li>

                                                                                            • Mongoose獨特的Schame機制對應了Table數據結構。

                                                                                              </li> </ul> </li> </ul>

                                                                                              連接Cloud Foundry遠程數據庫:

                                                                                              • 安裝:

                                                                                                • gem install eventmachine --pre

                                                                                                  </li>

                                                                                                • 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'
                                                                                                  </li> </ul> </li> </ul>

                                                                                                  • DevKit的安裝:

                                                                                                    • 下載:http://rubyinstaller.org/downloads/

                                                                                                      </li>

                                                                                                    • 配置:

                                                                                                      • 解壓到任意文件夾,如{盤符}:\DevTools\devkit-4.5.2

                                                                                                        </li>

                                                                                                      • 定位到devkit-4.5.2根目錄,在cmd中鍵入:ruby dk.rb init

                                                                                                        </li>

                                                                                                      • 正確安裝后,會生成config.yml文件,編輯此文件并鍵入ruby所在的目錄,格式:- {盤符}:/DevTools/ruby-1.9.2-p290(注意橫崗、斜杠)

                                                                                                        </li>

                                                                                                      • ruby dk.rb review(檢查要添加DevKit支持的Ruby列表是否有誤,可以略過)

                                                                                                        </li>

                                                                                                      • ruby dk.rb install

                                                                                                        </li> </ul> </li>

                                                                                                      • 驗證:

                                                                                                        • gem install caldecott

                                                                                                          </li>

                                                                                                        • 如未出現任何錯誤信息,則安裝成功。

                                                                                                          </li> </ul> </li>

                                                                                                        • 注意:

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

                                                                                                            </li>

                                                                                                          • DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe對應的Ruby版本:1.9.2-p290

                                                                                                            </li> </ul> </li> </ul> </li> </ul>

                                                                                                                                  注:上述版本的匹配已驗證通過,其他版本未驗證。

                                                                                                            Node.js 連接MongoDB:(Cloud Foundry遠程方式)

                                                                                                            • 新建MongoDB Service:

                                                                                                              • vmc create-service mongodb testdb

                                                                                                                </li> </ul> </li>

                                                                                                              • 綁定Service到App(ks-test-cf):

                                                                                                                • vmc bind-service testdb ks-test-cf
                                                                                                                  注:testdb是剛剛建立的MongoDB;ks-test-cf是之前上傳(push)的App Name。

                                                                                                                  </li> </ul> </li>

                                                                                                                • 對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'
                                                                                                                      }
                                                                                                                    }
                                                                                                                    </li> </ul> </li> </ul>

                                                                                                                                    注:增加判斷當前環境的邏輯,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;
                                                                                                                          }
                                                                                                                        }
                                                                                                                        </li> </ul> </ul>

                                                                                                                                        注:加入了當前環境為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
                                                                                                                            </li> </ul> </li> </ul>

                                                                                                                            • 運行:

                                                                                                                              • 在瀏覽器中鍵入:http://ks-test-cf.cloudfoundry.com/

                                                                                                                                </li>

                                                                                                                              • 在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
                                                                                                                                </li> </ul> </li> </ul>

                                                                                                                                • 遠程連接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</pre></li> </ul> </li> </ul>

                                                                                                                                                    注:其中username和password是Cloud Foundry系統生成,在這里已經隱
                                                                                                                                                    去。選擇1,可以使用本地客戶端進行連接,如之前提到的MongoVUE。

                                                                                                                                    • MongoVUE的連接:

                                                                                                                                      </li> </ul>

                                                                                                                                             注:Service、Port按照如上填寫;Username、Password、Database(s)
                                                                                                                                             按照Cloud Foundry給出的內容填寫。

                                                                                                                                      • 注意:

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

                                                                                                                                          </li>

                                                                                                                                        • 使用vmc tunnel testdb的時候,需要根據“連接Cloud Foundry遠程數據庫”節進行配置。

                                                                                                                                          </li>

                                                                                                                                        • 上述修改只給出關鍵代碼,余下代碼請看附件。

                                                                                                                                          </li> </ul> </li> </ul>

                                                                                                                                          總結:

                                                                                                                                          • vmc需要Ruby環境。

                                                                                                                                            </li>

                                                                                                                                          • 連接Cloud Foundry遠程數據庫需要Ruby的eventmachine、caldecott這兩個包。

                                                                                                                                            </li>

                                                                                                                                          • 安裝caldecott需要DevKit的支持。

                                                                                                                                            </li>

                                                                                                                                          • 通過增加Cloud Foundry系統變量:process.env.VCAP_SERVICES來進行當前環境的判斷。

                                                                                                                                            </li> </ul> 來自:http://blog.csdn.net/kenshin520/article/details/8073325

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!