49hack

見習いエンジニアが魔法使いになるまで

EC2でnode+express+mongoDB+mongooseの環境を構築する

Amazon EC2にnode+express+mongoDBの環境を構築します。
EC2の構築に関しては以下のSlideがとてもわかりやすいです。

nodeの環境構築

EC2を立ちあげてsshにも成功したら、いよいよnodeの環境構築に入ります。
必要なライブラリをyumでインストールします。

% sudo yum install git -y
% sudo yum install openssl-devel -y
% sudo yum install gcc-c++ -y
% sudo yum install make -y

次にnvm(Node Version Manager)をgitでダウンロードします。

% git clone git://github.com/creationix/nvm.git .nvm
% . .nvm/nvm.sh  

なお、$ . .nvm/nvm.shはnvmの起動シェルなので、
.bashrcに追記しておくと便利です。(結構忘れます)

nodeのインストール

環境構築ができたらnodeをインストールします。
foreverを使いたいので0.6系を選択します。

% nvm install v0.6.19
% nvm use v0.6.19
% nvm ls
   v0.6.19
current:        v0.6.19

モジュールのインストール

express, mongodb, mongooseをnpm(Node Package Manager)を使ってインストールします。
これはプロジェクトのあるディレクトリで行ないます。(/var/www/hoge など)
プロジェクトのディレクトリ以下にnode_modulesディレクトリが作成され、
そこにインストールしたモジュールが入っています。

% npm install express
% npm install mongodb
% npm install mongoose

MongoDBのインストール

MongoDBをソースからインストールします。

% sudo wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-1.8.0.tgz
% tar xvfz mongodb-linux-x86_64-1.8.0.tgz
% cd mongodb-linux-x86_64-1.8.0
% mv ./bin/* /usr/local/bin/

プロジェクトディレクトリに移動し、MongoDBを起動します。

% mkdir db
% mongod --dbpath ~/db/ --logpath ~/db/db.log

nodeでプログラムを動かす

サンプルプログラムとして、app.js, user.jsを作成し、nodeで起動します。

% node app.js
// app.js
var express = require("express");
var app = express();
var User = require('./user');
 
app.configure(function(){
    app.use(express.methodOverride());
    app.use(app.router);
});
 
app.configure('development', function(){
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
 
app.configure('production', function(){
    app.use(express.errorHandler());
});
 
app.get('/', function(req, res){
    // インスタンス作成
    var u = new User();
    // データセット
    u.name = 'hoge';
    u.age = '49';
    // 保存 
    u.save();
    console.log("test");
    // 読み出し & ブラウザへデータ送信
    User.find({}, function(err, items){
      // find()の結果をブラウザに出力
      res.send(JSON.stringify(items));
    });
});
 
console.log('run server. port 3000.');
app.listen(3000);
//user.js
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost:27017/test');
 
function validator(v) {
  return v.length > 0;
}
 
var User = new mongoose.Schema({
    name   : { type: String, validate: [validator, "Empty Error"] },
    age    : { type: String, validate: [validator, "Empty Error"] },
    created: { type: Date, default: Date.now }
});
 
module.exports = db.model('user', User);

ポート3000でアクセスするとひたすらMongoDBにデータを格納していくプログラムです。
EC2のSecurity GroupsでTCPポート3000を開放するのを忘れずに。

参考