2011年10月13日

CentOS に Node.js をインストールして forever でデーモン化

ちょっと作業するときに忘れてしまうのでメモ。 さくらインターネットの VPS で適当なユーザーを作成して sudo 権限を与えてから作業。

ちょうど去年くらいの Realtime Web hack-a-thon で Windows でのビルドとかやってたんだなぁ、と振り返ると、 本体だけでなく周辺ライブラリが充実してきたスピードも目を見張るものがある。

Node.js のインストール

基本的な環境の準備

$ cd /usr/local
$ sudo mkdir src/archive
$ sudo chgrp -R wheel src
$ sudo chmod 775 src src/archive/
$ sudo yum -y install openssl-devel

パッケージをダウンロードして展開

$ cd /usr/local/src/archive
$ wget http://nodejs.org/dist/node-v0.4.12.tar.gz
$ cd ..
$ tar -xzvf archive/node-v0.4.12.tar.gz

コンパイルしてインストール

$ cd /usr/local/src/node-v0.4.12
$ ./configure --prefix=/usr/local/nodejs/node-v0.4.12
$ make
$ sudo make install

シンボリックリンクを作成してバージョンを確認

$ cd /usr/local/nodejs
$ sudo ln -s node-v0.4.12 latest
$ /usr/local/nodejs/latest/bin/node -v

npm のインストール

Node のパッケージマネージャーをインストールする。 Python における pip みたいなもの。

パスの調整をすれば、後はドキュメント通り。

$ curl http://npmjs.org/install.sh | sudo PATH=$PATH:/usr/local/nodejs/latest/bin sh

/usr/local/nodejs/latest/binnpm コマンドがインストールされる。

npm は本体に付属してくれても良いんじゃないかな、とは思うけど、 双方の開発がかなり安定するまでは難しいのかも。 とはいえ、curl コマンドが無い Windows 環境用には同梱されて欲しい。

express のインストール

express は Web アプリケーション・フレームワークのこと。 ロガーとか、ミドルウェアが色々と実装されているので便利。

マシンの利用用途にもよるが、モジュールをシステムグローバルにインストールする場合は "-g" オプションを付ける。 /usr/local/nodejs/latest/binexpress コマンドがインストールされる。

$ export PATH=$PATH:/usr/local/nodejs/latest/bin
$ sudo PATH=$PATH:/usr/local/nodejs/latest/bin /usr/local/nodejs/latest/bin/npm install -g express

たとえば、 "http-proxy" というアプリケーションの作成

$ [ -d projects ] || mkdir projects
$ cd projects
$ express http-proxy
$ cd http-proxy
$ npm install -d

開発用サーバーを起動

$ node app.js

環境を切り替えるには NODE_ENV を指定

$ NODE_ENV=production node app.js

forever でデーモン化

プロダクション環境で最適な方法は分かりませんが、この辺の記事が参考になりそう。

forever を使う場合は次のような手順。

npm でシステムグローバルにインストール。

$ sudo PATH=$PATH:/usr/local/nodejs/latest/bin /usr/local/nodejs/latest/bin/npm install -g forever

forever コマンドの start アクションにスクリプトを指定。

$ export PATH=$PATH:/usr/local/nodejs/latest/bin
$ forever start app.js

自前で init.d 用スクリプトなどを書くよりは断然簡単で、 list アクションで稼働アプリケーションを一覧表示できるのも嬉しい。 (ターミナルによっては色付きで表示)

$ forever list
info:   Running action: list
info:   Forever processes running
data:       uid  command script forever pid   logfile                         uptime
data:   [0] XnU4 node    app.js 32290   32291 /home/shigeru/.forever/XnU4.log 0:0:0:17.44

止めるときは stop を使う。

$ forever stop app.js

終わりに

たまには JavaScript を書かないとー、というときに、さくらのVPSは便利。 Amazon の EC2 でも変わらないけど、なんとなく SSH のレスポンスが早い気もする。

「なぜ Node.js を使うのか?」という点では Facebook の中の人の意見に賛成だけど、 そもそも JavaScript をバリバリ書ける人は多いのか、という点が大きな疑問だったり。。。

じゃ、Dart を使えば解決?かというと、今は微妙だと感じる。 移行できる資産が存在しないのもネック。

  • Dart (STRUCTURED WEB PROGRAMMING) - dartlang.org

どんなプログラミング言語を使うにしても、プロジェクトのライフサイクルを意識して開発できないと厳しい感じ。 それを支援するツールも必要で、パッケージ管理やテスト、ドキュメンテーションは必須。 誰かが開発するとは思うけど、どれだけ熱意のある人が集まるかでスタートダッシュが変わるので、 単純に構文がイケテル、とかはそこまで重要でもない気がする。 (Google にはソフトウェアエンジニアが多いので問題にはならないかもしれないが)

ちょっと関係ないけど、「コンピュータの名著・古典100冊」の一節が簡潔で分かりやすい。

日本語の場合でも、文法を知ることと文章を書くこととの間には大きなギャップがある。 プログラミングも同じである。 文法を知ることとよいプログラムを書くことの間には大きなギャップがある。

名著や古典を紹介する本だけど、これはこれで良い本。 面接で何を聞くか?というトピックは紛糾しやすいけど、この中の10冊以上をきちんと読んでいる人ならハズレない気がする。 もちろん Node.js にはノータッチだけども。

コメントを投稿