PaaSを使ってみる(その1 dotCloud)

とりあえず、サーバ側は動くようになったのでスマホ側からアクセスさせるための準備でどっか公開されたところにアプリアップします。

いきなり、サーバ借りるわけにもいかないのでPaaS利用してみます。
今回はRuby Rails Redisが使えるPaaSを探してみましたが色々あってよくわからないので、いくつかお試しで使ってみようと思います。

本日は 「dotCloud」です。

dotCloudでサポートされている言語は

サポートされるデータベースは

その他

このようなサービスも利用可能です。

気になる料金

今回はRubyとRedis使用するのでこのような条件で見積もって


このような価格になりました。
dotCloudではサービスの提供に、Sandbox(開発時)、Live(公開時)の2パターン(Flavorと呼んでいるようです)があります。
開発時は独自のドメインが使えず、ベストエフォートであるものの、サービスのリソース制限もなく、SSLも使えるようです。
開発者にはかなり優しいのではないでしょうか?
dotCloud - Application Flavors
こちらに詳しく制限については書いてありました。
Sandboxだと一定期間で休止状態(Hiberbnate)になるとのことなので
継続したサービスには使えなさそうですね。

まずはサインイン

dotCloud - One home for all your apps にアクセスして右上の「Sign Up」をクリックすると

メールアドレスを聞かれるので、ここにメールアドレスを入力し、ダイアログの「Sign Up」をクリックすると

入力したメールアドレスに下記のようなメールが届き、そこにあるStep1のリンクからアカウントのアクティベートを行います。

Thanks for registering for dotCloud, the easiest way to deploy and
scale your web applications.

You're 3 simple steps away from deploying your first app:

1. Activate your account by visiting: http://www.dotcloud.com/accounts/activate/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2. Install our CLI: http://docs.dotcloud.com/firststeps/install/

3. Create a simple "hello world" sandbox app:
http://docs.dotcloud.com/firststeps/quickstart/#a-simple-example

Happy hacking!

アクティベートには、ユーザ名とパスワードを設定します。

アクティベートが終わるとダッシュボードが表示され、アプリケーションを追加することができます。

dotCloud CLIをインストール

dotCloudを操作するためにはdotCloud CLIをインストールします。このツールはpythonで動くので予めpythonのインストールが必要です。
Windowsの場合は先にcygwinのインストールが必要とのこと。

自分の環境は、ubuntuなので

$ sudo easy_install pip && sudo pip install dotcloud
sudo: easy_install: コマンドが見つかりません

まだ easy-installがインストールされていない様なので

$ sudo apt-get install python-setuptools

を実行した後再度、実行します。

Railsアプリのデプロイ

  • 普通にRailsアプリを新規で作成します。
$ rails new sample           
      create  
      create  README.rdoc
      create  Rakefile
      create  config.ru
      create  .gitignore
      create  Gemfile
      create  app
      create  app/assets/images/rails.png
      create  app/assets/javascripts/application.js
      create  app/assets/stylesheets/application.css
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      create  app/mailers
      create  app/models
      create  app/views/layouts/application.html.erb
      .........

Rails3.1以降ではプリコンパイル済みのアセットが必要です。

$ rake assets:precompile

*1

  • dotCloud上にアプリを作成します。
$ cd sample
$ dotcloud create sample
==> Creating a sandbox application named "sample"
==> Application "sample" created.
Connect the current directory to "sample"? [Y/n]: y

これでdotCloud上にsampleと言うアプリケーションが作成されました。

  • Buldファイルの作成

dotCloudでアプリケーションを動かすために「dotcloud.yml」というファイルを用意します。
RailsMysqlを使う場合はこの様なファイルを作成します。

www:
  type: ruby
db:
  type: mysql

Redisを使用する場合は

www:
  type: ruby
data:
  type: redis

この様になります。
詳しくは、dotCloudのドキュメントのBuildFileのページ、また各サービス(言語、DB)のページにBuildファイルの記述例があります。
dotCloud - Available dotCloud Services
dotCloud - Build File

dotcloud.ymlをアプリケーションのルートに保存して
次のコマンド dotcloud push で dotcloudサーバにアプリケーションがアップされます。

$ dotcloud push
==> Pushing code with rsync from "./" to application sample
building file list ... done
./
.gitignore
.rbenv-gemsets
.rbenv-version
Gemfile
Gemfile.lock
README.rdoc
Rakefile
config.ru
dotcloud.yml
.dotcloud/
.dotcloud/config
app/
.................
sent 29.49K bytes  received 1.25K bytes  5.59K bytes/sec
total size is 46.16K  speedup is 1.50
==> Submitting a deployment request for application sample
==> Deployment of revision rsync-1355159207277 scheduled for sample
- 2012-12-11 (sample deployment, deploy_id=a1686a7b-dc80-4019-9d0e-49fc2098b9e4)
02:07:25: [www] Fetching gem metadata from https://rubygems.org/.........
02:07:27: [www] Fetching gem metadata from https://rubygems.org/..
02:07:28: [www] Installing rake (10.0.2)
02:07:28: [www] Installing i18n (0.6.1)
02:07:28: [www] Installing multi_json (1.4.0)
02:07:29: [www] Installing activesupport (3.2.9) 
02:07:46: [www] Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
02:07:46: [www] Post-install message from rdoc:
02:07:46: [www] Depending on your version of ruby, you may need to install ruby rdoc/ri data:
02:07:46: [www] 
02:07:46: [www] <= 1.8.6 : unsupported
02:07:46: [www]  = 1.8.7 : gem install rdoc-data; rdoc-data --install
02:07:46: [www]  = 1.9.1 : gem install rdoc-data; rdoc-data --install
02:07:46: [www] >= 1.9.2 : nothing to do! Yay!
02:07:46: [www] 
.................
02:07:52: [www] Build completed successfully. Compiled image size is 10MB
02:07:52: [www] Build successful for service (www)
02:07:52: --> Application (sample) build is done
02:07:52: --> Provisioning services' instances... (This may take a few minutes)
02:07:52: [www] Using default scaling for service www (1 instance(s)).
02:07:52: [www.0] Provisioning service (www) instance #0
02:08:08: --> All services' instances have been provisioned. Installing code...
02:08:09: [www.0] Installing build revision rsync-1355159207277 for service (www) instance #0
02:08:19: [www.0] Running postinstall script...
02:08:21: [www.0] Launching...
02:08:22: [www.0] Waiting for the instance to become responsive...
02:08:22: [www.0] Re-routing traffic to the new build...
02:08:24: [www.0] Successfully installed build revision rsync-1355159207277 for service (www) instance #0
02:08:24: [www.0] Installation successful for service (www) instance #0
02:08:24: --> Application (sample) fully installed
==> Application is live at http://sample-euledge.dotcloud.com

デプロイにはrsyncでサーバーにファイルがアップされるようです。
またアップが終わると自動的にBundle Installがされインスタンスの起動まで行われています。
ダッシュボードで確認してみましょう。

デプロイ時の最後、またはダッシュボードに公開されているURLが記されているので早速アクセスしてみると。

こんな感じでデプロイできています。

ダッシュボードからは、メモリ使用量、トラフィック、サーバーログ、環境変数、ドメイン名、課金状況など表示することができます。

ちなみに、ログをみるとWebサーバーはnginxが動いてるみたいです。

またSandboxからLiveへの切り替えもダッシュボードのAdminから行うようです。


あとは、ローカルでアプリコーディングして $dotCloud pushでデプロイのサイクルをしていけば良さそう。
そういえば、課金されたときの支払いはクレジットカードですが、Sandbox利用している段階ではクレジット情報の入力は不要みたいです。つまりSandbox利用中はずっと無料ってこと、これなら結構気楽に使っていけるんじゃないでしょうか?

色々なPaaS触ってみようと思ったけど、何か既にこれで十分な気がしてきた。その2があるかどうかは未定ってことで

*1:最初にデプロイしたときrailsの画像が出てなかったので変だなとは思ったのですが見て見ぬふりしてしまいました orz