地理空間情報Webアプリの開発(1)

この記事は1年以上前に書かれました。
内容が古くなっている可能性がありますのでご注意下さい。


地理空間情報を活用したモバイル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が自動的に再起動してくれます。

地理空間情報Webアプリの開発 1234