Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

BIツール Redash v7をdockerでセットアップ

More than 1 year has passed since last update.

Redashの最新バージョン7がリリースされ、
久々に見たら結構セットアップ方法が変わっているので
dockerベースのセットアップメモ

古いバージョンのセットアップメモについてはこちら
https://qiita.com/suzukihi724/items/91950450734e4c9913cf

前提

・AWS EC2上で構築
・dockerベース
・OS:Ubuntu 18.04

セットアップ手順

・AWS Marketplaceにセットアップ済みのAMIが提供されているが、最新版を入れたいので、githubからDLして自分でセットアップします。

1) EC2に最低限必要なツールをセットアップ

とりあえずgitがあれば良い。
docker、docker-composeは後述のsetupスクリプトでインストール可能。

sudo apt-get install -y git

2) Git Hubからredash一式をgit clone

git clone https://github.com/getredash/redash.git

結構構成が変更されています。
従来は「docker-compose.production.yml」がありましたがなくなり、
それ相当のものは redash/setup/docker-compose.yml が該当。
※redashフォルダ直下のものはdev用です。

3) インストール

Redashのホームディレクトリを作成

sudo mkdir -p /opt/redash/

最新版では、下記のようなセットアップスクリプトが提供され、上記をベースに構築します。

#!/usr/bin/env bash
# This script setups dockerized Redash on Ubuntu 18.04.
set -eu

REDASH_BASE_PATH=/opt/redash

install_docker(){
    # Install Docker
    sudo apt-get update
    sudo apt-get -yy install apt-transport-https ca-certificates curl software-properties-common wget pwgen
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get update && sudo apt-get -y install docker-ce

    # Install Docker Compose
    sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

    # Allow current user to run Docker commands
    sudo usermod -aG docker $USER
}

create_directories() {
    if [[ ! -e $REDASH_BASE_PATH ]]; then
        sudo mkdir -p $REDASH_BASE_PATH
        sudo chown $USER:$USER $REDASH_BASE_PATH
    fi

    if [[ ! -e $REDASH_BASE_PATH/postgres-data ]]; then
        mkdir $REDASH_BASE_PATH/postgres-data
    fi
}

create_config() {
    if [[ -e $REDASH_BASE_PATH/env ]]; then
        rm $REDASH_BASE_PATH/env
        touch $REDASH_BASE_PATH/env
    fi

    COOKIE_SECRET=$(pwgen -1s 32)
    SECRET_KEY=$(pwgen -1s 32)
    POSTGRES_PASSWORD=$(pwgen -1s 32)
    REDASH_DATABASE_URL="postgresql://postgres:${POSTGRES_PASSWORD}@postgres/postgres"

    echo "PYTHONUNBUFFERED=0" >> $REDASH_BASE_PATH/env
    echo "REDASH_LOG_LEVEL=INFO" >> $REDASH_BASE_PATH/env
    echo "REDASH_REDIS_URL=redis://redis:6379/0" >> $REDASH_BASE_PATH/env
    echo "POSTGRES_PASSWORD=$POSTGRES_PASSWORD" >> $REDASH_BASE_PATH/env
    echo "REDASH_COOKIE_SECRET=$COOKIE_SECRET" >> $REDASH_BASE_PATH/env
    echo "REDASH_SECRET_KEY=$SECRET_KEY" >> $REDASH_BASE_PATH/env
    echo "REDASH_DATABASE_URL=$REDASH_DATABASE_URL" >> $REDASH_BASE_PATH/env
}

setup_compose() {
    REQUESTED_CHANNEL=stable
    LATEST_VERSION=`curl -s "https://version.redash.io/api/releases?channel=$REQUESTED_CHANNEL"  | json_pp  | grep "docker_image" | head -n 1 | awk 'BEGIN{FS=":"}{print $3}' | awk 'BEGIN{FS="\""}{print $1}'`

    cd $REDASH_BASE_PATH
    REDASH_BRANCH="${REDASH_BRANCH:-master}" # Default branch/version to master if not specified in REDASH_BRANCH env var
    wget https://raw.githubusercontent.com/getredash/redash/${REDASH_BRANCH}/setup/docker-compose.yml
    sed -ri "s/image: redash\/redash:([A-Za-z0-9.-]*)/image: redash\/redash:$LATEST_VERSION/" docker-compose.yml
    echo "export COMPOSE_PROJECT_NAME=redash" >> ~/.profile
    echo "export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml" >> ~/.profile
    export COMPOSE_PROJECT_NAME=redash
    export COMPOSE_FILE=$REDASH_BASE_PATH/docker-compose.yml
    sudo docker-compose run --rm server create_db
    sudo docker-compose up -d
}

インストール(セットアップ)は上記内容のsetup.shスクリプトを実行するのみ

sh redash/setup/setup.sh

この中で実行されるdocker-compose.ymlは以下

メインのredash serverのほか、scheduler、scheduled_worker、adhoc_workerと言うコンポーネントで構成されている。
その他キャッシュDBにredis、通常DBにPostgres、フロントにnginx。

Postgresのデータはデフォルトでホストの/opt/redash/postgres-dataにマウントされ永続化されている。

version: '2'
x-redash-service: &redash-service
  image: redash/redash:7.0.0.b18042
  depends_on:
    - postgres
    - redis
  env_file: /opt/redash/env
  restart: always
services:
  server:
    <<: *redash-service
    command: server
    ports:
      - "5000:5000"
    environment:
      REDASH_WEB_WORKERS: 4
  scheduler:
    <<: *redash-service
    command: scheduler
    environment:
      QUEUES: "celery"
      WORKERS_COUNT: 1
  scheduled_worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "scheduled_queries,schemas"
      WORKERS_COUNT: 1
  adhoc_worker:
    <<: *redash-service
    command: worker
    environment:
      QUEUES: "queries"
      WORKERS_COUNT: 2
  redis:
    image: redis:5.0-alpine
    restart: always
  postgres:
    image: postgres:9.5-alpine
    env_file: /opt/redash/env
    volumes:
      - /opt/redash/postgres-data:/var/lib/postgresql/data
    restart: always
  nginx:
    image: redash/nginx:latest
    ports:
      - "80:80"
    depends_on:
      - server
    links:
      - server:redash
    restart: always

うまくいけば各コンテナが起動する

CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                      NAMES
XXXXXXXXXX        nginx:latest                 "nginx -g 'daemon of…"   6 hours ago         Up 3 hours          0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   redash_nginx_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          5000/tcp                                   redash_scheduler_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          5000/tcp                                   redash_scheduled_worker_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          5000/tcp                                   redash_adhoc_worker_1
XXXXXXXXXX        redash/redash:7.0.0.b18042   "/app/bin/docker-ent…"   6 hours ago         Up 3 hours          0.0.0.0:5000->5000/tcp                     redash_server_1
XXXXXXXXXX        postgres:9.5-alpine          "docker-entrypoint.s…"   6 hours ago         Up 3 hours          5432/tcp                                   redash_postgres_1
XXXXXXXXXX        redis:5.0-alpine             "docker-entrypoint.s…"   6 hours ago         Up 3 hours          6379/tcp                                   redash_redis_1

4) アクセス

ホストサーバのIPにアクセスすれば利用可能
初回のみAdminユーザ設定画面となる。

image.png

5) SSL設定

デフォルトでは80 portのHTTPですが、nginxの設定でSSL化も可能。
手順は下記。
https://gist.github.com/arikfr/64c9ff8d2f2b703d4e44fe9e45a7730e

独自の証明書を利用する場合は、
/opt/redash/nginx/nginx.conf
の下記の要素を変更し、格納したcrt、keyファイルのパスに合わせる

・ssl_certificate
・ssl_certificate_key

※その他、「server_name」も自身のドメインに変更

httpsがhttpにリダイレクトされてしまう場合

nginxプロキシが、redashアプリ側に適切なプロトコルを通知できてないらしい。下記で解消。

nginx.conf 61Lの

proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;

proxy_set_header X-Forwarded-Proto $scheme;

に変更する

参考:
https://github.com/getredash/redash/issues/4048

6) sqliteファイルの読み込み

DBインポートでsqliteをサポートしているが、docker実装の場合、sqliteファイルの格納先をマウントする必要がある。

具体的には、docker-composeファイルのredash server、scheduled_worker、adhoc_workerの各要素にて、volumeタグでホスト上の格納場所とdocker内のpathを対応づける必要あり。

suzukihi724
各種備忘録
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away