M1チップ搭載のMacbookでRedash Dockerコンテナを起動する

M1チップ搭載のMacbookでRedash Dockerコンテナを起動する

開発しているサービスで、KPIをモニタリングするためにオープンソースBIのRedashを導入しようという話になりました。
そこで、まずは試しにローカルにRedashサーバーを構築してみることにしました。
Redash用のDockerイメージがあるので簡単に構築できるかと思いましたが、意外とM1チップ搭載のMacbookだとドキュメント通りにいかなかったのでメモします。

環境

  • MacBook Air (M1, 2020)
  • brewインストール済
  • Docker for Mac/docker-composeインストール済

Node.jsをインストールする

※nvmをインストール済でnode versionが14.xの方はスキップしてOKです。
ローカルでRedashを操作するためにはNode.jsが必要です。
ただし、LatestバージョンのNode.jsでパッケージをインストールしようとするとM1チップ搭載のMacではエラーが起きるため、Redashと互換性があるNode.jsのバージョン(14.x)をインストールします。

まずはNode.jsのバージョン管理ツールであるnvm(Pythonでいうpyenv)をインストールします。
こちらで紹介されている手順通りでOKです。

nvmをインストール後、バージョン14.18.2をインストールします。

nvm install 14.18.2

以下が表示されればOKです。

node -v

v16.14.2

RedashのDockerコンテナを起動する

こちらのGitHubリポジトリからRedashのDockerコンテナを作ります。

ただし、Apple M1チップ搭載のMacでDockerイメージをビルドする際は注意が必要です。
こちらで議論されている通り、現在はARM64アーキテクチャをサポートしていないのでmasterブランチのDockerfileをビルドしてもエラーになります。
有志の方がM1チップ搭載のMacでも動作するようにPRを出してくれているので、そのブランチのDockerfileでビルドすることにします。

# リポジトリをローカルにクローンする
git clone https://github.com/getredash/redash.git
cd redash/
# masterではなくfix-m1-buildブランチを使用する
git checkout fix-m1-build

また、MacOS Montereyだとport5000がシステムで既に使われているので、docker-compose.ymlでフォワード先のホストのportを変更します。
docker-compose.ymlの一部抜粋

services:
  server:
    <<: *redash-service
    command: dev_server
    depends_on:
      - postgres
      - redis
    ports:
      - "5001:5000"
      - "5678:5678"

あとは公式ドキュメント通りに実行すればOKです。

# コンテナの起動
# 初回はイメージをビルドするため結構時間がかかる
docker-compose up -d
# install node packages
yarn --frozen-lockfile
# Create tables
docker-compose run --rm server create_db
# build frontend aset
yarn build

注意
docker-compose down(コンテナを削除)すると再度create_dbが必要になります。
あくまでもdev用の設定のため、データの永続化まで考慮されていません。
データを消したくない場合はdocker-compose stop/startしましょう。
もし本番運用したい場合は別途PostgreSQLを用意し、環境変数REDASH_DATABASE_URLでそのDBを参照するようにしましょう。
Self hosted Redash with data persistance