re:dashをDockerで動かす

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_URLPostgreSQL以外のDB(MySQL)とか使えそうな雰囲気を感じますが、コードを見る限り無視されるっぽい
  • REDASH_GOOGLE_CLIENT_ID, REDASH_GOOGLE_CLIENT_SECRETGoogleのDeveloper Consoleから取得します
    • リダイレクトURIhttps://YOUR_REDASH_HOST/oauth/google_callbackを許可します
    • これらを省略して、Googleアカウントを使わずにユーザ管理することも可能です
  • 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アカウントでのログインを使う場合

  1. DOCKER_HOST:5000にアクセスして、Googleアカウントでログイン
  2. 以下のコマンドで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でログインできるようになります。