re:dashというデータ可視化ツールがあります。MySQL、Redshift、TDなどからデータを引っ張ってグラフ化できたりして、非常に便利なんですが、今まではHighchartsというライブラリに依存しており、ライセンスの関係で利用できる用途が限られていました。先日、Feature: replace HighCharts with Plotly by alonho · Pull Request #687 · getredash/redashでPloylyという別のグラフ描画ライブラリに移行されたので、Dockerで動かしてみました。
Dockerイメージ
masterブランチにDockerfile
が含まれていますが、そのままdocker build
するとアセットがインストールされません。docker build
前にmake deps
を実行しておく想定っぽいですが、ビルドするホストにnodeやBowerなどをインストールするのは厳しいのでDockerイメージをビルドする際にインストールします。
プルリクは出してありますがまだマージされていませんので、フォークした https://github.com/ryotarai/redash/tree/bower-in-dockerfile ブランチを使ってビルドをします。ビルド済みのイメージもあります。
設定する
re:dashの動作にはPostgreSQLとRedisが必要なので適当に用意します。で、いくつかの設定を環境変数で設定します。
$ cat envfile REDASH_STATIC_ASSETS_PATH=../rd_ui/app/ REDASH_DATABASE_URL=postgresql://user:password@hostname/database REDASH_GOOGLE_APPS_DOMAIN=example.com REDASH_GOOGLE_CLIENT_ID=foobarbaz.apps.googleusercontent.com REDASH_GOOGLE_CLIENT_SECRET=foobarbaz REDASH_REDIS_URL=redis://hostname:6379/0 REDASH_COOKIE_SECRET=foobarbaz
REDASH_DATABASE_URL
はPostgreSQL以外のDB(MySQL)とか使えそうな雰囲気を感じますが、コードを見る限り無視されるっぽいREDASH_GOOGLE_CLIENT_ID
,REDASH_GOOGLE_CLIENT_SECRET
はGoogleのDeveloper Consoleから取得しますREDASH_GOOGLE_APPS_DOMAIN
はオプショナルですが、Google Appsを使っていてログインできるドメインを絞りたい場合に指定しますREDASH_COOKIE_SECRET
は適当に生成した文字列を設定します
DBにテーブルをつくる
必要なテーブルをPostgreSQLに作成します。
$ docker run --env-file=envfile ryotarai/redash:bower-in-dockerfile ./manage.py database create_tables
起動する
$ docker run --env-file=envfile -p 5000:5000 ryotarai/redash:bower-in-dockerfile
5000番でHTTPサーバが起動するので、適宜ポートをpublishします。
Adminユーザをつくる
初期状態ではユーザがいないので、管理者用にAdminユーザを作成します。Adminユーザはデータソースの設定ができます。
Googleアカウントでのログインを使う場合
DOCKER_HOST:5000
にアクセスして、Googleアカウントでログイン- 以下のコマンドでAdmin権限を付与
$ docker run --env-file=envfile ryotarai/redash:bower-in-dockerfile ./manage.py grant_admin example@gmail.com
Adminユーザは他のユーザのAdmin権限をWeb UIから付与することが可能なので、一度CLIから設定してしまえば後はGUIで設定できます。
Googleアカウントでのログインを使わない場合
$ docker run --env-file=envfile ryotarai/redash:bower-in-dockerfile ./manage.py users create --admin --password admin "Admin" "admin"
admin / adminでログインできるようになります。