2015年8月26日水曜日

さくらインターネットのスタンダードで、MongoDBをインストールする方法(ただしCassandraの方が安全で素早い(沢山のベンチマーク結果)です。)

引用元(勉強の為に引用させて頂きました。):
http://uguisu.skr.jp/Windows/node.html


[root権限なしでNode.js、MongoDBをインストールする方法]


さくらインターネットなどroot権限なしのレンタルサーバーで node.jsをインストールする方法を紹介します。
root権限なしのFreeBSD環境では「libexecinfo」というライブラリのインストールで苦労している人が多いと思います。
「64bit」の環境に「libexecinfo」のソースコードに修正が必要でした。パッチも合わせて公開しています。
スポンサードリンク

「.cshrc」 に次のように記載する

setenv PATH ${PATH}:${HOME}/local/bin
setenv NODE_PATH ${HOME}/local/lib/node_modules
setenv NODE_MODULES ${HOME}/local/bin/node_modules
setenv LD_LIBRARY_PATH
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/home/ukyo/local/lib
その後、次のコマンドにより設定を反映させます。
$ source ~/.cshrc
「LD_LIBRARY_PATH」を正しく設定しないと次のようなエラーが出ます。
$ source ~/.cshrc
LD_LIBRARY_PATH: Undefined variable.
$ source ~/.cshrc
Bad : modifier in $ (/).

libexecinfo をインストールする

「libexecinfo」とは、バックトレースのためのライブラリです。
node.js 、mongoDB のビルドに libexecinfo が必要になるため、最初にインストールします。
$ wget ftp://ftp.freebsd.org/pub/FreeBSD/distfiles/libexecinfo-1.1.tar.bz2
$ tar yxvf libexecinfo-1.1.tar.bz2
$ cd libexecinfo-1.1
$ patch -p0 < libexecinfo.patch ※1
$ setenv SRCCONF ~/usr/local/etc/src.conf
$ make
$ cp libexecinfo.* ~/local/lib/
$ cp execinfo.h ~/local/include/

※1 パッチを当てているのは、次のようなエラーが発生するためです。

パッチは、ここに置いておきます。
execinfo.c: In function 'backtrace_symbols':
execinfo.c:81: error: lvalue required as left operand of assignment
81行目を次のように修正するだけで対応も可能です([感謝] 中里様 2014/03/06追記)
-    (char **)cp = &(rval[size]);
+    cp = (char *)&(rval[size]);
また、「make install」はroot権限がなく使えないので、手動でコピーしています。

Node.js をroot権限なしでインストールする

http://nodejs.org/download/」からNode.jsの最新版を入手します。
$ tar zxvf node-v0.10.25.tar.gz
$ cd node-v0.10.25
$ ./v8/src/platform-freebsd.cc を修正 ※1
$ ./deps/v8/tools/gyp/v8.gyp を修正 ※2
$ ./configure --prefix=$HOME/local
$ gmake
$ gmake install
gmake install 終了後に versionを確認してみましょう。
$ node --version
v0.10.25

※2 先ほどの「execinfo」を参照・リンクするために「-I」「-L」オプションを追加します。

1
2
3
4
5
6
7
8
9
10
11
             ['OS=="freebsd"', {
+                'include_dirs+': [
+                  '/home/アカウント名/local/include'
+                ],
                 'link_settings': {
                   'libraries': [
-                    '-L/usr/local/lib -lexecinfo',
+                    '-L/usr/local/lib -L${HOME}/local/lib -lexecinfo',
                 ]},
                 'sources': [
                   '../../src/platform-freebsd.cc',
これは gyp のドキュメントで例を見つけられます。([感謝] 中里様 2014/03/06追記)
スポンサードリンク

mongoDB

SConsは、Pythonによって実装されたソフトウェア構築ツール(Makeの代替ビルドツール )です。
他のソフトウェアに組み込むためのモジュールをつくる機能を持っています。
MongoDBではSconsを利用するので、まずはSconsをインストールします。
ファイルのダウンロード先
次の手順で構築します。
$ tar zxvf scons-2.3.0.tar.gz
$ cd scons-2.3.0
$ python setup.py install --prefix=$HOME/local/
続いて mongodb をインストールします。
$ tar zxvf mongodb-src-r2.4.9.tar.gz
$ cd mongodb-src-r2.4.9
$ scons all --libpath=$HOME/local/lib --cpppath=$HOME/local/include
$ scons --prefix=$HOME/local/ install --libpath=$HOME/local/lib --cpppath=$HOME/local/include
バイナリが存在することを確認しましょう。
$ ls ~/local/bin/mo*
mongo           mongodump       mongofiles      mongooplog      mongorestore    mongosniff      mongotop
mongod          mongoexport     mongoimport     mongoperf       mongos          mongostat

npmを使ってroot権限なしでモジュールをインストール

npmはパッケージマネージャです。Node.jsをインストールしたら一緒に入っています。
パッケージマネージャーとは、ソフトウェアのインストール、更新、削除を容易に行えるようにするプログラムです。
Rubyには「RubyGem」があり、Pythonには「pip」「easy_install」、Javaには「Maven」があります。
root権限なしで使うために、「~/.npmrc」を作成し次のように記載しましょう。
root =    /home/アカウント名/local/lib/node_modules
binroot = /home/アカウント名/local/bin
manroot = /home/アカウント名/local/share/man

express のインストール方法

node.js が提供するHTTPサーバの機能はプロトコルに沿った低レベルなものになっています。
これらを簡単に定義して実装できるWebアプリケーションフレームワークの代表格が「Express」です。
インストール方法は次のように行います。
$ express -t ejs firstapp
$ cd firstapp
$ npm install express
$ npm install ejs
$ ls node_modules/
ejs     express
$ node app
HTMLテンプレートエンジンはJade、EJSやHaml.jsなどを、CSSテンプレートエンジンはStylusなどを選べます。
共通モジュールとしてインストールしたい場合は「-g」オプションを付けます。
$ npm install -g express
$ npm install -g ejs
$ ls ~/local/lib/node_modules/
ejs  express   npm

socket.io のインストール方法

socket.io を使えば、双方向通信を実現を容易に実現できるようになります。
インストール方法は次のようになります。
$ npm install -g socket.io
$ ls ~/local/bin/node_modules/
socket.io
前述していますが、「.cshrc」 に次のように記載する事を忘れないようにしてください。
setenv PATH ${PATH}:${HOME}/local/bin
setenv NODE_PATH ${HOME}/local/bin/node_modules
setenv NODE_MODULES ${HOME}/local/bin/node_modules

上記手続きをしない場合に発生するエラー

Node.js をインストール時に 「execinfo.h」が存在しないと、gmakeで次のようなエラーが発生します。
../deps/v8/src/platform-freebsd.cc:46:56: warning: execinfo.h: No such file or directory
../deps/v8/src/platform-freebsd.cc:302: error: 'backtrace' was not declared in this scope
../deps/v8/src/platform-freebsd.cc:304: error: 'backtrace_symbols' was not declared in this scope

コメント:
個人的には、MongoDBよりCassandra(NoSQL)を広くお勧めしております。
MongoDBは、まだまだセキュリティに問題が多く、顧客情報を世界中に漏えいしてばらしてしまう可能性が高いです。その点、Cassandraは安全性が高いです。
対応スピードもMongoDBは遅いですが、Cassandraは素早いです。(ベンチマーク等の情報によります。)

■もう二度と、絶対にMongoDBを使うべきじゃない理由

https://fa-works.com/blog/why-you-should-never-ever-ever-use-mongodb

MongoDBが適さないケース
http://d.hatena.ne.jp/hiroppon/20130520/1369017430

0 コメント:

コメントを投稿