GCEでOSvを動かそう
OSvは、ハイパーバイザやIaaSプラットフォームへアプリケーションをデプロイすることに特化した軽量OSです(※詳しくはこちら)。
今回はRuby on Railsで書かれたブログエンジン「Publify」をインストールしたOSvのイメージをGoogle Compute Engine(GCE)へデプロイしてみます。
プロジェクトIDの設定
先ほど作成したプロジェクトへログインしてIDを設定します。
gcloud auth login gcloud config set project fresh-mason-798
バケットの作成
OSvのディスクイメージをアップロードするためにCloud Storageへバケットを作成します。
gsutil mb gs://osv_test
Rubyのインストール
Publify入りのディスクイメージをビルドするためにrvmでRubyをインストールします。
gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3 \curl -sSL https://get.rvm.io | bash -s stable source ~/.profile rvm install 2.1.4 rvm use 2.1.4 sudo yum install sqlite-devel
OSvイメージのビルド
OSvのソースコードをcloneしてPublifyのイメージをビルドします。
ビルドが終わったらGCE用のtar.gzファイルを生成します。
git clone https://github.com/cloudius-systems/osv.git git submodule update --init --recursive make image=ruby-publify ./scripts/gen-gce-tarball.sh
※今回は、make image=ruby-publify,httpserverとしたところエラーが出て起動しなかった(Rubyとの組み合わせで発生するバグ)のでhttpserverを外しましたが、これがないと8000番ポートにRESTサーバが起動しないのでOSvの管理が著しく不便になります。Ruby以外のアプリを使用する時は必ず付けることをオススメします。
OSvイメージのデプロイ
gsutil・gcutilコマンドを使ってgen-gce-tarball.shコマンドで生成したosv.tar.gzをアップロード、デプロイします。
今回はus-central1-aのf1-microへosvという名前で実行することにしました。
gsutil cp build/release/osv.tar.gz gs://osv_test/osv.tar.gz gcutil addimage osv gs://osv_test/osv.tar.gz gcutil addinstance --image=osv --machine_type=f1-micro --zone=us-central1-a osv
動作状況の確認
getserialportoutputでOSvインスタンスの動作状況を確認します。
gcutil getserialportoutput osv
以下のような出力が表示されます。
(略) OSv v0.16-22-ga6c87f0 eth0: 10.240.159.233 sigaltstack() stubbed => Booting Thin => Rails 3.2.21 application starting in production on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server You did not specify how you would like Rails to report deprecation notices for your production environment, please set config.active_support.deprecation to :notify at config/environments/production.rb WARNING: fcntl(F_SETLK) stubbed Thin web server (v1.6.3 codename Protein Powder) Maximum connections set to 1024 Listening on 0.0.0.0:3000, CTRL+C to stop
ファイヤウォールの設定
グローバルIPからポート3000へ接続出来るように設定を変更します。
gcutil addfirewall publify --description="publify http" --allowed="tcp:3000"
覗いてみる
http://146.148.55.173:3000/ で起動中です(そのうち落とします)。
まとめ
OSvのイメージをGCEへデプロイする方法を解説しました。
今回はPublifyの例を挙げましたが、CassandraのようなJavaアプリやRedisのようなネイティブアプリも同様の手順でデプロイすることが可能です。