Perl版のHerokuを作りたい
発端
最近Salesforceに買われたのでちまたでも有名になったHeroku,RubyOnRailsをオンデマンドで使う事ができるサービスです.このサービスではgitで管理しているソースをHeroku環境にデプロイしてmakeするとwebアプリケーションを実行できます.似たようなことをPerlでもやってみたいなと思っていました.
一方で子飼さんが作ったlleval - run codes from your browserというサービスと,これを元にした宮川さんのhttp://sunaba.plackperl.org/app/jrl_h69c3xgmlha_byudvgというサービス(というかproof-of-conceptかな)が動いています.これらの巨人(子飼さんはともかく宮川さんはでかくないけど)の偉業を足がかりにすればできるんじゃないかと思いつきました.
そして,最近iTunes App StoreでCodeToGoというアプリを見つけて,もしかしたらニーズもあるかもしれないと思うようになりました.ビジネスモデルは(苦手だから)後回しにして,とりあえず動きそうなアーキテクチャを考えてみることにしました.
構想
アーキテクチャに名前がないと説明しにくいのでHakoniwa(箱庭)という名前を付けてみました.まず,ローカル環境に必要なアプリケーションをインストールして,
$ cpanm App::Hakoniwa
例えば,bonsan(盆山)ってwebアプリを作る場合には
$ hakoniwa create bonsan
とします.するとHakoniwaがaws(amazon web service)上にbonsan.hakoniwa.com, bonsan.api.hakoniwa.comという名前のサーバ(AMIインスタンス)用意します.bonsan.hakoniwa.comにはsunaba(もしくはその拡張)が,bonsan.api.hakoniwa.comにはlleval(の移植版)が動きます.
次にデプロイするにはgitを使います.Hakoniwaが必要な環境変数(の初期値を)用意しておけばgitがそのまま使えるかなと.
$ git push hakoniwa master
アプリケーションを起動はこれでいいかな.
$ hakoniwa plackup bonsan
負荷分散は要求に応じてbonsan001, bonsan002...とアプリケーションサーバを増やして,それをsunabaに組み込んだproxy機能で分散させればいいと思っています.
hakoniwaのコマンドオプションはこれぐらいあればいいかと.
$ hakoniwa --help help # show this usage version # show hakoniwa version list # list your apps create <name> # create a new app destroy <name> # destroy the app permanently info [<name>] # show app info, like web url and git rep api:add [<num>] # add api server api:del [<num>] # delete api server keys # show your user's public keys keys:add [<path to keyfile>] # add a public key keys:remove <keyname> # remove a key by keyname keys:clear # remove all keys domains:add <domain> # add a custom domain name domains:remove <domain> # remove a custom domain name domains:clear # remove all custom domains ssl:add <pem> <key> # add SSL cert to the app ssl:remove <domain> # removes SSL cert from the app domain pm # list installed modules pm:install <perl_module> # install the module from CPAN pm:uninstall <perl_nmodule> # remove mod pm:update <perl_module> # update specified module
apiサーバが複数あるからsshして作業するわけにはいかないだろうから,capistranoも使えるようにする必要があるかもしれないなぁ.とまぁ,こんな記事を書いておいたら誰か作ってくれないかな,と淡い期待.それともこんな仕組みには誰も興味ないでしょうか.