はじめに
前回までで、Node.jsによる簡単なWebアプリケーションが一通り完成しました。今回はこの構築したアプリケーションを、クラウドベースのアプリケーションホスティングサービスであるHeroku上で、動かしてみたいと思います。HerokuはNode.js以外にもJava, Ruby, Pythonなどのアプリケーションをデプロイすることができます。
Herokuのセットアップ
まず、Herokuのサイトから、「Sign up」ボタンよりアカウントを登録してください。
さらに、heroku toolbeltというHeroku用コマンドラインツールや開発およびデプロイに使うアプリケーション一式が提供されています。こちらを各々の環境に合わせてインストールします。
インストールが終わったら、コマンドラインからherokuに対する認証処理を行っておきましょう。
この一連の処理で、herokuにアクセスするためのSSH公開鍵の設定まで行われます。
MongoDB用サービスMongoHQを利用
Herokuは様々PasSサービスをアドオンとして利用できます。Herokuが標準で提供するデータベースはPostgreSQLですが、MongoDBもそのアドオンサービスを利用して使うことができます。執筆時点で提供されているMongoDBのサービスは、MongoHQとMongoLabになります。今回はMongoHQを使ってみます。
アドオンの追加は、コマンドベースでもブラウザからでも行えます。ただ、無料サービスのみの利用であってもクレジットカード情報の登録が必須となっています。ブラウザから「My Account」ページにアクセスして、「Billing Info」の [Verify] ボタンから情報を入力しておきます。
MongoDBは前回の記事でも触れましたが、データベースやコレクションを必要になった時点で自動作成するため、一般的なDBMSのように予めスキーマ作成などの準備が要りません。そのため非常に簡単に利用することができます。
Heroku+MongoHQ用の修正
前回までに作成したアプリfirstappをHerokuにデプロイするために若干修正を加えます。
まずMongoHQの接続先は、Herokuの実行環境で提供される環境変数MONGOHQ_URLから設定します。そのためmodel.jsの先頭を下記のとおり修正します。
ちなみにMongoLabの場合は接続先URLをprocess.env.MONGOLAB_URIで取得できます。
続いて、Node.jsで起動するHTTPサーバのポートを修正します。3000番で固定していましたが、こちらも環境変数PORTの値を指定する必要があります。app.jsを下記のとおり修正します。
さらに使用するNode.jsやnpmのバージョンをpackage.jsonを使って指定します。expressによるcreate時にテンプレートからpackage.jsonは作成されており、依存モジュールの設定は入っています。
Herokuではアプリケーションプロセスの管理をForemanによって行います。そのためにアプリケーションの起動に関して、Procfileというファイルに定義します。
上記の内容で、アプリのルートディレクトリの直下にProcfileを作成します。
Herokuにデプロイ
Herokuへのデプロイは、アプリケーションごとに用意されるGitリポジトリにコミットすることで行います。
まずアプリのルートディレクトリにおいて、Gitのローカルリポジトリを作成します。そしてルートディレクトリ以下のファイルを、全て追加およびコミットします。
Herokuに新しいアプリケーションを作成します。自動的にそのリポジトリがローカルに登録されます。
さらにMongoHQのFREE版を追加します。ブラウザの「My Apps」から当該アプリの詳細ページに進んでそこから追加することもできます。前述のとおり無料であってもクレジットカード情報の登録が必要です。
最後にherokuリポジトリにプッシュします。
以上でHerokuのNode.js環境にアプリケーションがデプロイされ、npmによって依存モジュールがインストールされます。これらは、先ほどのpackage.jsonに従ったバージョンが使われます。
Herokuでアプリケーションを起動
Web dyno(dynoとは、Herokuにおけるアプリケーションインスタンスの単位です。)を使って、Webアプリケーションを起動します。
1アカウントに付き、1 dynoまでは無料になっています。またWebとは別にバックグランド処理を行うためのWorkerというdynoも存在します。
「heroku create」時に出力されたURL(<アプリケーション名>.herokuapp.com)にブラウザからアクセスすると、動作確認できます。
アプリケーションのプロセスログは
で確認することができます。
停止したいときは、下記のように「heroku ps:stop」を実行します。
最後に
今回は、有名なクラウドホスティングサービスのHeroku上に、Node.jsアプリをデプロイしてみました。とてもシンプルで使い勝手の良いPasSだと思います。ただGitなどの最新技術の知識が一通りないと、なかなか目的までに辿り着くのが大変かもしれませんね。次回は、別のクラウドサービスとNode.jsの連携を試してみたいと思います。