moCloudでProcfileを使ってNode.jsアプリを動かす

どうも、Mobingi吉田真吾@yoshidashingo)です。

本日、moCloudにHerokuのProcfileを使ってアプリケーションをデプロイできる公式イメージを用意しました。

ProcfileでNodeアプリをデプロイする手順

1. 実行環境(アプリケーション)を準備する

f:id:yoshidashingo:20160106190230p:plain

  • 1-1. 左ペインの アプリケーションの作成 を押下します
  • 1-2. アプリケーション情報を以下の例のように設定します
    • アプリケーション名 Procfile-demo
    • ドメイン名 procfiledemo.mobingicloud.com
    • リージョン Tokyo
    • インスタンスタイプ タイプ1サーバー ※とりいそぎお試しであれば「無料お試し版」を選択してください
    • 自動スケール機能 今回はmin,maxともに1台 ※CPUの5分間の平均ロードアベレージが80%でスケールアウト、20%でスケールインします
  • 1-3. イメージ設定で ビルド済みイメージ から Procfile Apps を選択します
  • 1-4. 追加の設定でSSHの公開鍵認証に使う鍵の設定ができます。デバッグ以外では不要でしょう。
  • 1-5. アプリケーションの作成 を押下してイメージをデプロイしましょう

2. ソースコード(on GitHub)を準備する

以下で作成する package.json Procfile index.js をリポジトリ直下に格納します。

  • 2-1. $ npm init してnpmの package.json を準備します
  • 2-2. $ npm install express --save してWebサーバーのパッケージを package.json に追記しておきます
{
  "name": "mocloud-procfile-demo",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/yoshidashingo/mocloud-procfile-demo.git"
  },
  "author": "Shingo Yoshida",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/yoshidashingo/mocloud-procfile-demo/issues"
  },
  "homepage": "https://github.com/yoshidashingo/mocloud-procfile-demo#readme",
  "dependencies": {
    "express": "^4.13.3"
  }
}
  • 2-2. Procfile を準備します
web: node index
  • 2-3. index.js を準備します
var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var server = app.listen(process.env.PORT, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});

一点注記ですが、アプリケーションのリスニングポートは上記のindex.jsのように process.env.PORT で環境変数から受け取った値を使ってください。

内部的な動作は、外部からHTTP接続するポートは常に「80番」で、それを内部的にDockerのポートマッピング機能で「8080」などにマッピングしています。通常は8080なのですが、これは将来変更になる可能性もあります。HerokuのHTTP Routingと似てますが、Herokuと違い、moCloudでは内外のポート番号が異なることに注意です。

で、できたのが以下のリポジトリのとおり

github.com

3. 実行環境とリポジトリを接続してアプリをデプロイする

f:id:yoshidashingo:20160106194928p:plain

  • アプリケーションの「コード」タブで以下のように入力します
    • GitHubを選択
    • (今回は)Publicなリポジトリを選択して
    • リストから該当のリポジトリを選択して(今回は yoshidashingo/mocloud-procfile-demo)
    • リリースするブランチを選択して(今回は master ブランチ)
    • 該当ブランチにpushされたらBlue/GreenデプロイするチェックをONにして
    • 「接続する」を押下します
  • アプリケーションの「ログ」タブで「インスタンスID」のリストから「Startup」を選択すると、デプロイされる状況が確認できます。

4. デプロイされたアプリを確認する

ドメイン名で指定したURL(今回は procfiledemo.mobingicloud.com )にアクセスしてみましょう

f:id:yoshidashingo:20160106200602p:plain

正しく表示されましたね

まとめ

  • moCloudでProcfileを使えば、Node.jsに限らず、さまざまなアプリケーションが自由にデプロイできます。

その他

  • DBオプションも用意してます(がプライス決めの関係で全ユーザーにデプロイしてません)。興味がある人は言ってください。
  • CDNオプションやバルクメールオプションなどもすぐに準備しますので興味がある人は言ってくださいね。