「Cloud Foundry 百日行」第71日目、本日のアプリは Pumpkin 。これは Web サイトのコメントシステム。オンラインで Web サイトを紹介し、それに対して他人がコメントし、また評価する、というものです。
基本情報
-
ソースコード
Pumpkin
手順の概要は以下の通りです。
- 1) ソースコードの取得
- 2) アプリのデプロイ
- 3) 動作確認
1. ソースコードの取得
まずはソースコードを取得します。
~$ git clone https://github.com/fananta/Pumpkin
~$ cd Pumpkin/
~/Pumpkin$ ls
backend.js index.html jquery-1.9.0.min.js lightpaperfibers.png README.md test_URLs.txt
2. アプリのデプロイ
参考資料の Pumpkin – ユーザモデレーション型のオープンなコメントシステム では、「Pumpkin は node 製で、backend.js を立ち上げれば使えます」とあります。
その通りにデプロイしてみましょう。
~/Pumpkin$ cf push pump -b nodejs_buildpack -c 'node backend.js'
Creating app pumpkin in org ueno / space test1 as ueno...
OK
Creating route pumpkin.10.244.0.34.xip.io...
OK
Binding pumpkin.10.244.0.34.xip.io to pumpkin...
OK
Uploading pumpkin...
Uploading app files from: /home/ueno/Pumpkin
Uploading 24.4K, 4 files
Done uploading
OK
Starting app pumpkin in org ueno / space test1 as ueno...
-----> Downloaded app package (172K)
-------> Buildpack version 1.3.1
Node.js Buildpack v64
-----> Reading application state
package.json...
build directory...
cache directory...
environment variables...
Node engine range: unspecified
Npm engine: unspecified
Start mechanism: none
node_modules source: none
node_modules cached: false
NPM_CONFIG_PRODUCTION=true
NODE_MODULES_CACHE=true
Downloading and installing node 0.12.2...
Using default npm version: 2.7.4
-----> Building dependencies
Skipping dependencies (no source for node_modules)
-----> Checking startup method
None found
cat: /tmp/staged/app/Procfile: No such file or directory
-----> Build failed
WARNING: Node version not specified in package.json
WARNING: No package.json found
WARNING: No Procfile, package.json start script, or server.js file found
-----> Finalizing build
Creating runtime environment
Cleaning previous cache
Caching results for future builds
-----> Build succeeded!
/tmp/staged/app
└── (empty)
WARNING: Node version not specified in package.json
WARNING: No package.json found
WARNING: No Procfile, package.json start script, or server.js file found
-----> Uploading droplet (9.3M)
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 down
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 down
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 starting
0 of 1 instances running, 1 down
0 of 1 instances running, 1 failing
FAILED
Start unsuccessful
TIP: use 'cf logs pumpkin --recent' for more information
アプリは起動しませんでした。
ログには、
2015-10-01T16:26:12.05+0900 [App/0] OUT Server running at http://127.0.0.1:30925/
2015-10-01T16:27:12.02+0900 [DEA/0] ERR Instance (index 0) failed to start accepting connections
と出ています。
サーバに接続できていない可能性がありますね。
デプロイ時に実行させる backend.js
の中身を見てみましょう。
:
/* optionally set port using first command line arg, default=30925 */
var args = process.argv.splice(2);
var port = parseInt(args[0]);
if (isNaN(port)) port = 30925;
:
上記によると、 backend.js
は第1引数で、listen するポートの情報を与えることになっているが、その指定が無いと、デフォルトのポート番号 30925
で処理されるようです。
それがエラーになっているので、ポートを動的に処理させる必要がありそうです。
そのため、PORT
環境変数を使って、 backend.js
の引数で指定してデプロイしてみます。
~/Pumpkin$ cf push pumpkin -b nodejs_buildpack -c 'node backend.js $PORT'
:
-----> Uploading droplet (9.3M)
1 of 1 instances running
App started
OK
App pumpkin was started using this command `node backend.js $PORT`
Showing health and status for app pumpkin in org ueno / space test1 as ueno...
OK
requested state: started
instances: 1/1
usage: 256M x 1 instances
urls: pumpkin.10.244.0.34.xip.io
last uploaded: Thu Oct 1 09:14:16 UTC 2015
stack: cflinuxfs2
buildpack: nodejs_buildpack
state since cpu memory disk details
#0 running 2015-10-01 06:14:29 PM 0.0% 18.7M of 256M 0 of 1G
アプリ起動しました。
3. 動作確認
ブラウザからアプリにアクセスします。
Text
と Link
に入力して Submit
。
反映されました。
Web サイトを紹介して、その評価を求めます。
add reply
をクリック、コメント入力すると、それも反映されます。
その表示されたコメントの左側に ▲
印が付きますが、これは「いいね」ボタンのように、クリックすると、1票を投じることができるボタンになっています。
下記は、既に1票が入った状態で、 1 votes
となっています。
Web サイトもコメントも複数登録できます。
まとめ
今回のアプリのデプロイは最初、Node のサーバへの接続ポートが合わず、アプリ起動に失敗しました。そして、PORT
環境変数を使って動的に対応させることでアプリが無事起動しました。環境変数を使った動的な対応というと、類似したものに DB 接続もありましたね。これらはクラウドのアプリに特有の事象です。つまり、オンプレの固定的環境ではなく、自らの使い方、あるいは、外的要因により環境に変化が生じるのがクラウドですから、その動的対応を間違わなければクラウドをうまく使いこなすことにつながります。これは Twelve-Factor App にもその一項目( III. 設定 )として謳われています。
さて、本日のアプリはオンラインの Web サイト紹介•コメントシステムでした。もちろん一般の Web サイトのレコメンドや評価がこのアプリでできますが、その他例えば、開発したアプリや Web のデザインを関係者間でレビューすることにも使えそうですね。
今回使用したソフトウェア
- cf-release (v211)
https://github.com/cloudfoundry/cf-release/tree/v211
(https://github.com/cloudfoundry/cf-release/tree/2121dc6405e0f036efa4dba963f7f49b07e76ffa) - bosh-lite
https://github.com/cloudfoundry/bosh-lite/tree/552dc6869600c5350eb7ffb4fb9c9c5e79e3889d - CF CLI (v6.12.0-8c65bbd-2015-06-30T00:10:31+00:00)
https://github.com/cloudfoundry/cli/tree/v6.12.0
(https://github.com/cloudfoundry/cli/tree/8c65bbd4d243cbbc9bdbf2ec2a3b0e094c094f48) - Pumpkin
https://github.com/fananta/Pumpkin/tree/ceb17dc4115d793809c4b21c041a7dfb7075d158