配置文件

从配置文件加载功能仅适用于 专业版企业版 计划(仅限自托管计划)。

在自托管的 专业版企业版 计划中,Metabase 支持在启动时从名为 config.yml 的配置文件进行初始化。该配置文件应位于:

  • 当前目录(正在运行的 Metabase JAR 文件所在的目录)。
  • MB_CONFIG_FILE_PATH 环境变量 指定的路径。

配置文件中的设置与您在 Metabase 中的“管理设置”中设置的相同。此配置文件中定义的设置将更新任何现有设置。例如,如果数据库已存在(即,您已通过初始设置或“管理设置”>“数据库”添加了它),Metabase 将根据配置文件中的数据更新数据库条目。这意味着:如果您在配置文件中定义了一个设置,然后稍后在 Metabase 应用程序中更改了该设置,请记住,每当 Metabase 重启时,配置文件将覆盖该更改。我们将在引用块中重申这一点:

每当 Metabase 重启并加载您的配置文件时,配置文件中的设置将覆盖在 Metabase UI 中对这些设置所做的任何更改。

配置文件设置不被视为硬编码的真实来源(环境变量 是)。通过环境变量设置的设置无法更改,即使在应用程序本身的“管理设置”中也无法更改。

配置文件示例模板

请参阅 配置文件模板

配置设置

配置文件分为几个部分:versionconfig。在 config 下,您可以指定:

如下所示:

version: 1
config:
  settings:
    - ...
  users:
    - ...
  databases:
    - ...

配置文件还必须包含一个 version 键,这只是为了方便您跟踪配置文件版本。

用户

在 Metabase 实例中创建的第一个用户是管理员。配置文件中列出的第一个用户可以被指定为管理员,但不一定。如果有人已经首次启动并登录到该 Metabase,Metabase 将使该第一个用户成为管理员。此外,您可以通过使用 is_superuser: true 键将用户帐户指定为管理员。

在以下示例中,假设 Metabase 尚未设置(这将创建第一个用户),则用户 first@example.comadmin@example.com 都将是管理员:first@example.com 是因为它是列表中的第一个用户帐户,而 admin@example.com 是因为该用户设置了 is_superuser 标志为 true。

version: 1
config:
  users:
    - first_name: First
      last_name: Person
      password: metabot1
      email: first@example.com
    - first_name: Normal
      last_name: Person
      password: metabot1
      email: normal@example.com
    - first_name: Admin
      last_name: Person
      password: metabot1
      is_superuser: true
      email: admin@example.com

如果 Metabase 已经设置完毕,那么 first@example.com 将作为普通用户加载。

数据库

在一个新的 Metabase 上,以下示例设置了一个管理员用户帐户和一个数据库连接。


version: 1
config:
  users:
    - first_name: Cam
      last_name: Era
      password: 2cans3cans4cans
      email: cam@example.com
  databases:
    - name: test-data (Postgres)
      engine: postgres
      details:
        host: localhost
        port: 5432
        user: dbuser
        password: "{{ env POSTGRES_TEST_DATA_PASSWORD }}"
        dbname: test-data

要确定您可以为数据库指定哪些键,请查看 Metabase 本身中可用于您要添加的数据库的字段。

设置数据库上的上传

您还可以在配置文件中使用以下设置配置上传

  • uploads_enabled: 布尔值
  • uploads_schema_name: 字符串
  • uploads_table_prefix: 字符串

这是一个例子:


version: 1
config:
  users:
    - first_name: Cam
      last_name: Era
      password: 2cans3cans4cans
      email: cam@example.com
  databases:
    - name: test-data (Postgres)
      engine: postgres
      details:
        host: localhost
        port: 5432
        user: dbuser
        password: "{{ env POSTGRES_TEST_DATA_PASSWORD }}"
        dbname: test-data
      uploads_enabled: true
      uploads_schema_name: uploads
      uploads_table_prefix: uploads_

请参阅 上传

API 密钥

您可以使用配置文件创建 API 密钥,这对于自动化部署和在不同环境中保持 API 密钥稳定非常有用。

您可以按如下方式添加 API 密钥:


version: 1
config:
  users:
    - first_name: Cam
      last_name: Era
      password: 2cans3cans4cans
      email: cam@example.com
  api-keys:
    - name: "Admin API key"
      group: admin
      creator: cam@example.com
      key: mb_firsttestapikey
    - name: "All Users API key"
      group: all-users
      creator: cam@example.com
      key: mb_secondtestapikey

您也可以使用环境变量提供 API 密钥,如下所示:


api-keys:
  - name: "ENV API Key"
    key: "{{env API_KEY_FROM_ENV}}"
    creator: "admin@example.com"
    group: "admin"

有关 配置文件中的环境变量 的更多信息,请参见下文。

您创建的 API 密钥(key 的值)必须采用 mb_ 后跟 Base64 字符串的格式(如果您穿着正式服装,您会说一个 tetrasexagesimal 字符串)。因此,mb_ 后跟字母和数字,最小:12 个字符,最大:254 个字符。具体来说,您创建的 API 密钥必须满足以下正则表达式:mb_[A-Za-z0-9+/=]+

您可以使用 openssl rand 命令生成一个美观的 API 密钥:

echo "mb_$(openssl rand -base64 32)"

这将生成类似以下内容:

mb_aDqk1Tc4ZotWb2TyjHY71glALKlB+g75dLgmSufWGLc=

配置文件中 API 密钥的其他注意事项:

  • API 密钥的 creator 必须是管理员。这意味着:a) 您的 Metabase 必须已至少有一个管理员账户,或 b) 您需要在配置文件的 users 部分添加一个管理员账户。
  • 密钥本身可以分配给两个组之一:adminall-users。配置文件将 group 分配限制为这些组,因为它们是 Metabase 始终初始化的唯一组。
  • 密钥的权限与其 group(而非其 creator)所授予的权限相对应。
  • 如果 Metabase 发现一个现有 API 密钥的名称与配置文件中的密钥相同,它将保留现有密钥(即,它不会用配置文件中的密钥覆盖现有密钥)。例如,如果您最初设置了一个 API 密钥,然后稍后在 Metabase 用户界面中重新生成了该密钥,则使用配置文件加载 Metabase 不会覆盖该重新生成的密钥(这意味着配置文件中的 key 将不再有效)。
  • 如果您确实希望从配置文件中覆盖现有密钥,则需要先删除现有密钥。如果您想保留这两个密钥,则需要重命名配置文件中的密钥。

配置文件还包含 settings 部分中的 api-key 键。此设置创建 API 密钥;它用于在请求 /notify 端点的身份验证中进行标头字符串匹配。

config.yml 中引用环境变量

如上例所示,环境变量可以使用模板标签指定,如下所示:


setting: "{{ env POSTGRES_TEST_DATA_PASSWORD }}"

请注意,模板 "{{ env API_KEY_FROM_ENV }}" 周围有引号;如果您不包含引号,YAML 解析器将不知道它是一个字符串模板供 Metabase 扩展,Metabase 也将不知道要替换环境变量的值。

Metabase 不支持递归扩展,因此如果您的一个环境变量引用了另一个环境变量,您将会遇到麻烦。

配置文件 (config.yml) 中包含特殊字符的值

如果某个值包含双大括号(}}{{),您必须使用三重反引号来告诉配置解析器使用字面值。例如,如果您的密码是 MetaPa$$123{{>,您需要将该值用三重括号括起来,如下所示:


password: "{{{ MetaPa$$123{{> }}}"

注意 "{{{ MetaPa$$123{{> }}}" 中的引号。

禁用初始数据库同步

从序列化导出加载数据模型时,您需要禁用调度程序,以便 Metabase 不会尝试同步。

要禁用初始数据库同步,您可以将 config-from-file-sync-database 添加到 settings 列表中,并将值设置为 false。设置 config-from-file-sync-database 必须在数据库列表之前,如下所示:

version: 1
config:
  settings:
    config-from-file-sync-databases: false
  databases:
    - name: my-database
      engine: postgres
      details: ...

设置

在此配置文件中,您可以指定任何管理设置。

通常,您可以在此配置文件的 settings 部分中设置的设置映射到环境变量,因此请查看它们以了解可以在配置文件中使用哪些设置。您在配置文件中包含的实际键与环境变量使用的格式略有不同。对于环境变量,形式是尖叫蛇形命名法,并带有 MB 前缀:

MB_NAME_OF_VARIABLE

而在配置文件中,您会将其转换为:

name-of-variable

例如,如果您想在 config.yml 文件中指定 MB_EMAIL_FROM_NAME

version: 1
config:
  settings:
    config-from-file-sync-databases: false
    email-from-name: Stampy von Mails-a-lot
  databases:
    - name: my-database
      engine: h2
      details: ...

但您可以使用配置文件设置任何管理设置(有关设置列表,请查看配置文件模板)。您还可以浏览环境变量列表,查看您可以配置的内容(但请注意,并非所有环境变量都可以通过配置文件设置)。

从配置文件加载新的 Metabase

由于从配置文件加载是专业版/企业版功能:对于新安装,您需要使用 MB_PREMIUM_EMBEDDING_TOKEN 环境变量向 Metabase 提供令牌。

MB_PREMIUM_EMBEDDING_TOKEN="[your token]" java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar

延伸阅读

阅读其他 Metabase 版本 的文档。

© . All rights reserved.