Raspberry Pi4でRe:dashを動かしてみた

Raspberry Pi4 8GBモデルでRedashを動かす事が出来たので、備忘録として残します。

1、用意するもの


・Raspberry Pi4 8GBモデル

※Redashはメモリ消費量が多いので、必ず8GBモデルを購入してください。

・ファン付きケース

・microSD(32GB以上)

・電源・そのほか起動時に必要なもの

2、OSの準備など


以下の記事を参考に、OSのセットアップを実行します。(3-2を参照)

3、redash設定・起動


3-1、パッケージインストール・ディレクトリ作成

任意のディレクトリに移動して、以下のコマンドを実行します。

sudo apt install pwgen
REDASH_BASE_PATH=./redash_docker
sudo mkdir -p $REDASH_BASE_PATH
sudo chown $USER:$USER $REDASH_BASE_PATH
mkdir $REDASH_BASE_PATH/postgres-data
touch $REDASH_BASE_PATH/env

3-2、各種パラメータの生成

以下のコマンドを実行して、必要なパラメータを生成します。

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

3-3、ファイルへの書き出し

以下のコマンドを実行して「env」ファイルへ設定を書き出します。

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

3-4、docker-composeの生成

以下のコマンドを実行してdocker-compose.ymlファイルを作成します。

cd $REDASH_BASE_PATH
cat <<'EOF' > docker-compose.yml
version: '2'
x-redash-service: &redash-service
  image: public.ecr.aws/q4i3f9f7/redash:8.0.0
  depends_on:
    - postgres
    - redis
  env_file: ./env
  restart: always
services:
  server:
    <<: *redash-service
    command: server
    ports:
      - "5000:5000"
    environment:
      REDASH_WEB_WORKERS: 4
      GUNICORN_CMD_ARGS: "-k gevent"
  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: ./env
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    restart: always
EOF

3-5、Redashの起動

以下のコマンドを実行して、DBの作成・Redashの起動を行います。

sudo docker-compose run --rm server create_db
sudo docker-compose up -d

3-6、ページへのアクセス

Webブラウザーで以下のURLにアクセスします。

http://<Raspberry PiのIPアドレス>:5000/

4、余談など


4-1、ECRパブリックリポジトリの使用

今回はEC2で作成したDockerイメージを共有するために、ECRを使用しています。

詳しい利用方法については以下を参照いただければと思います。

ECRをパブリックレジストリとして利用可能になりました! #reinvent

4-2、Dockerイメージの作成

当初、DockerイメージをRaspberry Pi4で作成しようとしていましたが、正常にビルドできなかったため、EC2のt4g.mediumインスタンスを用いてビルドしています。

その際のコマンドは以下になります。

4-2-1、ECR認証情報設定

aws configure
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/xxxxxxxx

4-2-2、Baseイメージダウンロード

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

4-2-3、Base_Dockerイメージ作成・確認

docker build -t redash/base:debian ./docker/base/debian/.
docker images

4-2-4、Redashダウンロード

git clone https://github.com/getredash/redash.git -b v8.0.0

4-2-5、コンポーネントの削除

以下のコンポーネントを削除せずにビルドを行うとエラーが発生し、ビルドが中断しました。恐らく、Arm版のパッケージではなくx86版のパッケージが読み込まれることが原因と思われます。

その為、エラーの発生原因となるコンポーネントを調査し、ビルド時に読み込まれないよう、設定ファイルから記述を削除しています。

除外したコンポーネントを使用したクエリは実行できないと思われます。除外したことによる影響は未検証です。

sed -i -e '/^ibm-db/d' ./redash/requirements_all_ds.txt
sed -i -e '/^pymssql/d' ./redash/requirements_all_ds.txt
sed -i -e '/^pymapd/d' ./redash/requirements_all_ds.txt
sed -i -e '/^azure-kusto-data/d' ./redash/requirements_all_ds.txt

4-2-6、Redash_Dockerイメージ作成・確認

docker build -t redash ./redash/.
docker images

4-2-7、ECRへプッシュ

「public.ecr.aws/xxxxxxxx/」の部分はECRで払い出された値を使用します。

docker tag redash:latest public.ecr.aws/xxxxxxxx/redash:8.0.0
docker push public.ecr.aws/xxxxxxxx/redash:8.0.0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)