dotcloudにnodeslideをデプロイしてみた。
DotcloudでWebsocketが対応されたという話が上がっています。
dotCloud Announces Native Support for WebSockets - dotCloud blog
dotCloud で WebSocket - Block Rockin’ Codes
徐々にWebsocketに対応するPaaSが増えてきて良い兆候になっていますね。
この調子でHerokuも対応してくれると嬉しいんですが。
という訳でDotcloudにnodeslideをデプロイしてみました。
その経緯を追っていきます。
Dotcloudアプリケーションを作る
まずはDotcloudアプリケーションを作成します。
以下のコマンドを実行します。
dotcloud create nodeslide
ちなみにdotcloudのCLIは下記からインストールしておいてください。
dotCloud - Installing the CLI
次にファイル構成。Dotcloudにデプロイするためには以下のような構成にしておく必要があります。
├── dotcloud.yml └── nodeslide ├── package.json ├── server.js ├── supervisord.conf
dotcloud.yml
www: type: nodejs approot: nodeslide data: type: mongodb
typeはnodejsに。approotはtreeのrootフォルダを指すので、nodeslideにしておきます。
また、mongodbを使っているので、それに対しても指定をしておきます。
supervisord.conf
[program:node] command = node server.js directory = /home/dotcloud/current
ここにはアプリケーションの起動方法を書きます。
ひとまずチュートリアル通りのnode server.jsで。
server.jsじゃなくすることも、アプリケーションルート直下以外にserver.jsを置くことも
directoryとcommandを変更することで対応できます。
一応、dotcloudによれば、server.jsにすることはgood practiceみたいですけどね。
package.json
どうもdotcloudのnode.jsは古いようで、最新のmongooseとか入れようとすると、npmがエラーを吐くので以下の設定にしています。
{ "name": "application-name" , "version": "0.0.1" , "private": true , "dependencies": { "express": "2.5.0" , "jade": ">= 0.0.1" , "socket.io": "0.8.7" , "mongoose": "2.3.11" } }
server.js
注意しなきゃいけないポイントは以下の2点です。
・8080ポートでアクセスできるようにしておくこと。
・mongodbのURLを変更する。
8080ポートでのアクセス
app.listen(8080);
expressのデフォルトが3000なので、3000にしている人が多いかもしれませんが、8080にしておく必要があります。
おそらくリバースプロキシ方式で接続する際に8080にしているのでしょう。
mongodbのURL変更は多少時間がかかるので、次セクションで説明します。
mongodbへの接続
自分はここに一番時間がかかりました。
デフォルトのまま使おうとしてもURLがわからないので、そこを下記の方法で調べます。
dotcloud info nodeslide.data
実行すると以下のようなメッセージが返ってきます。
config:
mongodb_noprealloc: true
mongodb_nopreallocj: true
mongodb_oplog_size: 256
mongodb_password: XXXXXXXXXX
mongodb_replset: nodeslide.data
mongodb_smallfiles: true
created_at: 1333288725.436986
datacenter: Amazon-us-east-1b
image_version: c60aa2f91b10 (latest)
instances:
nodeslide.data.0:
state: PRIMARY
ports:
- name: ssh
url: ssh://mongodb@nodeslide-yosuke_furukawa-data-0.dotcloud.com:11111
- name: mongodb
url: mongodb://root:XXXXXXXXXX@nodeslide-yosuke_furukawa-data-0.dotcloud.com:11112
state: running
type: mongodb
このurlに書かれている部分をmongooseを使っている人であればそのまま設定すればOKなはずです。
var mongoUri = mongodb://root:XXXXXXXXXX@nodeslide-yosuke_furukawa-data-0.dotcloud.com:11112/admin mongoose.connect(mongoUri);
でもこのままだとroot権限でアクセスすることになってしまい、好ましくありません。
また、admin用のデータに更新しているので、それも好ましくありません。
できれば、新しくユーザーを作って参照、更新させつつ、新しいデータ領域にアクセスする方が良いでしょう。
以下のように設定していきます。
以下のコマンドを実行して、mongoを実行し、ユーザーとデータを作成します。
$ dotcloud run nodeslide.data mongo # mongo MongoDB shell version: 2.0.2 connecting to: data nodeslide.data:PRIMARY> use data switched to db data nodeslide.data:PRIMARY> db.getSisterDB("admin").auth("root", "XXXXXXXXXX"); 1 nodeslide.data:PRIMARY> db.addUser("slideUser", "slidePassword");
コレを実行した後、ユーザー、パスワード、データベースの箇所のURLを変更します。
var mongoUri = mongodb://slideUser:slidePassword@nodeslide-yosuke_furukawa-data-0.dotcloud.com:11112/data mongoose.connect(mongoUri);
最終的な変更ポイントも含めてdotcloud用のnodeslideをgithubに上げておきます。
yosuke-furukawa/nodeslide4dotcloud · GitHub
一応、dotcloud用とnodeninja用両方リンクを貼っておきます。
地理的な要因からか、nodeninjaの方が安定している気がしますね。
nodeslide dotcloud
nodeslide nodeninja
この辺りの性能測定も次回実行してみます。