Metabaseをソースコードからビルド(Docker利用)

Metabaseをビルドしようとしたのですが、Clojureに慣れてなくて環境構築詰まったので、Dockerでビルドしてみました。

環境前提

  • Docker
  • Git

Metabaseソースの取得

Gitでソースコードクローンします。

git clone https://github.com/metabase/metabase.git
cd metabase/
# ビルドしたいバージョンのタグをチェックアウト
git checkout -f v1.43.5

ビルド用のDockerコンテナ起動

こちらからビルド用に使うコンテナ選びます。

java-version

https://hub.docker.com/_/clojure

docker run -it --rm \
  -v $(pwd):/tmp/metabase \
  --workdir /tmp/metabase \
  clojure:openjdk-11-tools-deps-slim-bullseye /bin/bash

ビルド用の準備

上記の docker run/bin/bash を渡しているのでBashのプロンプト待ちになります。

以下のコマンドを打っていきます。マシンスペック次第ですが、ビルド部分は時間かかると思います。

# 必要モジュールインストール
apt update && apt install -y curl gnupg

# nodejsのインストール
curl -sL https://deb.nodesource.com/setup_lts.x | bash -
apt update && apt install -y nodejs

# yarnインストール
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg |  apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" |  tee /etc/apt/sources.list.d/yarn.list
apt update && apt install -y yarn

# ビルド
yarn
./bin/build

ビルドが完了すると以下のように表示されます。

      2022-08-13 06:22:03,548 INFO metabase.core :: 
      Metabase v0.43.6-SNAPSHOT (7a895ac ?) 
      
      Copyright © 2022 Metabase, Inc. 
      
      Metabase Enterprise Edition extensions are PRESENT.
      
      Usage of Metabase Enterprise Edition features are subject to the Metabase Commercial License. See https://www.metabase.com/license/commercial/ for details.
          Finished compilation in 29.2 seconds.
        Copy resources
          Copy src
          Copy shared/src
          Copy resources
        Create uberjar
      Building uber jar: /tmp/metabase/target/uberjar/metabase.jar
          Created uberjar in 16.6 seconds.
        Update META-INF/MANIFEST.MF
        Built target/uberjar/metabase.jar in 49.3 seconds.
    Uberjar built successfully.
  All build steps finished.

アーティファクトの確認と実行

以下のようにjarファイルが作成されています。

root@13499f53b576:/tmp/metabase# ls -lh target/uberjar/metabase.jar 
-rw-r--r-- 1 root root 232M Aug 13 06:22 target/uberjar/metabase.jar

早速実行することでmetabaseが立ち上がります。

java -jar ./target/uberjar/metabase.jar 

http://localhost:3000 で起動してアクセスできました。

エラー対応

途中で以下のエラーが発生しました。

2022-08-13 14:41:45,948 ERROR metabase.core :: Metabase Initialization FAILED
liquibase.exception.ValidationFailedException: Validation Failed:
     1 change sets check sum
          migrations/000_migrations.yaml::268::rlotun was: 8:4ccc4d50f9b233bc6515780d9cae360b but is now: 8:9da2f706a7cd42b5101601e0106fa929

        at liquibase.changelog.DatabaseChangeLog.validate(DatabaseChangeLog.java:296)

DBのmigrationが失敗しているようなので、以下のコマンドを打ったところ解消したので書いておきます。

java -jar ./target/uberjar/metabase.jar migrate force

直ったようです。この後改めてmetabase起動したら問題無く起動できました。

2022-08-13 14:44:17,373 INFO db.setup :: Setting up Liquibase...
2022-08-13 14:44:17,586 INFO db.setup :: Liquibase is ready.