Metabase学习教程:系统管理-4-创新互联

序列化:在Metabase实例间迁移 如何使用Metabase的序列化功能将问题、仪表板、集合、设置等从一个Metabase实例复制到新的Metabase实例。 Metabase序列化

序列化仅在商业版上可用(仅在自托管计划上)。

创新互联主营城中网站建设的网络公司,主营网站建设方案,成都app开发,城中h5微信小程序定制开发搭建,城中网站营销推广欢迎城中等地区企业咨询

许多客户在迁移到本地部署的商业版时,需要上载预定义的问题或仪表板,以设置新的Metabase实例或新的数据库连接。本文将介绍如何:

  1. 创建一组默认的问题和仪表板。
  2. 导出那些仪表板。
  3. 将这些仪表板重新导入新实例。

具体来说,我们将使用dumploadMetabase中的命令序列化功能执行第2步和第3步,再加上一点手动管理导出的文件。

我们将使用Docker运行我们的Metabase环境,并使用开源PostgresSQL为了我们应用程序数据库。我们不建议使用默认值H2用于生产的数据库(H2随Metabase一起提供,因为它是一个轻量级数据库,使用Metabase很容易让用户启动和运行)

计划

我们将创建一个Metabase实例(我们的原始环境),创建一个仪表板,并将该仪表板加载到一个新的Metabase实例(我们的目标环境)中。计划如下:

  1. 创建一个名为metanet的专用网络.
  2. 启动Metabase的两个实例:origin和target.
  3. 在原始环境中创建仪表板和集合.
  4. 从源环境转储数据.
  5. 将源转储加载到目标环境中.
  6. 验证仪表板和集合是否已加载到目标环境中.
先决条件

你需要Docker安装在您的计算机上。

步骤1-创建专用网络

要创建名为“metanet”的专用网络,请从您选择的终端运行以下命令:

docker network create metanet

您可以确认网络是用以下方式创建的:

docker network ls

网络将有一个本地作用域和一个网桥驱动程序。

第2步-启动Metabase的两个实例

启动两个称为origintarget(尽管你可以随意命名这些环境)。请注意,我们使用--rm -d在创建这些Docker容器时,当您停止它们并在后台运行时,它们都会被移除。请随意更改这些标志以修改该行为。

Origin环境

创建Postgres数据库:

docker run --rm -d --name postgres \

-p 5433:5432 \

-e POSTGRES_USER=metabase \

-e POSTGRES_PASSWORD=knockknock \

--network metanet \

 postgres:12

创建Metabase源实例,并将其连接到我们刚刚创建的Postgres数据库:

docker run --rm -d --name metabase-origin \

-p 5001:3000 \

-e MB_DB_TYPE=postgres \

-e MB_DB_DBNAME=metabase \

-e MB_DB_PORT=5432 \

-e MB_DB_USER=metabase \

-e MB_DB_PASS=knockknock \

-e MB_DB_HOST=postgres \

--network metanet \

 metabase/metabase-enterprise:v1.44.6

您可以检查容器的日志以查看容器的进度:

docker logs metabase-origin

一旦看到包含“Metabase初始化完成”的行,就可以打开浏览器http://localhost:5001查看Metabase实例。

Target环境

设置目标环境与此类似。在我们的metanet网络上,我们将设置一个Postgres数据库作为我们的应用程序数据库,然后在另一个Docker容器中启动Metabase的另一个实例。

注意以下更改:

  • Postgres(5434)和Metabase服务器(5002)的端口
  • 实例名称:metabase-origin和metabase-target

应用程序数据库:

docker run --rm -d --name postgres-target \

-p 5434:5432 \

-e POSTGRES_USER=metabase \

-e POSTGRES_PASSWORD=knockknock \

 --network metanet postgres:12

Metabase实例:

docker run --rm -d --name metabase-target \

-p 5002:3000 \

-e MB_DB_TYPE=postgres \

-e MB_DB_DBNAME=metabase \

-e MB_DB_PORT=5432 \

-e MB_DB_USER=metabase \

-e MB_DB_PASS=knockknock \

-e MB_DB_HOST=postgres-target \

--network metanet \

 metabase/metabase-enterprise:v1.44.6

在我们的Metabase实例完成初始化后,现在应该有两个Metabase环境启动并运行:

  • metabase-origin 位于http://localhost:5001
  • metabase-target位于http://localhost:5002
将用户添加到我们的metabase-origin环境

让我们向metabase-origin实例添加一个管理帐户和两个基本用户。

你可以手动将用户添加到Metabase环境(例如,在Metabase应用程序中),但下面是一个快速bash脚本,它创建一个管理用户(初始用户)和两个基本用户:

#!/bin/sh

ADMIN_EMAIL=${MB_ADMIN_EMAIL:-admin@metabase.local}

ADMIN_PASSWORD=${MB_ADMIN_PASSWORD:-Metapass123}

METABASE_HOST=${MB_HOSTNAME}

METABASE_PORT=${MB_PORT:-3000}

echo "⌚︎ Waiting for Metabase to start"

while (! curl -s -m 5 http://${METABASE_HOST}:${METABASE_PORT}/api/session/properties -o /dev/null); do sleep 5; done

echo "😎 Creating admin user"

SETUP_TOKEN=$(curl -s -m 5 -X GET \

-H "Content-Type: application/json" \

http://${METABASE_HOST}:${METABASE_PORT}/api/session/properties \

| jq -r '.["setup-token"]'

)

MB_TOKEN=$(curl -s -X POST \

-H "Content-type: application/json" \

http://${METABASE_HOST}:${METABASE_PORT}/api/setup \

-d '{

"token": "'${SETUP_TOKEN}'",

"user": {

"email": "'${ADMIN_EMAIL}'",

"first_name": "Metabase",

"last_name": "Admin",

"password": "'${ADMIN_PASSWORD}'"

},

"prefs": {

"allow_tracking": false,

"site_name": "Metawhat"

}

}' | jq -r '.id')

echo -e "\n👥 Creating some basic users: "

curl -s "http://${METABASE_HOST}:${METABASE_PORT}/api/user" \

-H 'Content-Type: application/json' \

-H "X-Metabase-Session: ${MB_TOKEN}" \

-d '{"first_name":"Basic","last_name":"User","email":"basic@somewhere.com","login_attributes":{"region_filter":"WA"},"password":"'${ADMIN_PASSWORD}'"}'

curl -s "http://${METABASE_HOST}:${METABASE_PORT}/api/user" \

-H 'Content-Type: application/json' \

-H "X-Metabase-Session: ${MB_TOKEN}" \

-d '{"first_name":"Basic 2","last_name":"User","email":"basic2@somewhere.com","login_attributes":{"region_filter":"CA"},"password":"'${ADMIN_PASSWORD}'"}'

echo -e "\n👥 Basic users created!"

你需要安装jq以处理此脚本中的JSON。将上述代码另存为create_users.sh,并使其可执行(chmod +x create_users.sh),然后运行:

MB_HOSTNAME=localhost MB_PORT=5001 ./create_users.sh

当您的 metabase-origin实例启动,并且您的用户已创建,打开http://localhost:5001并以您创建的管理员用户身份登录。用户ID为admin@metabase.local密码是Metapass123.

您应该看到Metabase的一个新实例(图1)。

图1。Metabase的新实例。

登录后,激活许可证密钥.

步骤3-在origin环境中创建仪表板和集合

我们需要一些应用程序数据来导出,所以让我们使用包括在Metabase中的示例数据库。或者,让Metabase为我们创建一些仪表板!

如图2所示,在Try These X-Rays Based On Your Data部分,单击带有黄色闪电这说明A look at your Products table。Metabase将为您生成一组问题,您可以将这些问题保存为仪表板。

图2。Metabase包含的示例数据库中Products表的X射线。

单击保存此按钮,Metabase将把仪表板及其问题保存在收集有头衔的A look at your Products table.

此集合将保存到名为自动生成的仪表板。您可以通过单击导航栏左上角的Metabase徽标返回主屏幕来找到此集合。从主页,在我们的分析部分,单击自动生成的仪表板第节。从那里你应该可以看到收藏品A look at your Products table(图3)。

图3.一个名为看看你的产品表.

接下来,创建一个新的集合。你想叫什么都行;我们会用这个令人兴奋的名字默认集合,并保存到我们的分析收藏。

图4。创建一个新的集合,名为默认集合.

那我们就把A look at your Products table我们新创建的系列默认集合.

步骤4-从origin 环境Dump

这是我们实际开始使用Metabase的序列化功能的地方。

由于我们的Metabase源实例设置了一些问题,现在是时候转储这些数据并将其加载到我们的Metabase目标环境中了。这样,我们就不必在目标环境中手动重新创建默认集合。

首先在/tmp公司调用的目录Metabase数据储存垃圾:

cd /tmp

mkdir metabase_data

接下来,我们将运行dump命令。

docker run --rm --name metabase-dump \

--network metanet \

-e MB_DB_CONNECTION_URI="postgres://postgres:5432/metabase?user=metabase&password=knockknock" \

-v "/tmp/metabase_data:/target" \

 metabase/metabase-enterprise:v1.44.6 "dump /target"

此命令创建一个名为metabase dump的临时Metabase实例。此临时Metabase实例将连接到Metabase源环境的Postgres应用程序数据库,并导出环境的数据。

如果一切顺利,几秒钟后您应该会看到一些输出,然后在您的终端中显示一条消息“数据迁移完成”。

为了验证垃圾堆,cd进入您的目录:/tmp/metabase_data。您应该会看到两个目录和三个YAML文件:

  • collections/
  • databases/
  • dependencies.yaml
  • manifest.yaml
  • settings.yaml
显示

清单文件包含有关环境的一些基本信息:

serialization-version: 1

metabase-version:

date: '2020-08-19'

tag: v1.36.4

branch: enterprise-release-1.36.x

 hash: 0324e9c
设置

设置文件包含许多可在设置新实例时配置的选项。以下是它的内容:

enable-whitelabeling?: null

jwt-enabled: 'false'

ldap-host: null

jwt-attribute-email: null

engines: null

application-colors: '{}'

enable-embedding: 'false'

jwt-shared-secret: null

enable-xrays: 'true'

...
数据库

此目录包含所有元数据已连接数据库的设置。在本例中,我们只包含Metabase中的Sample数据库。

集合

在collections目录中,我们将找到我们设置的数据。这是我们的Default_collection.yaml文件:

description: A default collection that features our default questions.

archived: false

slug: default_collection

color: '#509EE3'

name: Default collection

namespace: null

下面是一个题为Days when Products were added:

enable_embedding: false

visualization_settings:

graph.series_labels:

- number

graph.metrics:

- count

graph.dimensions:

- CREATED_AT

graph.colors:

- '#509EE3'

graph.x_axis.title_text: Created At by day of the month

dataset_query:

type: query

database: /databases/Sample Database

query:

source-table: /databases/Sample Database/schemas/PUBLIC/tables/PRODUCTS

breakout:

- - datetime-field

- - field-id

- /databases/Sample Database/schemas/PUBLIC/tables/PRODUCTS/fields/CREATED_AT

- day-of-month

aggregation:

- - count

name: Days when Products were added

archived: false

collection_position: null

database_id: /databases/Sample Database

embedding_params: null

table_id: /databases/Sample Database/schemas/PUBLIC/tables/PRODUCTS

...
步骤5-Load到target 环境

您需要至少一个管理员帐户加载到我们的Metabase目标,以便上载转储。您可以通过应用程序登录以创建该用户,或者使用我们上面使用的脚本:只需记住更改MB_PORT5002,因为这是我们分配给Metabase目标环境的端口。例如,cd到您保存create_users.sh 目录中的脚本,然后运行:

MB_HOSTNAME=localhost MB_PORT=5002 ./create_users.sh

我们可以将所有这些设置上载到目标环境中,但是假设我们只想加载默认集合。

让我们复制我们的/tmp/metabase_data目录,以便我们可以保留原始内容并对副本进行更改。

cp -r /tmp/metabase_data /tmp/serialize_load

换上新的/tmp/serialize_load目录。我们要做两个改变:

  1. 因为每个Metabase实例都包含示例数据库,而且我们没有对元数据进行任何更改,所以让我们删除databases目录。从内部/tmp/serialize_load目录,运行rm -r databases.
  2. 另外,我们把自动生成的仪表板集合,因为我们只想上传默认集合:
cd /tmp/serialize_load/collections/root/collections && rm -r Automatically\ Generated\ Dashboards/

要验证更改,可以运行diff要查看原始序列化的_001目录与将用于加载到Metabase目标环境中的序列化的加载目录之间的更改,请执行以下操作:

diff -r metabase_data serialize_load

您应该看到以下内容:

Only in metabase_data/collections/root/collections: Automatically Generated Dashboards

Only in metabase_data: databases

现在,我们/tmp/serialize_load目录设置后,可以运行load命令将元数据加载到out目标环境metabase-target中。

docker run --rm --name metabase-dump \

--network metanet \

-e MB_DB_CONNECTION_URI="postgres://postgres-target:5432/metabase?user=metabase&password=knockknock" \

-v "/tmp/serialize_load:/target" \

 metabase/metabase-enterprise:v1.44.6 "load /target"
步骤6-在目标环境中验证仪表板和集合

现在,如果您登录到目标环境http://localhost:5002,你应该看看我们的默认集合准备好了,包含我们的A look at your Products table收藏。

就这样:您已经预装了一个Metabase的新实例,其中包含一个包含大量问题的仪表板的集合!

序列化限制

请注意,序列化转储不包含某些数据:

  • 权限设置
  • 用户帐户或设置
  • 保存的问题的预警
  • 个人收藏或者他们的内容
序列化的其他用例

使用序列化功能导出问题和仪表板可以打开一些很酷的可能性,包括:

  • 向问题和仪表板添加版本控制。您可以将下载的元数据签入存储库,并通过版本控制软件(如git)管理对该数据的更改。
  • Metabase设置登台环境。您可以在过渡环境中玩,直到对更改满意为止,然后导出元数据,并将其上载到生产环境。

请试用一下序列化功能,并在我们的在我们的论坛上告诉我们您是如何做到的。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文名称:Metabase学习教程:系统管理-4-创新互联
链接地址:http://pwwzsj.com/article/cohedi.html