构建 Metabase
本文档将向您展示如何构建和运行您自己的 Metabase,以便您可以对其进行操作或在开发中测试功能。您也可以通过使用预构建的 Docker 镜像来运行 Metabase 的开发分支。
安装先决条件
如果您使用的是 macOS,请先通过运行以下命令安装 Xcode 命令行工具:
xcode-select --install
要完成 Metabase 代码的任何构建,您需要安装以下内容:
-
Clojure (https://clojure.org) - 按照适用于您的操作系统的指南安装最新版本
-
Java Development Kit JDK (https://adoptopenjdk.net/releases.html) - 您需要安装 JDK 21(有关 Java 版本的更多信息)
-
Node.js (https://node.org.cn/) - 最新 LTS 版本
-
Yarn Node.js 包管理器 - 最新版本 1.x - 您可以通过运行以下命令在任何操作系统上安装它:
npm install --global yarn
在最新的稳定版 Ubuntu/Debian 上,除 Clojure 外,所有上述工具都可以通过以下方式安装:
sudo apt install openjdk-21-jdk nodejs && sudo npm install --global yarn
如果您在机器上安装了多个 JDK 版本,请确保在构建前使用以下命令切换您的 JDK:
sudo update-alternatives --config java
然后在菜单中选择 Java 21。
在 M1 Apple 电脑上运行
如果您正在较新的 Apple M1 电脑上进行开发,请注意,当前的 NodeJS LTS 已原生支持 arm 架构。但是,在尝试构建前端之前,请确保您已安装 Rosetta 2。
/usr/sbin/softwareupdate --install-rosetta (root permission not required)
或者
/usr/sbin/softwareupdate --install-rosetta --agree-to-license (root permission required)
如果您运行的是 Windows,请使用 WSL
如果您在 Windows 上进行开发,则应在 Linux 的 Windows 子系统 (WSL) 上运行 Ubuntu,并遵循 Ubuntu/Linux 的说明。
在远程容器中使用 VS Code 进行开发
或者,无需显式安装上述依赖项,请遵循使用 Visual Studio Code 及其远程容器支持的指南。
克隆 Metabase 仓库
安装完所有构建工具后,您需要从 GitHub 克隆 Metabase 仓库。
-
创建一个名为 `workspace` 的文件夹(您可以随意命名),其中将存储 Metabase 代码文件。
-
打开您的终端应用程序,然后使用以下命令导航到您的工作区文件夹:
cd ~/workspace
- 运行以下命令,使用 GitHub 上 Metabase 仓库的 URL 将 Metabase “克隆”到此文件夹:
git clone https://github.com/metabase/metabase
选择您想要运行的分支,然后运行它:
这是您将反复使用的部分。
Metabase 的“官方”分支称为 `master`,其他功能开发分支在获得批准后会合并到其中。因此,如果您想在合并之前尝试某个功能,您需要知道该分支的名称,以便切换到它。操作方法如下:
-
打开您的终端应用程序。
-
导航到您存储 Metabase 代码的位置。如果您严格按照本指南操作,则可以通过输入以下命令到达:
cd ~/workspace/metabase -
通过运行以下命令“拉取”最新的代码:
git pull您应该每次都这样做,以确保您的计算机上拥有所有最新的 Metabase 分支和代码。这也是您在有人修改功能分支时获取更新的方式。
-
通过转到 GitHub 上该功能的“拉取请求”页面并从那里复制分支名称来查找您想要运行的分支的名称。下面是一个示例 PR 页面,分支名称为 `fix-native-dataset-drill-popover`。
-
通过运行以下命令切换到或“检出”该分支:
git checkout <branch-name>如果我们想切换到上一个步骤中的分支,我们将运行:
git checkout fix-native-dataset-drill-popover当您想切换回 `master` 时,运行:
git checkout master
运行 Metabase
- 现在,我们将使用以下命令启动 Metabase 的后端服务器:
clojure -M:run
完成后,您应该会看到一条消息,内容类似“Metabase initialization complete.”。请保持您的终端应用程序中的此选项卡运行,否则 Metabase 将停止运行。
- 打开您的终端应用程序的另一个选项卡或窗口,然后使用以下命令“构建”前端(所有 UI):
yarn build-hot
如果您在此步骤遇到问题,请确保您使用的是 Node.js (https://node.org.cn/) 的 LTS 版本。
- 在您选择的网页浏览器中,导航到 `https://:3000`,您应该在那里看到 Metabase!
这是您计算机上的本地“服务器”,3000 是 Metabase 运行的“端口”。您可以在自己的计算机上拥有多个不同的应用程序在不同的端口上运行。请注意,如果您与他人共享以 `localhost` 开头的任何 URL,他们将无法访问,因为您的计算机默认情况下出于安全原因不会对整个世界开放。
要切换到其他分支或返回 `master`,请打开另一个终端选项卡,并重复步骤 6、7 和 8。如果 Metabase 尚未运行,您还需要再次完成步骤 9 和 10。如果它已经运行,前端将自动重建。您可以通过切换到终端中的该选项卡来检查其进度,通常需要大约 15 秒,但这取决于您的硬件。
关闭 Metabase
如果您想让 Metabase 停止运行,您可以退出终端程序,或者转到运行后端的选项卡并按 `Ctrl+C` 停止后端。大多数情况下,您不需要这样做来切换分支,但在某些情况下,您要查看的更改或功能与后端有关,您可能需要使用 `Ctrl+C` 停止后端,然后通过再次完成步骤 9 来重新启动它。
构建 Metabase Uberjar
整个 Metabase 应用程序被编译并组装成一个 .jar 文件,该文件可以在任何现代 JVM 上运行。有一个脚本将执行过程中的所有步骤,并为您输出最终的制品。您可以在运行构建脚本之前传递 MB_EDITION 环境变量来选择您想要构建的版本。如果您不提供值,则默认为 `oss`,它将构建社区版。
./bin/build.sh
运行构建脚本后,只需在 `target/uberjar` 中查找输出的 .jar 文件即可,一切准备就绪。
在容器化环境中构建 Metabase Uberjar
如果您想在不将 Clojure、Java 和 Node.js 安装到主机机器上的情况下构建 Metabase,您可以通过运行以下命令在容器中构建 Uberjar:
DOCKER_BUILDKIT=1 docker build --output container-output/ .
确保在执行命令之前您的 Docker Daemon 正在运行。运行命令后,您将在 `./container-output/app/metabase.jar` 找到 Metabase JAR 文件。
阅读其他版本的 Metabase 的文档。