さくらのVPS(CentOS)にNode.js環境を構築して遊ぶ

公開

3月末にプランリニューアルが行われてパワーアップした「さくらのVPS」を4月初めに契約。GW前半で計画していた作業が終了したこともあり、以前より興味を持っていたNode.jsをVPS上で環境構築して遊んでみることにしました。

インストールの記録

ソースから? nave or nvm?

先人の方が記録されているNode.jsのインストール方法を見ると、ソースからインストールされている方とnaveやnvmなどのバージョン管理システムを利用したインストール方法があるようでした。どうしようか迷いましたが、Node.jsは頻繁にバージョンアップが行われているようなので、バージョンアップが簡単なnaveやnvmを使うことにしました。そしてnaveかnvmか? ですが、以前職場で同時期に在籍されていた@summerwindさんの「Node.jsの管理はnvmで」を読ませて頂き、nvmを使うことに決めました。

インストール方法

インストールは、@summerwindさんが書かれている数行のコマンドを実行するだけでしたので、そちらを参照して頂ければと。

補足として、nvm install v0.6.17とした際、下記のようにエラーが発生しました。

Checking for library dl : not found 
Checking for openssl : not found 
Checking for function SSL_library_init : not found 
Checking for header openssl/crypto.h : not found

これはopenssl-develをインストールすればOKです。

sudo yum install openssl-devel

Hello Worldの実行

インストール後はお決まりのプログラム、「Hello World」をブラウザに出力する書いてみました。コードは公式サイトにもありますが、以下のようなコードです(listenするIP・ポートなどを変更しました)。

var http = require('http');
http.createServer(function (req, res) {
 res.writeHead(200, {'Content-Type': 'text/plain'});
 res.end('Hello World\n');
}).listen(8080, '127.0.0.1');
console.log('Server running at http://sub.yourdomain.net/');

上記コードを実行するにあたり課題になったのが「listenするポートの指定」でした。VPSのパケットフィルタリングで余計なポートは開けたくないが、80番ポートはApacheがlistenしている...。Apacheの設定で何とかならないものかと探ったところ、livedoor Tech Blogに「mod_rewrite を利用したリバースプロキシ環境の作り方」があり、ProxyPassディレクティブを使えば解決することが分かりました。本格稼働ではなく研究開発用なので、ひとまずこの方法を採用することにします。

リバースプロキシの設定

/etc/httpd/conf.d/vhosts.confに次のようにバーチャルホストの設定を行います。

<VirtualHost *:80>
	ServerName sub.yourdomain.net
	DocumentRoot "/var/www/vhosts/yourdomain/subdomains/sub/html"
	ProxyPass /nodejs/ http://localhost:8080/
	ProxyPassReverse /nodejs/ http://localhost:8080/
</VirtualHost>
  • 追記(2012年5月8日):/nodejsの後ろにスラッシュを追加しました。

また、/etc/httpd/conf/httpd.confで次のモジュールを読み込むようにします。

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

設定完了後、Apacheを再起動します。

この設定により、http://sub.yourdomain.net/nodejs/にアクセスが発生した際、127.0.0.1:8080でlistenしているNode.jsのプログラムがリクエストを受けることができるようになりました。

実行結果

無事Hello Worldが表示されました。Firefox派ですが、Chromeでキャプチャを...。
Node.jsでHello Worldを実行した結果の画面

今後の予定

gihyo.jpにて「基礎から学ぶNode.js」の連載が先月より始まっているので、これらも参考にしながらNode.jsを学んでいきたいと思っています。WEB+DB PRESS Vol.68も購入し読んでいます。