« 05.21 金環日蝕 | ココ | 05.23 Facebook PHP SDKのgetLoginStatusUrl()がおかしい »

2012年5月22日

Cloud Foundryにデプロイしてみる  このエントリーを含むはてなブックマーク 

プログラミングはおろか、ほとんどブログの更新もままなっていないので、申し訳なさついでに更新ってことで…。Cloud Foundryを触ってみようと思ったのでnode.jsプロジェクトのデプロイまでを簡単に紹介してみましょうかと。

Cloud Foundryは、AWSやHeroku、DotCloud、GAEといったアプリケーションプラットフォームとしてのPaaSで、VMwareが提供しています。特徴的な点としては、このPaaSがオープンソースとして提供されていることで、日本ではNTTや楽天が活用しているようです。

Cloud Foundryのオープンソース版はMicro Cloud Foundryと言われていて自分の所有するサーバーにインストールできたりと、面白そうなのですが、まずはCloud Foundryにプロジェクトをデプロイしてみてみることにします。デプロイできるのはJava、Ruby、もしくはnode.jsのようなので、node.jsアプリを作ってみようかと。


必要なのは、node.jsとnpmのインストールなので、それをまずは。

[cloud@localhost ~]$ git clone git://github.com/ry/node.git
remote: Total 50773 (delta 39944), reused 46510 (delta 36585)
Receiving objects: 100% (50773/50773), 39.79 MiB | 204 KiB/s, done.
Resolving deltas: 100% (39944/39944), done.
[cloud@localhost ~]$ cd node
[cloud@localhost node]$ ./configure --prefix=$HOME
Checking for program g++ or c++ : /usr/lib/ccache/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/lib/ccache/gcc
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : yes
Checking for library util : yes
Checking for library rt : yes
Checking for fdatasync(2) with c++ : yes
'configure' finished successfully (3.133s)
[cloud@localhost node]$ make && make install
[cloud@localhost node]$ curl http://npmjs.org/install.sh | sh

そしてvmcのインストール。環境にはすでにRubyとgemがインストールされているものとします。今回はrvmを使っているのでrvmから一般ユーザー環境にvmcをインストール。Cloud Foundryで紹介されている手順書ではこれから先のコマンドでrest-clientとmime-typesがインストールされていないというエラーが出てきたのでそれらも一緒にインストール。

$rvm gem install --user-install rest-client mime-types vmc

次に環境変数PATHにvmcがあるディレクトリを追加(bashだと.bash_profileを編集)。

PATH=$PATH:$HOME/.gem/ruby/1.9.1/bin

そしてPATHを再設定($ source .bash_profile を実行するなど)。

$ vmc target api.cloudfoundry.com
$ vmc login

で、Cloud FoundryのAPI接続先と認証情報(メールアドレスとパスワード)を設定。認証情報はCloud Foundryに登録時に送られてくるメールに記載されています。

$ mkdir node_js_test; cd node_js_test
$ vi app.js
$ vi package.json

上記コマンドでnode_js_testディレクトリ下にapp.jsとpackage.jsonを作成します。

(app.js)
var app=require('express').createServer();

app.get('/', function(req, res) {
 res.send('Hello from Cloud Foundry');
});

app.listen(process.env.VCAP_APP_PORT || 3000);

(package.json)
{
 "name": "genestream",
 "version": "0.0.1",
 "dependencies": {
   "express": ""
 }
}

vmc pushコマンドを使用して、Cloud Foundryにファイルをアップロードします。

$ vmc push --runtime=node06
Would you like to deploy from the current directory? [Yn]:
Application Name: genestream ←入力する
Detected a Node.js Application, is this correct? [Yn]:
Application Deployed URL [genestream.cloudfoundry.com]:
Memory reservation (128M, 256M, 512M, 1G, 2G) [64M]:
How many instances? [1]:
Create services to bind to 'genestream'? [yN]:
Would you like to save this configuration? [yN]:
Creating Application: OK
Uploading Application:
 Checking for available resources: OK
 Packing application: OK
 Uploading (1K): OK
Push Status: OK
Staging Application 'genestream': OK
Starting Application 'genestream': .
Error: Application [genestream] failed to start, logs information below.

====> /logs/stderr.log <====


node.js:201
       throw e; // process.nextTick error, or 'error' event on first tick
             ^
Error: Cannot find module 'express'
   at Function._resolveFilename (module.js:334:11)
   at Function._load (module.js:279:25)
   at Module.require (module.js:357:17)
   at require (module.js:368:17)
   at Object. (/var/vcap/data/dea/apps/genestream-0-6f122da30088f95d9dd7af30fd9aabb6/app/app.js:1:71)
   at Module._compile (module.js:432:26)
   at Object..js (module.js:450:10)
   at Module.load (module.js:351:31)
   at Function._load (module.js:310:12)
   at Array.0 (module.js:470:10)


Delete the application? [Yn]:

おや、どうやら起動に失敗した模様。npm install で依存しているパッケージをローカルにインストールすることが必要のようです。

$ npm install
express@2.5.9 ./node_modules/express
├── qs@0.4.2
├── mime@1.2.4
├── mkdirp@0.3.0
└── connect@1.8.7
$ vmc push --runtime=node06

今度はうまく起動できたっぽいです。

$ curl http://genestream.cloudfoundry.com/
Hello from Cloud Foundry

$ vmc apps

+-------------+----+---------+-----------------------------+----------+
| Application | #  | Health  | URLS                        | Services |
+-------------+----+---------+-----------------------------+----------+
| genestream  | 1  | RUNNING | genestream.cloudfoundry.com |          |
+-------------+----+---------+-----------------------------+----------+

稼働状態も確認OKです。

By ただ at 23:33 カテゴリー ; プログラミングとか

« 05.21 金環日蝕 | 05月の記事 | 05.23 Facebook PHP SDKのgetLoginStatusUrl()がおかしい »




トラックバック

このエントリーのトラックバックURL:
http://pinmarch.sakura.ne.jp/mt/mt-tb.cgi/1799