tk_ch’s blog

インフラエンジニアのブログ

RedashV8をCentOS7にインストールする

ダッシュボードツールOSSであるRedashを触りたくなったので、使い慣れているCentOS7にインストールしたい。
しかし、Redash公式のセットアップ手順にはCentOS向けの手順が記載されていない。
Ubuntu 18.04向けの手順を参考に、CentOS7にインストールしたのでメモ。

環境

・CentOS7
・Redash 8.0.0
・Docker 20.10.9
・Docker Compose 1.29.2

セットアップ方法の検討

Redash公式のセットアップ手順を見たところ、参考になりそうなセットアップ方法が2つあった。

方法1Dockerイメージのビルドから行う方法

OS指定の記載はなく、Redashコンテナのイメージをビルドし、起動する方法。まずはこちらを試した。
→ビルド中に以下のエラーが出て失敗した。RedashV8は2022/03/28時点で最新安定版だが、リリースは2019-10-27なので、Dockerfileが古くなっているのかもしれない。ここを追うのは筋が悪そうなので、没。

ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-Komeif/pymapd/setup.py'"'"'; __file__='"'"'/tmp/pip-install-Komeif/pymapd/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
         cwd: /tmp/pip-install-Komeif/pymapd/

方法2 Ubuntu 18.04上にDockerComposeで展開する方法

Ubuntu 18.04をDockerホストとして、セットアップスクリプトを使ってRedashコンテナを立ち上げる手順。
今回は慣れているCentOS7で構築したいので、そのままは使えない。
→方法1がダメだったので、このセットアップスクリプトを参考に作業を行うことにした。

セットアップ作業

セットアップスクリプトの確認

セットアップスクリプトをダウンロードして、何をしているのか確認する。

# wget https://github.com/getredash/setup/archive/refs/heads/master.zip

# unzip master.zip

# ls -l setup-master/
合計 16
-rw-r--r-- 1 root root 1311 10月 28  2019 LICENSE
-rw-r--r-- 1 root root 1294 10月 28  2019 README.md
drwxr-xr-x 2 root root  130 10月 28  2019 data
-rw-r--r-- 1 root root 2354 10月 28  2019 packer.json
-rw-r--r-- 1 root root 3106 10月 28  2019 setup.sh

setup.shの中身を見ると、4つの関数を実行しており、それぞれ以下のような処理をしている。

・install_docker() :dockerとdocker composeのインストール
・create_directories():Redashコンテナがマウントするディレクトリとして、/opt/redashと/opt/redash/postgres-dataを作成する
・create_config():パスワード等を生成して、redashコンテナが使う環境変数として、/opt/redash/envファイルに書き込む
・setup_compose():data/docker-compose.ymlのimage名をstable最新版のものに置換して「docker-compose -p redash -f /opt/redash/docker-compose.yml compose.yaml up -d」を実行する。

→この内容に相当する作業をCentOS7で実行してみる。

install_docker()相当の作業:Docker、Docker Composeのインストール

Docker公式通りにDockerとDocker Composeをインストールした。

create_directories()相当:redash用ディレクトリ作成

ディレクトリを作成する。

# mkdir -p /opt/redash/postgres-data

# ls -l /opt/redash/postgres-data
合計 0

create_config()相当:Redashコンテナ用環境変数設定

パスワードを適当に生成する。

# yum -y install pwgen

# pwgen -1s 32
ohJehIt7GfyCPG28UPbt3BpGFsCZuiBz

# pwgen -1s 32
ghPWRmDB7wQJqXKyVYERWyaRbaGkY73E

envファイルを作成する。

# export REDASH_BASE_PATH=/opt/redash
# 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" >> $REDASH_BASE_PATH/env
# echo "REDASH_COOKIE_SECRET=ohJehIt7GfyCPG28UPbt3BpGFsCZuiBz" >> $REDASH_BASE_PATH/env
# echo "REDASH_SECRET_KEY=ghPWRmDB7wQJqXKyVYERWyaRbaGkY73E" >> $REDASH_BASE_PATH/env
# echo "REDASH_DATABASE_URL=postgresql://postgres:postgres@postgres/postgres" >> $REDASH_BASE_PATH/env

#cat /opt/redash/env
PYTHONUNBUFFERED=0
REDASH_LOG_LEVEL=INFO
REDASH_REDIS_URL=redis://redis:6379/0
POSTGRES_PASSWORD=postgres
REDASH_COOKIE_SECRET=ohJehIt7GfyCPG28UPbt3BpGFsCZuiBz
REDASH_SECRET_KEY=ghPWRmDB7wQJqXKyVYERWyaRbaGkY73E
REDASH_DATABASE_URL=postgresql://postgres:postgres@postgres/postgres

setup_compose()相当:compose起動

最新安定版バージョンのコンテナイメージ名を確認する。「redash/redash:8.0.0.b32245」であることが分かる。

# curl -s "https://version.redash.io/api/releases?channel=stable" | jq | grep "docker_image" | head -n 1
    "docker_image": "redash/redash:8.0.0.b32245"

composeに書かれているバージョンも「redash/redash:8.0.0.b32245」なので、置換する必要はない。

# grep image ./setup-master/data/docker-compose.yml
  image: redash/redash:8.0.0.b32245
    image: redis:5.0-alpine
    image: postgres:9.6-alpine
    image: redash/nginx:latest

redashのディレクトリにcomposeファイルをコピーする。

# cp -pr ./setup-master/data/docker-compose.yml /opt/redash/

DBの初期設定をする。

# docker-compose -p redash -f /opt/redash/docker-compose.yml run --rm server create_db
Creating network "redash_default" with the default driver
Creating redash_postgres_1 ... done
Creating redash_redis_1    ... done
Creating redash_server_run ... done
[2021-10-14 11:14:49,742][PID:1][INFO][alembic.runtime.migration] Context impl PostgresqlImpl.
[2021-10-14 11:14:49,743][PID:1][INFO][alembic.runtime.migration] Will assume transactional DDL.
[2021-10-14 11:14:49,760][PID:1][INFO][alembic.runtime.migration] Running stamp_revision  -> e5c7a4e2df4d

Redashコンテナを起動する。

# docker-compose -p redash -f /opt/redash/docker-compose.yml up -d
redash_postgres_1 is up-to-date
redash_redis_1 is up-to-date
Creating redash_server_1           ... done
Creating redash_scheduler_1        ... done
Creating redash_adhoc_worker_1     ... done
Creating redash_scheduled_worker_1 ... done
Creating redash_nginx_1            ... done

# docker ps
CONTAINER ID   IMAGE                        COMMAND                  CREATED              STATUS              PORTS                         NAMES
9dc876b47599   redash/nginx:latest          "nginx -g 'daemon of…"   38 seconds ago       Up 36 seconds       0.0.0.0:80->80/tcp, 443/tcp   redash_nginx_1
0ccf0f04956b   redash/redash:8.0.0.b32245   "/app/bin/docker-ent…"   40 seconds ago       Up 38 seconds       0.0.0.0:5000->5000/tcp        redash_server_1
f123d68982f5   redash/redash:8.0.0.b32245   "/app/bin/docker-ent…"   40 seconds ago       Up 38 seconds       5000/tcp                      redash_scheduled_worker_1
8c3be8e35684   redash/redash:8.0.0.b32245   "/app/bin/docker-ent…"   40 seconds ago       Up 38 seconds       5000/tcp                      redash_adhoc_worker_1
937e9baff0e9   redash/redash:8.0.0.b32245   "/app/bin/docker-ent…"   40 seconds ago       Up 38 seconds       5000/tcp                      redash_scheduler_1
7ae8029caad1   postgres:9.6-alpine          "docker-entrypoint.s…"   About a minute ago   Up About a minute   5432/tcp                      redash_postgres_1
96935d741a4b   redis:5.0-alpine             "docker-entrypoint.s…"   About a minute ago   Up About a minute   6379/tcp                      redash_redis_1

→ブラウザからhttp://DockerホストのIPに接続すると、Redashのトップページが表示される。

Redashコンテナの起動・停止手順

以下の手順で起動・停止できる。
・起動

# docker-compose -p redash -f /opt/redash/docker-compose.yml up -d

・停止

# docker-compose -p redash -f /opt/redash/docker-compose.yml down