8/22
node.js を始めたい!のでローカル環境を作る8つのステップ
最近よく聞く node.js というしろもの。
Node.js を使えば沢山のユーザーの動きをリアルタイムに表現できる
マルチユーザーコンテンツが出来そうとか
coffee-script on node.js を使えば短くて綺麗に OOP できる js が書けるんでしょうだとか
夢が広がりんぐな情報が沢山出てきてなんだか楽しそうですよね。
とはいえサーバーサイドはやったことがないし、いきなり VPS を借りたりするのは…
と思ってしりごみされている方も多いのでは。
それなら、いきなり VPS を借りてゴニョゴニョする前に
サーバーサイドの勉強がてら一度ローカルに仮想環境を作ってみよう!
ということで Mac VMWare Fusion に Node.js な環境を整えてみたいと思います。
Step1. CentOS のインストール
OS はさくらの VPS でデフォルトになっている CentOS をチョイス。
CentOS じゃなければ動かないということはないです。僕自身 Ubuntu のほうが好きだったりします。
公式から iso ファイルをダウンロードしてきて iso からインストールします。
VMWare Fusion を起動し、新規 OS インストールの画面を開いて
[ディスクを使用せずに続行] をクリックします。
どのメディアを使って OS をインストールするのか尋ねられるので
「オペレーティングシステムのインストールディスク イメージ ファイルを使用:」を選択し
ダウンロードしてきた iso ファイルを選択したら [続ける] を押して次の画面へ行きます。
OS の種類を尋ねられるので、 [Linux] [CentOS] を選択し、次の画面へ。
簡易インストールを使用するかどうか尋ねられますが
インストールする時点で IP を固定してしまいたいので OS のインストールウィザードを立ち上げるために
簡易インストールのチェックは外し、 [続ける] を押して次の画面へ行ってください。
ここで [終了] を押せばインストールが始まりますが、ネットワークデバイスの設定を変更したいので
[設定のカスタマイズ] ボタンを押して、先に設定をいじります。
ボタンを押すと、VM イメージを何処に保存するか尋ねられます。適当に保存して設定画面へ移ってください。
設定画面右列、「ネットワーク」の項目をクリックするとネットワークデバイスの設定画面が開きます。
デフォルトだと、「Mac のネットワーク接続を共有」になっていると思いますが
「物理ネットワークに直接接続」変更してください。
変更したら設定画面を閉じ仮想マシンのライブラリから今追加した VM イメージをクリックして起動すればインストールが始まります。
簡易インストールのチェックを外してインストールを開始すると、 CentOS のインストールウィザードが立ち上がり、お前何語話すんじゃだとか、パーティションどうするんだなど聞かれますが 適当に答えておきます。
途中、ネットワークデバイスの設定画面になるので [編集] ボタンを押し、ネットワークの設定を行います。
DHCP から手動入力に切り替え
適当に空いてそうな IP アドレスを振ってあげます。
IP アドレスの指定が終わったらあとはタイムゾーンの設定だとか リポジトリ追加を聞かれたりしますがとりあえずそのあたりも適当に設定してインストールを完了させましょう。
インストールが完了したら yum update の実行など、CentOS の初期設定を行います。
具体的にどんなことをすればいいかは今回の趣旨とは違うため割愛します。
以下のページなどを参考にしてみてください。
また、 Node.js や、その周辺モジュールのダウンロードをするために git が必要になるので
上記サイトなどを参考に rpmforge というリポジトリを yum に追加して git をインストールしておいて下さい。
Step2. nginx のインストール
node.js にはリアルタイムなやりとり部分をひたすら頑張ってもらいたいので、 画像や静的な HTML を捌く係りとして nginx をインストールします。
nginx のインストールに関しては、以下の記事がわかりやすいので参考にしてみてください。
というかほぼ書いてある手順そのままでいけます。
CentOS 5にNginxをインストールする - へびにっき
nginx がわりと頻繁にバージョンが上がっているのでソースからインストールします。
インストールする前に必要なモジュールをインストールします。
sudo yum install gcc gcc-c++ open-devel pcre-devel zlib-devel
インストールを開始する前に、nginx を動かすユーザーを作成しておきます。
useradd -s /sbin/nologin nginx
上で紹介している記事にも書いてありますが nginx はコンパイル時にしかモジュールのインストールが出来ないらしいので、
何を入れたのか後からわかるようにシェルスクリプトを書いて、それを実行してインストールします。
一応 Flasher 向けブログということで、上記のブログで公開されてるスクリプトに
flv のモジュールとかを追加したり、ちょいちょい書き換えたシェルスクリプトを書いておきました。
nginx-1.0.5 というフォルダと同じ階層に nginx-install.sh を置き、実行すれば make までされます。
正常に make されたら make install でインストールを実行します。
試しに起動してみて CentOS 内のブラウザで http://localhost を叩き
「Welcome to nginx !」と表示されていれば nginx のインストールは完了です。
さて一気に説明しましたが、ここまで叩いたコマンドをつらつら並べてみるとこんな感じです。
めんどくさい人は一行ずつコピペでどうぞ。
$ wget http://nginx.org/download/nginx-1.0.5.tar.gz
$ tar xzvf nginx-1.0.5
$ su -
# ./nginx-install.sh
# cd nginx-1.0.5
# make install
# mkdir /var/tmp/nginx
# mkdri /var/tmp/nginx/{proxy,client, fcgi}
# ln -s /usr/local/nginx-1.0.5 /usr/local/nginx
# /usr/local/nginx/sbin/nginx
# /usr/local/nginx/sbin/nginx -s quit
無事動くのを確認したら、サーバーの起動と同時に立ち上がるよう
サービスとして登録しましょう。
サービスとして登録するために以下を参考に起動ファイルを作ります。
22行目で nginx の実行ファイルを指定していますがこれを今回の環境用に書き換えます。
nginx="/usr/local/nginx/sbin/nginx"
書き終わったらパーミッションを書き換え、
サービスとして登録します。
# chmod 755 /etc/init.d/nginx # chkconfig --add nginx # chkconfig httpd off # chkconfig nginx on
以上で少し長くなってしまいましたが nginx のインストールは終わりです。
振り分けだとか、設定をいじる前に先にインストールすべきものを全部インストールしてしまいましょう。
3.node.js のインストール
さて、ようやくお待ちかね node.js のインストールに進みたいと思います。
まず、 github のリポジトリから最新のソースを落としてきます。
適当なディレクトリに移動して、git clone を実行します。
git clone git://github.com/joyent/node.git
クローンしてきたらインストールを実行します。
cd node ./configure make sudo make install
エラーがでなければ無事インストール終了です。
Step4. npm とモジュールのインストール
npm のインストール自体は簡単です。
つらつらっとコマンドを叩くもといコピペすれば終わります。
curl http://npmjs.org/install.sh | sh
続いてとりあえず基本的なモジュールを入れておきます。
npm install socket.io npm install express npm install ejs
あとは自分の好みややりたいこと、興味次第で MySQL や MongoDB、Coffee-Script などを入れておくといよいでしょう。
以上でインストール作業は終了です。
Step5.サーバー側の設定
インストールも終わったので設定をして動くようにしましょう。
といってもガチで運用な設定ではなく、とにかく node.js を実行して Hello,World を表示させるところを目指します。
まずは Hello,World を表示させるファイルを置くディレクトリを作成します。
# mkdir /var/www/html/node-test # chmod 755 /var/www/html/node-test
続いて、 nginx の設定を行います。
本来であればホストごとに設定ファイルを用意したほうが運用しやすいのですが
今回は Hello,World の表示が目標なので一つの設定ファイルにまとめてしまいます。
vim などで /etc/nignx/nginx.conf を、以下のように編集してください。
user nginx nginx;
#CPU の数。 VM マシンを作るとき、指定した CPU の数を書いてください。
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
server{
listen 80;
#ルートディレクトリの指定。
root /var/www/html/node-test;
location / {
server_tokens off;
add_header Server "Wheat (node.JS)";
proxy_pass http://127.0.0.1:1337;
}
}
}
設定ファイルを書いたら一度 nginx を再起動します。
ターミナルから以下のコマンドを打ち込んで、nginx の再起動を実行してください。
/etc/init.d/nginx restart
と打ち込んでください。
エラーがでなければ OK です。
もし、設定ファイルの編集ミスがあれば、何行目が間違っているとエラーが出力されるので
該当箇所を修正してください。
Step.6 node.js の設定
続いて、先ほど作成したディレクトリに Hello,World を表示するシンプルなスクリプトを書きましょう。
と言っても node.js のサイトに載っているサンプルスクリプトをそのまま使います。
var http = require('http');http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');
そしてそのまま、node.js のサイトと同じく、example.js を実行します。
% node /var/www/html/node-test/example.js Server running at http://127.0.0.1:1337/
node.js が起動した状態で、CentOS 内のブラウザから http://localhost にアクセスしてみてください。
すると Hello,World と表示されているはずです。
しかし localhost だけだと、仮にサイトが増えた時困るのでドメインでアクセス出来るようにします。
Step.7 hosts の設定
先ほど nginx の設定ファイルを書く時、 server_name という項目に「適当なテスト用ドメインを設定してください」
と書いていたかと思います。
その時設定したドメインを hosts ファイルというものに書いてあげることで、ドメインを使ってテスト環境にアクセスできるようになります。
sudo vim /etc/hosts とターミナルから打ち込んで管理者権限で hosts ファイルを開きます。
hosts ファイルを開いたら一番下に
127.0.0.1 設定したドメイン
を追記して保存します。
保存したらブラウザから設定したドメインを打ち込んでみてください。
localhost を打ち込んだ時と同じように、 Hello,World が出力されていれば OK です。
では、仕上げとして Mac のブラウザからも Hello,World を表示できるようにしましょう。
Step8.Mac 側の設定
1~7 まで、ここまで全ての Step をこなしてきたあなたなら最後のこの Step は楽勝なはずです!
やることは至って単純。 CentOS 内で hosts ファイルを編集してドメインを設定したように、
Mac 側の hosts ファイルを編集し、VM の CentOS 内の node.js を見れるようにするだけです。
Mac のターミナルから vim で /etc/hosts を開き、以下のように編集します。
インストール時に固定した CentOS の IP CentOS 内で設定したドメイン
編集したら保存して vim を終了してください。
そしてブラウザに設定したドメインを入力して開いてみてください。
すると先ほど CentOS で確認した時と同じように、画面には Hello,World が表示されているはずです。
おめでとうございます!そして、おめでとうございます!
これで node.js を動かす第一歩を踏み出したわけです。
さて、大分長くなってしまいましたが以上8つの Step をこなすことで node.js を勉強して
Web サービスを作る準備が整いました。
nginx の設定などは今回はごくごく簡単な部分にしか触れていません。
実際にサービスを運用するのであれば
node.js を使ってやりたいことにあわせてモジュールを追加したり、
PHP や Python など、他のサーバーサイド言語と連携させるなどするとよいでしょう。
VM 環境で十分検証できたなら、さくらの VPS などを契約し、同じように設定していくだけです。
サービス公開後も、リニューアルしたい、機能強化したいという時、
モジュールや node.js、 nginx などのバージョンアップの際
一度テストしてから本番サーバーにアップできるので
作業中公開しているものに影響を及ぼすことなくテストすることが出来ます。
最近だんだんと、国内外問わず node.js (WebSocket)を使ったコンテンツ事例が増えてきました。
twitter よりも更にリアルタイムなこの技術。
ただの流行りで終わるのか、スタンダードとなりうるのかはまだわかりませんが
さくらの VPS など、個人でも容易に契約できる専用サーバーが増えたことで
興味半分で遊ぶ事もできるようになりました。
明日仕事で使うかどうかはわかりませんが、触れておいて損はない技術であり、
遊び半分のスケッチで、アイディアのネタを広げる意味としてデモいいのではないかなぁと思っています。
