watchの機能をフルに使ったデプロイになります。watchで起動されるデプロイツールがstretcherになります。s3://example/manifest.ymlクラスタリスタートさせる場合/etc/consul.d/web.confに定義出来るnameservicetagsの設定で頑張る事でなんとかなりそう。s3://example/manifest-prerelease.ymlとして手で叩くでも良い。prereleaseとすると、サーバ1だけにイベントが飛びます。productionとすると、サーバ1とサーバ2にイベントが飛びます。stagingとすると、サーバ3だけにイベントが飛びます。reloadすれば、設定が更新されます。s3://example/manifest-prerelease.ymlとすれば、1台だけリリース可能。全台デプロイを検知する仕組みとしてconsulの持つKey/Valueの仕組みを利用すると実現可能。http://localhost:8500/v1/kv/deployFailureをしておく。http://localhost:8500/v1/kv/deployFailure/{`hostname`}としておく。http://localhost:8500/v1/kv/deploy/?keysを監視。http://localhost:8500/v1/kv/deployFailure/?keysを取得しエラーがないことをチェックしてデプロイフローの完了となる。感想という事で、イベントを送る先をtagsで良い感じに制御出来ればconsulとstretcherによるデプロイは良さそうな気がします。全台デプロイ完了の検知は、consulのイベントとかステータスとかだけでやりたかった。引き続き良い方法があれば調べたい。manifest.ymlはデプロイスクリプト(capistrano?)で自動で更新されるようにしたいため、ここにhook処理が羅列されるのは嬉しくない。ソースを固めてs3に上げてmanifest.ymlを作るという部分はまだ考慮しきれていない。各サーバでserviceにcheckという設定(このページではconsulの基本的な設定のweb.json)を付けると、指定したチェックが通るまではserviceとしては追加されないのでロードバランサにぶら下げるときにもconsulのヘルスチェックを見てゴニョゴニョ出来たらいいのかと思ったりしました。gendosu.jpのデザインを修正しました実は、一つまえのgendosu.jpは、全体的に字が大きくてお年寄り向けになっていた(おい!!)気がしたので今回思い切って新しいデザインに変えてみました。こんな感じから.......こんな感じへ。アイキャッチ画像も出るようにしました。なんかヘッダ周辺、最近っぽくないですか??個人的にはなんか良い感じになったと思います。検索もボタンが付いてわかりやすい。レスポンシブなので、スマホで見てもタブレットで見てもそれらしく表示されます。これでアクセスがアップ!となれば良いのですが。ま、ただのテーマ変えですが。開発サイクルをブースト!するかもしれない。Dokku触ってみた(初期編)開発環境って、一度作るとあとはそれほどいじらないのでいいんですが適当に作ったけど適当に社内で公開したい場合にお気軽にデプロイしたい。Capistrano使ったりするのもいいんだけど...。それに、小さめのツール類が多いんだけど、毎回nginx立ててポート変えてとかconfでゴニョゴニョして公開するの、面倒。デプロイしたら即公開みたいな環境ないかなー。herokuみたいな。思って探したらdokkuというのがあったので、触ってみました。dokkuとはOSSのherokuライクなPaaS実装。dokkuを入れたサーバに対してgitでプッシュするだけでデプロイ完了します。バックエンド(MySQLとかRedisとか)はプラグインで対応。公式https://github.com/dokku/dokku調査まずは手元で動作確認。vagrantを使っての動作確認をしていきます。何も入っていないvagrantのvmを起動します。バージョン違いで動かないのは嫌なので、公式通りUbuntu14使います。--no-provisionとしてください。upしばらく待つと起動する。起動したらvmにログインします。ssh続いて、dokkuのインストール。公式にある通りにコマンドを入れます。bootstrap.shで初期設定画面が待機しているので、開いてこれが完了すると、http://[dokkuを入れたサーバのIP]/id_rsa.pubのキーとドメイン名を設定して初期設定します。初期設定画面で入れるドメインは、とりあえず触る程度であればドメイン名にIPを含ませて叩くと常にそのIPを返してくれるというxip.ioというサービスがあるので、これを使います。dokkuを本番に組み込むようなことがある場合、自分でワイルドカードドメインを設定する必要があると思います。いうことで、vagrantで起動したvmのIPを使ってドメイン名を作ります。dokku.172.28.128.5.xip.ioこんな感じになるかと思います。Setupボタンを押すと、設定が完了します。続いて、ローカルのマシンの方にdokkuのクライアントを入れていきます。公式のshellでやるのが手っ取り早いので、そのままコマンド実行します。dokku='$HOME/.dokku/contrib/dokku_client.sh'ローカルに適当にテスト用のrailsプロジェクトを作ってデプロイしてみましょう。これでローカルのマシンでdokkuコマンドが使えるようになりました。Applicationからサンプルリポジトリを使ってデプロイします。ruby-rails-sampleサーバに入って、postgreSQLのプラグインを入れておきます。https://github.com/dokku/dokku-postgres.git再びローカルで、postgresqlサービスを作成して、アプリにリンクさせておきます。ruby-rails-sampleデプロイはherokuとほとんど一緒です。これで、デプロイ準備は整いました。-vvでdokkuが追加されていると思います。apps:createで作成される)このリポジトリに対してpushするだけでアプリがデプロイ出来ます。master早速デプロイされたアプリにアクセスしてみます。dokku.192.168.1.1.xip.io以上です。cloneそのままという印象。裏でdockerが動いているが、ほぼ意識しなくて良い。dokkuはスタンドアローンな仕組みなので、スケールさせるサービスには向かないと思います。社内で適当にサイトを立ち上げてプレビューするとか外部公開でも絶対にアクセスが増えないとかローカルだけどherokuみたいに気軽にデプロイしてサーバで動いているのを確認したいとかそーいう用途向きのプロダクトに感じました。スケールさせることが前提なのであればdeisやflynnといったプロダクトを使ってみるのがいいかもしれません。Mesosあたりを試してみるのもいいかもしれません。