IBMのPaaS Bluemixでnode.js+express4のアプリケーションを動かす基本的な方法をまとめました。
前提
- IBM idの登録とBluemixへのサインアップ
- ローカル環境へのCloudFoundry CLIのインストール
- ローカル環境へのnode.js、npm、express、express-generatorのインストール
手順の概要
- アプリケーションの作成
- アプリケーションの修正
- Bluemixへのプッシュ
- 起動確認
アプリケーションの作成
ここでは、単純なexpress4アプリケーションを作成します。ローカル環境では以下のバージョンを使用しています。
- node: 0.10.33
- npm: 1.4.28
- express: 4.9.0
以下のようにして、expressアプリケーションを作成し、ローカルでの動作確認をします。
express nodesample
cd nodesample
npm install
npm start # test from browser: "http://localhost:3000/"
アプリケーションの修正
Bluemixは、node.jsでlistenするポート番号を環境変数VCAP_APP_PORT
で与えますので、該当部分を変更する必要があります。Express4では、bin/wwwを修正します。
*** nodesample.orig/bin/www 2014-11-05 21:18:15.684411184 +0900
--- nodesample/bin/www 2014-11-05 21:19:17.448408741 +0900
***************
*** 2,8 ****
var debug = require('debug')('nodesample');
var app = require('../app');
! app.set('port', process.env.PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
--- 2,8 ----
var debug = require('debug')('nodesample');
var app = require('../app');
! app.set('port', process.env.VCAP_APP_PORT || 3000);
var server = app.listen(app.get('port'), function() {
debug('Express server listening on port ' + server.address().port);
アプリケーションの修正は以上です。
Bluemixへのプッシュ
次にアプリケーションをBluemixにプッシュします。
# Cloud Foundryの対象APIに`bluemix.net`を設定
$ cf api https://api.ng.bluemix.net
# Bluemixにログイン
$ cf login -u <ユーザ名>
# Bluemixにカレントディレクトリ以下のアプリケーションをプッシュ
# アプリケーション名: node-express-sample
# ランタイム(buildpack): sdk-for-nodejs
# メモリ上限: 128M (デフォルトは64M)
$ cf push node-express-sample -m 128M -b sdk-for-nodejs
今回はRDBMSなどのサービスを特に利用せず、"SDK for node.js"のみを使用します。"SDK for node.js"はダッシュボードでは"runtimes"のひとつとして確認できますが、CLIでは、cf marketplace
(利用できるserviceの一覧)ではなくcf buildpacks
(利用できるbuildpackの一覧)に含まれます。Buildpackはcf create-service
を必要とせず、cf push
に-b
オプションで直接指定してプッシュします。(この段落の説明は、今回試した動作に基づいており、Cloud Foundryの詳細な仕様を確認したわけではありませんのでご了承ください)
なお、アプリケーションのメモリですが、デフォルトの64MBではメモリ不足でうまく動作しませんでしたので、メモリを128Mに拡張しています。ここではcf push
のオプションで指定していますが、もちろんmanifest.ymlに記述しても構いません。
起動確認
ブラウザで http://node-express-sample.mybluemix.net/ を開くと、アプリケーションが起動していることを確認することができます。