Redash
ご存知、いわゆる BIツール の OSS 版の元祖(?)です。
インストール方法
Docker(Docker Compose)でのインストール方法を含めたインストール方法の概要は公式ページに載っています。
基本的には上記に従うだけでインストールができます。今回は Docker(Docker Compose)でインストールをしてみます。
具体的な手順
具体的にインストールの手順を追っていきます。
1. リポジトリから clone する
まずは Redash のリポジトリから clone をします。
2. docker-compose.production.yml ファイルを編集する
clone したファイル群の中にある docker-compose.production.yml
を編集します。docker-compose.yml
というファイルもあり、こちらは開発用(試験用)ということになっています。
アプリケーションを利用する側の場合には開発用を使う必要は特に無いと思いますので、いきなりproduction用のファイルを編集してよいと思います。
3. 編集した docker-compose.production.yml をベタ貼り
以下、私が編集した docker-compose.production.yml の内容をそのまま貼り付けます。少々長いですが省略すると分かりづらくなるので、全て書きます。
# This is an example configuration for Docker Compose. Make sure to atleast update # the cookie secret & postgres database password. # # Some other recommendations: # 1. To persist Postgres data, assign it a volume host location. # 2. Split the worker service to adhoc workers and scheduled queries workers. version: '2' services: server: image: redash/redash:3.0.0.b2996 # image: redash/redash container_name: my-redash-server hostname: my_redash_server command: server depends_on: - postgres - redis ports: - "31001:5000" # nginx で振り分けているのでこの値は実質的には意味がない 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_WEB_WORKERS: 4 REDASH_HOST: "http://redash.domain.name" REDASH_MAIL_SERVER: "smtp.gmail.com" REDASH_MAIL_PORT: 587 REDASH_MAIL_USE_TLS: "True" REDASH_MAIL_USERNAME: "YOUR_ACCOUNT_NAME@gmail.com" REDASH_MAIL_PASSWORD: "YOUR_PASSWORD" REDASH_MAIL_DEFAULT_SENDER: "Redash Admin <YOUR_ACCOUNT_NAME@gmail.com>" REDASH_DATE_FORMAT: "YYYY-MM-DD" REDASH_ALLOW_SCRIPTS_IN_USER_INPUT: "True" restart: always worker: image: redash/redash:3.0.0.b2996 # image: redash/redash container_name: my-redash-worker hostname: my_redash_worker 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_HOST: "http://redash.domain.name" REDASH_MAIL_SERVER: "smtp.gmail.com" REDASH_MAIL_PORT: 587 REDASH_MAIL_USE_TLS: "True" REDASH_MAIL_USERNAME: "YOUR_ACCOUNT_NAME@gmail.com" REDASH_MAIL_PASSWORD: "YOUR_PASSWORD" REDASH_MAIL_DEFAULT_SENDER: "Redash Admin <YOUR_ACCOUNT_NAME@gmail.com>" REDASH_DATE_FORMAT: "YYYY-MM-DD" REDASH_ALLOW_SCRIPTS_IN_USER_INPUT: "True" restart: always redis: image: redis:3.0-alpine container_name: my-redash-redis hostname: my_redash_redis restart: always postgres: image: postgres:9.5.6-alpine container_name: my-redash-postgres hostname: my_redash_postgres # volumes: # - /opt/postgres-data:/var/lib/postgresql/data volumes: - ./postgres-data:/var/lib/postgresql/data restart: always nginx: # image: redash/nginx:latest image: redash/nginx container_name: my-redash-nginx hostname: my_redash_nginx ports: - "31000:80" depends_on: - server links: - server:redash restart: always
4. 編集した箇所の詳細
編集した部分の細かな説明をします。
- 全てのコンテナに
restart: always
を付与- マシン再起動時などに改めて
docker-compose up
しなくて済むようにrestart: always
を付与します
- マシン再起動時などに改めて
redash
イメージは最新版を指定した- Redash の Docker イメージは
latest
ですと現在は 2.x が入りますが、3.x を試してみたいのでバージョンを明記して指定しました
- Redash の Docker イメージは
server
の外側ポートに30001
を指定した- コメントにもあるようにここは実質的にはあまり意味がないです
- 既存ポートとのバッティングを避けるための変更ぐらいでしょうか*1
server
のenvironment
のREDASH_COOKIE_SECRET
は可能ならば変えたほうがいい- 利用者の範囲が狭く、悪意のある操作などは起こりえないため、
REDASH_COOKIE_SECRET
はデフォルトのままにしました
- 利用者の範囲が狭く、悪意のある操作などは起こりえないため、
server
のenvironment
のREDASH_HOST
以下- メールのSMTPの設定です(Gmail を使用)
.env
での記述が推奨されていますが、ここではdocker-compose
に押し込んでいます
worker
のenvironment
のREDASH_HOST
以下- 上記の「
server
のenvironment
のREDASH_HOST
以下」と同じです
- 上記の「
postgres
のvolumes
の場所- これは単に保存場所を変えただけです
- 永続化のために
volumes
は設定したほうがいいでしょう
nginx
のports
の変更- ここのポート番号が外側にさらけ出されるポート番号になります
5. マイグレーションを行う
ここまで来ればあとは公式に従うだけです。マイグレーションをしましょう。
$ docker-compose -f docker-compose.production.yml run --rm server create_db
ここなんですが、私が実行した際には、1回目は以下のようなエラーが出てしまいます。
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused Is the server running on host "postgres" (172.18.0.2) and accepting TCP/IP connections on port 5432?
しかしその後めげずに再度実行すると以下のように無事終了します。起動順が悪くて(docker-compose の記述が悪くて) PostgreSQL が見つからないのでしょうか?
[2017-08-28 04:11:58,412][PID:1][INFO][alembic.runtime.migration] Running stamp_revision -> d1eae8b9893e
6. docker-compose up する
docker-compose up
すれば Redash
が起動するはずです。起動が確認でき、安定的に動作することが確認できたら、一度 docker-compose down
をして、-d
オプションを付けてデーモンで起動するとよいと思います。
$ docker-compose -f docker-compose.production.yml up
あとは公式サイトを参照する
起動できたならば Redash を運用していきます。公式のヘルプがまとまっていますので、そちらを読むといいでしょう。インストールでつまづいたり疑問に思ったことがあったりしたときには、インストールのヘルプも読むといいでしょう。
*1:それならばそもそも指定しないという方法も