PythonでWebアプリつくるのにDotCloudに登録しない手はない – YAMAGUCHI::weblog

はじめに

サエンバイノー(こんにちは)、Python界のメンソレータムです。さて猫も杓子もクラウドの時代ですが、みなさんいかがお過ごしでしょうか。先日ふと「DotCloud」というサービスを見かけてベータ登録したので、ご紹介致します。

DotCloudってなに?

DotCloudはいままでWebアプリケーションホスティングサービスの中で期待されていた領域に切り込もうとしてますよ。まず使える言語はPHP, Ruby, Python, Javaがいまのbetaの時点で使えて、さらにこれからリクエストがある言語にも対応しようとしてます。(ErlangとかSchemeとか)で、DBとかMQとかすでに有名所はいくつか使えて、なんでもリクエストがあれば対応するぜ!っていう勢い。またスケールに関してもスケールアップ、スケールアウト共に「がんばります!」っていうテンション。そして無料アカウントもあります!

PythonだったらこれまでGoogle App Engineがあったわけだけど、割と制限もあったじゃないですか。ライブラリとか。そういう意味ではDotCloudは外部依存ライブラリはpipの形式で必要なものを書いておけばそれも使えるみたいだし、なんかすごく自由度が高い。スケールさせるならGAEで、ちょっとしたアプリならDotCloudでって感じでPythonでWebアプリ書く人にとって、また一つサーバ管理から解放されるんじゃないかなー。

PHPでもRubyでもチュートリアルがあるんで、なにが出来るかはそれを読んでいただけると分かると思います。ちなみにドキュメントはSphinx製です。

使い方

まずはアカウント作成

f:id:ymotongpoo:20110221204433p:image

SSH公開鍵の登録

デプロイにはSSH公開鍵の登録が必要になります。複数登録したかったらSettings > SSH Public Keysで登録しましょう。

f:id:ymotongpoo:20110221204434p:image

f:id:ymotongpoo:20110221204435p:image

開発環境を作成

GAEでは専用のアプリケーションをダウンロードして設定したりしますね。DotCloudは割とミニマルな環境で設定出来るようにPyPIに上がってる専用パッケージを使います。

$ easy_install dotcloud

そして、CLIコマンドが使えるようになるのでAPIキーを登録します。

% dotcloud Warning: /Users/ymotongpoo/.dotcloud.conf does not exist.Enter your api key (You can find it at http://www.dotcloud.com/account/settings): xxxxxxxxxxxxxxxxxxxx:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzerror: usage: dotcloud [-h]                                {status,info,run,logs,deploy,setup,list,alias,ssh,destroy,push,rollback,restart}                ...

必ずerrorとでるのが紛らわしいですが、これで ~/.dotcloud.conf ができて、準備完了です。中身はこんな感じ。

{    "url": "http://api.dotcloud.com/",     "apikey": "xxxxxxxxxxxxxxxxxxxx:zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"}
アプリを作成

Pythonのアプリ作成に関しては次のリンクで説明してる。ほかにもPHPやRubyの解説も載ってます。Pythonでは基本WSGIアプリケーションならサポートしますよ、ってことみたい。Nginx+uWSGIで実行+監視ってことらしい。

デプロイするとプロジェクトルートにあるwsgi.pyがまず読まれてハンドラとか諸々設定してくれます。Djangoはデフォルトで使えるんでちょっと試しに作ってみます。

% django-admin.py startproject bucho

次にbuchoとおなじレベルにwsgi.pyを作成します。

# -*- coding: utf-8 -*-import osimport sysos.environ['DJANGO_SETTINGS_MODULE'] = 'bucho.settings'import django.core.handlers.wsgidjangoapplication = django.core.handlers.wsgi.WSGIHandler()def application(environ, start_response):    if 'SCRIPT_NAME' in environ:        del environ['SCRIPT_NAME']    return djangoapplication(environ, start_response)

またDjangoを使ってアプリケーション作ったんでrequirements.txtにpipの形式でDjangoを指定しておきます。

$ echo Django > requirements.txt

階層構造はこんな感じ。なんも書いてないですよ。ただのテスト用アプリ。

bucho-cloud├── bucho│     ├── __init__.py│     ├── manage.py│     ├── settings.py│     └── urls.py├── requirements.txt└── wsgi.py

これをデプロイします。

% dotcloud deploy -t python bucho.wwwCreated "bucho.www"% dotcloud push bucho.www .# upload . ssh://dotcloud@uploader.dotcloud.com:1060/bucho.www# rsyncbuilding file list ... done./requirements.txtwsgi.pybucho/bucho/__init__.pybucho/manage.pybucho/settings.pybucho/urls.pysent 2.67K bytes  received 132 bytes  373.07 bytes/sectotal size is 4.80K  speedup is 1.72Scheduling buildBuild started. To read the build logs:$ dotcloud logs --build bucho.www

はいでました。

f:id:ymotongpoo:20110221225233p:image

気になることをFAQで確認した

どこでホストされてるか?

Amazon EC2のus-east-1リージョンでホストされてるみたいです。

スケールすんの?

スケールアップは簡単にできるよって書いたる。で、スケールアウトに関してはその方法を模索するためにこのサービスをやってる的なことが書いてある。

使えるコンポーネントとか

ここを確認してください。

Python的なもので説明が書いてあるものをそのまま抜き出すとalpha以上(ちょっとでもサポートがあるもの)は

  • Celery: supported by Python worker service
  • Django: supported by Python WSGI service
  • Python (WSGI): beta
  • Python (worker): beta
  • RabbitMQ: beta
  • Tornado: supported by Python worker (but to be really useful, it needs the arbitrary port forwarding feature, that is not released yet)

またDBは同様にalpha以降だと

  • MySQL 5.1 (これだけ特別にドキュメントが書いてある)
  • CouchDB: alpha
  • Memcache: alpha
  • MongoDB: alpha
  • Redis: beta
  • Riak: alpha
  • SQLite: available (embedded) at least with PHP and Python

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中