RubyのDocker開発環境を使って、Dashingアプリをつくってみます。Data Visualization
のJavaScriptの中では、SquareのCubism.jsや、最近はやっているGrafanaと気に入っています。
メトリクスはGraphite用のダッシュボードで表現することが多いですが、ApacheやTomcatのログをTreasure Data
に貯めているので、Counting & Timing
の簡単なサンプルを作ってみようと思います。
DashingはSpotifyが開発しているダッシュボードです。おなじくSpotifyが開発しているBatman.jsをSPAのライブラリに使っています。そういえばSpine.jsやSroutCoreなどとくらべて、どれにしようか昔悩んでいました。
Dockerfileとビルド
今日までのDockerfileです。
FROM phusion/baseimage:0.9.10 |
さっそくビルドします。rbenvとruby-buildしているのでイメージ作成に時間がかかるのが課題です。
もっと良い方法を探しています。
$ docker build -no-cache -t masato/baseimage . |
コンテナの起動
Dockerホスト上へ、コンテナにマウントする作業ディレクトリを作成します。
コンテナからgit push
できるのですが、変更を加えるディレクトリはコンテナ外に置きたいです。
$ mkdir -p ~/docker_apps/workspaces/dashing |
Dockerコンテナを起動します。
DashingのSinatraはデフォルトで3030ポートを使うのでポートフォワードします。
また、先ほど作った作業ディレクトリをマウントします。
$ docker run -t -i -p 3030:3030 -v ~/docker_apps/workspaces/dashing:/root/sinatra_apps masato/baseimage /sbin/my_init /bin/bash |
ssh-agent
DockerホストからコンテナにSSHする時に、ssh-agentを使います。
Dockerホストと同じVLAN上にあるGitのリモートリポジトリ(10.1.1.xx)には、
同じ秘密鍵のprivate_keyをコピーすることなく接続できるようになります。
$ cd ~/docker_apps/phusion |
byobu
byobu-config
を起動して、Puttyからも使えるように設定します。
- 「ステータス通知の切り替え」 > logoをoff、ip_addressをon
- 「エスケープシーケンスの変更」 > エスケープキーをctrl-T
Dashingのインストール
起動したコンテナにSSH接続します。
$ cd ~/docker_apps/phusion |
dashingのインストールをします。apt-getしたruby2.0だとmkmfが見つからないエラーに
悩まされました。やはりrbenvするのが基本でした。
# gem install dashing --no-ri --no-rdoc |
Dashingの起動
コンテナにマウントしたディレクトリに、Dashingアプリのひな形を作成します。
# cd ~/sinatra_apps |
Gemfileを編集します。twitterはコメントアウトします。
#gem 'twitter', '>= 5.0.0' |
bundle installします。
# bundle install |
ひな形のTwitterのジョブを削除します。
# mv jobs/twitter.rb jobs/twitter.rb.orig |
DashingのThinサーバーを起動します。
# dashing start |
同梱されているsampleダッシュボードの確認をします。
http://{DockerホストのIPアドレス}:3030/sample
Dashingアプリのgit commit
ここで一度プロジェクトをgit commit
します。
gitのpush.defaultはsimpleにします。
[user] |
Dockerホスト -> コンテナ -> リモートリポジトリ(10.1.x.xx)へSSHの確認します。
$ ssh-agent bash |
リモートリポジトリを、リポジトリサーバーにログインして作成します。
$ sudo mkdir -p /var/git/repos/dashing_apps/dashing_td.git |
リモートリポジトリを追加します。
# cd ~/sinatra_apps/dashing_td |
.git/config
を確認します。
[core] |
Dockerホストと同じVLANにあるリモートリポジトリへ、Dockerコンテナからgit push
できます。
# git push origin master |
まとめ
今回はDashingアプリのひな形を使い、同梱されているsampleダッシュボードを表示するところまでできました。
次回はTreasure Data
サービスに保存しているログデータを、定期的にクエリするジョブと、ダッシュボードに
表示するウィジェットを作成します。
Batman.jsのCoffeeScriptを使ったデータバインドに慣れると、自由にウィジェットを追加できるようになります。