序列化仅在商业版上可用(仅在自托管计划上)。
创新互联主营城中网站建设的网络公司,主营网站建设方案,成都app开发,城中h5微信小程序定制开发搭建,城中网站营销推广欢迎城中等地区企业咨询许多客户在迁移到本地部署的商业版时,需要上载预定义的问题或仪表板,以设置新的Metabase实例或新的数据库连接。本文将介绍如何:
具体来说,我们将使用dump
和load
Metabase中的命令序列化功能执行第2步和第3步,再加上一点手动管理导出的文件。
我们将使用Docker运行我们的Metabase环境,并使用开源PostgresSQL为了我们应用程序数据库。我们不建议使用默认值H2用于生产的数据库(H2随Metabase一起提供,因为它是一个轻量级数据库,使用Metabase很容易让用户启动和运行)
计划我们将创建一个Metabase实例(我们的原始环境),创建一个仪表板,并将该仪表板加载到一个新的Metabase实例(我们的目标环境)中。计划如下:
你需要Docker安装在您的计算机上。
步骤1-创建专用网络要创建名为“metanet”的专用网络,请从您选择的终端运行以下命令:
docker network create metanet
您可以确认网络是用以下方式创建的:
docker network ls
网络将有一个本地作用域和一个网桥驱动程序。
第2步-启动Metabase的两个实例启动两个称为origin
和target
(尽管你可以随意命名这些环境)。请注意,我们使用--rm -d在创建这些Docker容器时,当您停止它们并在后台运行时,它们都会被移除。请随意更改这些标志以修改该行为。
创建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实例。
设置目标环境与此类似。在我们的metanet网络上,我们将设置一个Postgres数据库作为我们的应用程序数据库,然后在另一个Docker容器中启动Metabase的另一个实例。
注意以下更改:
应用程序数据库:
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环境启动并运行:
http://localhost:5001
http://localhost:5002
让我们向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)。
登录后,激活许可证密钥.
步骤3-在origin环境中创建仪表板和集合我们需要一些应用程序数据来导出,所以让我们使用包括在Metabase中的示例数据库。或者,让Metabase为我们创建一些仪表板!
如图2所示,在Try These X-Rays Based On Your Data部分,单击带有黄色闪电这说明A look at your Products table。Metabase将为您生成一组问题,您可以将这些问题保存为仪表板。
单击保存此按钮,Metabase将把仪表板及其问题保存在收集有头衔的A look at your Products table.
此集合将保存到名为自动生成的仪表板
。您可以通过单击导航栏左上角的Metabase徽标返回主屏幕来找到此集合。从主页,在我们的分析部分,单击自动生成的仪表板
第节。从那里你应该可以看到收藏品A look at your Products table(图3)。
接下来,创建一个新的集合。你想叫什么都行;我们会用这个令人兴奋的名字默认集合
,并保存到我们的分析收藏。
那我们就把A look at your Products table我们新创建的系列默认集合
.
这是我们实际开始使用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文件:
清单文件包含有关环境的一些基本信息:
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_PORT
到5002
,因为这是我们分配给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目录。我们要做两个改变:
databases
目录。从内部/tmp/serialize_load目录,运行rm -r databases.自动生成的仪表板
集合,因为我们只想上传默认集合
: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的新实例,其中包含一个包含大量问题的仪表板的集合!
序列化限制请注意,序列化转储不包含某些数据:
使用序列化功能导出问题和仪表板可以打开一些很酷的可能性,包括:
请试用一下序列化功能,并在我们的在我们的论坛上告诉我们您是如何做到的。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧