内容が古くなっている可能性がありますのでご注意下さい。
地理空間情報を活用したモバイルWebアプリケーションを開発します。モバイル端末側はJQuery MobileとOpenLayers、サーバー側はNode.jsとPostGISが中心的な技術です。今回はまず、サーバー側の環境構築の第1回として、マイクロソフトのクラウドプラットフォームAzure上に、Node.jsによるサーバーサイドJavaScriptの実行環境を構築します。
CentOSの仮想マシンの作成とHTTP/FTPサーバのインストールまでは、こちらの記事を参照して下さい。
次に、yumリポジトリを追加してからyumコマンドでNode.jsをインストールします。
# rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install nodejs npm --enablerepo=epel
Node.jsと一緒にインストールしているnpmは、Node.jsのパッケージ管理ツールです。
早速npmを使用して、Node.jsアプリケーションのプロセス管理ツールpm2をインストールしておきます。
# npm install -g pm2
Apache HTTPサーバがポート80を使用していますので、Node.jsアプリケーションはポート8080を使用することにします。そこで、mod_proxyでパス /api へのリクエストをポート8080に転送します。
/etc/httpd/conf.d/mod_proxy.confに
ProxyPass /api http://localhost:8080 retry=5 ProxyPassReverse /api http://localhost:8080
と記述し、
# service httpd restart
Apacheを再起動します。また、
# setenforce 0
でSELinuxを無効化し、/etc/selinux/configファイルでも
SELINUX=disabled
無効化しておきます。
以上でNode.jsアプリケーションの動作環境ができましたので、以下の簡単なプログラム(hello.js)で動作確認します。
var http = require('http'); var server = http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('Hello World\n'); res.end(); }); server.listen(8080);
ポート8080でリクエストを待ち、「Hello World」と返すだけのアプリケーションです。以下のコマンドで起動します。
# node hello.js
リバースプロキシを設定したので、ポート番号8080を付けた
http://■■■■■.cloudapp.net:8080
ではなく、パス /api を付けた
http://■■■■■.cloudapp.net/api
にブラウザからリクエストします。「Hello World」と返ってくると思います。
nodeコマンドでNode.jsアプリケーションを起動すると、アプリケーションで障害が発生した場合、nodeコマンドのプロセスも一緒に終了してしまいます。それでは都合が悪いので、プロセス管理ツールpm2の出番です。以下のコマンド
# pm2 start hello.js
でpm2からアプリケーションを起動すると、万が一アプリケーションで障害が発生しても、終了したアプリケーションをpm2が自動的に再起動してくれます。