Edited at

RedashをDockerで起動する(2017年3月版)

More than 1 year has passed since last update.


やったこと


  • Redashをローカル環境のDockerで起動する

  • ローカル環境(Dockerホスト)でリッスンしているMySQLへ接続する

  • Amazon Athenaへ接続する


TL;DR

とにかくRedashをDockerで起動してみたいんだけど、どうしたらいいの? (これだけだとAmazon Athenaは使えません)


  1. 作業ディレクトリを作って、そこへ移動する

  2. 下にある docker-compose.yml ファイルをコピーして、そのディレクトリへ配置する


  3. docker-compose run --rm server create_db する


  4. docker-compose up -d する


  5. http://localhost:28080 へアクセスする


前提

Docker for Mac をインストール済みの前提。他のOSでもdocker環境が構築済みなら、たぶん問題なく動くと思う。

試した環境は下記の通り。


  • macOS Sierra 10.12.3

  • Docker version 1.13.1

  • docker-compose version 1.11.1


起動

redashディレクトリを作成して、その下にリポジトリをcloneする。Amazon Athenaを使いたいのでそのためのリポジトリもクローンしている。こんな感じの構成にする。

redash/

`-- https://github.com/getredash/redash.git (v1.0.0-rc.2)
`-- https://github.com/getredash/redash-amazon-athena-proxy.git (95a9850)
`-- docker-compose.yml (作成)

redashリポジトリの docker-compose.production.yml をコピーして docker-compose.yml を作り、変更する。(今回redashリポジトリで必要なのはこのymlファイルだけ)

主な変更点:


  • redashのイメージをbuildするようになっていたが、Docker Hub:redash/redashにイメージが上がっているのでimageを指定

  • ホスト側のポートは重複があるようなら変更

  • スキーマキャッシュの時間を5分に

  • 日付フォーマットを指定

  • Amazon Athenaを使うためにproxyサービスの追加・環境変数の追加

  • Postgresのデータを保存するvolumeは名前付きボリュームに

  • ゲートウェイのアドレスを固定するためにネットワーク設定をする(ゲートウェイへ接続するとホストに接続できる)

結果的にこんな感じになった。


docker-compose.yml

version: '2'

services:
server:
image: redash/redash:1.0.0.b2804
command: server
depends_on:
- postgres
- redis
ports:
- "5000:5000"
environment:
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://redis:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
REDASH_COOKIE_SECRET: veryverysecret
REDASH_SCHEMAS_REFRESH_SCHEDULE: 5
REDASH_DATE_FORMAT: YYYY/MM/DD
# for Amazon Athena
# REDASH_ADDITIONAL_QUERY_RUNNERS: redash.query_runner.athena
# ATHENA_PROXY_URL: http://redash-amazon-athena-proxy:4567/query
worker:
image: redash/redash:1.0.0.b2804
command: scheduler
environment:
PYTHONUNBUFFERED: 0
REDASH_LOG_LEVEL: "INFO"
REDASH_REDIS_URL: "redis://redis:6379/0"
REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
QUEUES: "queries,scheduled_queries,celery"
WORKERS_COUNT: 2
REDASH_SCHEMAS_REFRESH_SCHEDULE: 5
REDASH_DATE_FORMAT: YYYY/MM/DD
# for Amazon Athena
# REDASH_ADDITIONAL_QUERY_RUNNERS: redash.query_runner.athena
# ATHENA_PROXY_URL: http://redash-amazon-athena-proxy:4567/query
redis:
image: redis:2.8
postgres:
image: postgres:9.3
volumes:
- postgres-data:/var/lib/postgresql/data
nginx:
image: redash/nginx:latest
ports:
- "28080:80"
depends_on:
- server
links:
- server:redash
# for Amazon Athena
# redash-amazon-athena-proxy:
# build: redash-amazon-athena-proxy
volumes:
postgres-data: {}
networks:
default:
ipam:
config:
- subnet: 172.31.0.0/16
gateway: 172.31.0.1

こうしておいて下記のコマンドを順に実行すると、Redashが起動する。

docker-compose run --rm server create_db

docker-compose up -d

ホスト側のポート28080をwebサーバに割り当てているので、下記URLへアクセスするとRedashの初期画面が開く。

http://localhost:28080


Amazon Athenaへ接続できるようにする

Javaプロキシを立てて接続する方式になっている。上記ymlファイルで # for Amazon Athena とコメントアウトしているところをコメント解除するとAmazon Athenaが使えるようになる。(コメント解除後に再度 docker-compose up -d が必要)


参考にした情報

クエリランナーの有効化の方法とプロキシのURLがわからなくて苦労したので、辿ったファイルをメモしておく。

公式ブログ:

redashリポジトリ:

redash-amazon-athena-proxyリポジトリ:


接続設定(データソースの作成)

次の迷いポイントは接続設定だと思う。


MySQL

ホスト側でリッスンしているMySQLに接続するには、dockerネットワークのゲートウェイを指定する。

Host: 172.31.0.1

他はMySQLの設定に準ずる。


Amazon Athena

Amazon AthenaのテーブルはAWSコンソールなりで別途作成する必要がある。(事前に作成してなくても、接続自体は可能)

Redash側の設定に必要なもの:


  • AWSのアクセスキーID

  • AWSのシークレットアクセスキー

  • 利用するリージョン

  • Amazon Athena用stagingバケット


破棄

起動したRedashを停止するには、

docker-compose down

Postgresに保存したデータを含めて削除するには、

docker-compose down --volumes