tracとhg&bzrを dotcloud で動かす!

tags:web, trac, cloud
created:2011-05-17T22:00:00

あらかじめ必要なもの

dotcloudのinviteをもらうこと

コードチェックアウト

> mkdir -p working/folder
> cd working/folder
> hg clone http://python.matrix.dotcloud.com/hg/trac-on-dotcloud
> cd trac-on-dotcloud

必要なパッケージのインストール ローカルテストしないならdotcloudモジュールインストールだけでもいいです。

> apt-get install python-pip # for ubunutu
> cd code
> pip install dotcloud
> pip install -r requirements.txt

注釈

環境によってはsudoなどを用いて管理者権限に昇格する必要があります。

ローカルテスト

> cd trac-on-dotcloud/code
> python install.py # onece only!
Add AdminUser :
  username:admin
  password:********
admin add successfuly!
> python wsgi.py

デプロイ手順

> dotcloud create NAME_SPACE # onece only!
> dotcloud deploy NAME_SPACE.APP_NAME -t python # onece only!
> dotcloud push NAME_SPACE.APP_NAME .
> dotcloud ssh NAME_SPACE.APP_NAME

# $SHELL
dotcloud@NAME_SPACE-APP_NAME:~$ cd code
dotcloud@NAME_SPACE-APP_NAME:~/code$ ./install.py  # onece only!
Add AdminUser :
  username:admin
  password:********
admin add successfuly!
dotcloud@NAME_SPACE-APP_NAME:~/code$ exit
Connection to APP_NAME.NAME_SPACE.dotcloud.com closed.

> dotcloud restart APP_NAME.NAME_SPACE

動作サンプル

今回作ったコードを入れるサーバとして動かしています!

dotcloudについて

「requirements.txt」にPyPIにあるモジュール名を列挙すれば、 リモート上でインストールされる仕組み。

リモートでのファイルフォルダ構成は以下の通り。 dataフォルダはinstall.pyによって作られるフォルダです。 それ以外は自動的に管理されているフォルダで変更はできません。 また、codeフォルダの中身は「dotcloud push ...」するたびに 一切合切ローカルと同期してしまいますので、push操作でも消えない データはcodeではないフォルダに残す必要があります。

  • /home
    • dotcloud
      • code(pushによるファイル群)
      • data(install.pyによって作成)
        • default(tracプロジェクト)
        • repos(bzrリポジトリフォルダ)
          • default(デフォルトリポジトリ)
      • env(Pythonのvirtualenvフォルダ)
        • bin(Pythonランタイム)
        • lib
          • site-packages(追加モジュール群)

いろいろやってて気づいたこと:

  • POSTのサイズ限界がある(1〜3MB程度)
  • 「/home/dotcloud/タイムスタンプ」フォルダがpushフォルダの実体
  • sshのpub-keyで認証というのは止めたらしい。(pub-key登録が不要に)
  • 6インスタンスまで動いているのを確認。(上限あるのかな?)

loggerheadについて

bzrのリポジトリサーバにはloggerheadを利用しています。 loggerheadはWebでリポジトリチェンジログを閲覧できる上にhttp経由での プッシュまたはプル操作を可能にするサーバとして動作します。

ユーザー毎にプッシュまたはプルの権限管理をする方法が見当たらず、 やむなく「ホスト/bzr/」はプルのみ許可、 「ホスト/bzr-rw/」でプルまたはプッシュを許可しておき、 後者はHTTPダイジェスト認証をかけてあります。

loggerheadはPasteサーバとSimpleTALで作られています。

Trac0.12について

0.12からはひとつのTracプロジェクトに対し 複数のリポジトリ を管理できるようになりました。

複数プロジェクトにしちゃうと管理が大変! 今回はシングルプロジェクトになるように設定しています。

Tracと他のリポジトリ

mercurialとの連携も可能なので「ホスト/hg/」のwsgiアプリを追加も可能かと。 dotcloudはデフォでmercurialがインストールされているっぽいので、 TracMercurialプラグインを追加すればいいですね!

bzrについて

  • Emptyフォルダも管理しちゃいますよ!
  • 内部ユニコード保存なので多国籍なファイル名やテキストを扱えるよ!
  • Pure python環境でも動く(C-コンパイラなしで動く)
  • loggerheadとはhttpで対話するよ!

まとめ

dotcloud はローカルテストからほとんど手を加えずにリモートにデプロイできます。 ローカル環境とリモート環境との間でギャップがとても少ないPaaSと言えますね!

以下は dotcloud で遊んでみたデモ。