配置文件
从配置文件加载仅适用于 Pro 和 Enterprise 计划(仅限自托管计划)。
在自托管 Pro 和 Enterprise 计划中,Metabase 支持从名为 config.yml
的配置文件启动初始化。配置文件应位于
- 当前目录(运行 Metabase JAR 所在的目录)。
- 由
MB_CONFIG_FILE_PATH
环境变量 指定的路径。
配置文件中的设置与您在 Metabase 管理设置中设置的设置相同。此配置文件中定义的设置将更新任何现有设置。例如,如果数据库已存在(即您已通过初始设置或 **管理设置** > **数据库** 添加了它),Metabase 将根据配置文件中的数据更新数据库条目。这意味着:如果您在配置文件中定义了一个设置,然后稍后在 Metabase 应用程序中更改了该设置,请记住,每当 Metabase 重启时,配置文件都会覆盖该更改。让我们在引述中重申这一点
每当 Metabase 重启并加载您的配置文件时,配置文件中的设置将**覆盖**在 Metabase UI 中对这些设置所做的任何更改。
配置文件设置**不**被视为硬编码的真实来源(就像环境变量一样)。环境变量设置的设置无法更改,即使在应用程序本身的管理设置中也无法更改。
配置文件模板
请参阅配置文件模板。
配置设置
配置文件分为几个部分:version
和 config
。在 config
下,您可以指定
如下所示
version: 1
config:
settings:
- ...
users:
- ...
databases:
- ...
配置文件还必须包含一个 version
键,这只是一个方便的字段,用于帮助您跟踪配置文件版本。
用户
Metabase 实例中创建的第一个用户是管理员。配置文件中列出的第一个用户可以指定为管理员,但不一定。如果有人已经首次启动并登录该 Metabase,Metabase 将使第一个用户成为管理员。此外,您可以使用 is_superuser: true
键将用户帐户指定为管理员。
在以下示例中,假设 Metabase 尚未设置(这将创建第一个用户),则用户 first@example.com
和 admin@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 字符串(如果您穿着正装,您会说**64进制**字符串)的格式。因此,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
部分添加一个管理员帐户。 - 密钥本身可以分配给两个组之一:
admin
或all-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
由于从配置文件加载是 Pro/Enterprise 功能:对于新安装,您需要使用 MB_PREMIUM_EMBEDDING_TOKEN
环境变量向 Metabase 提供一个令牌。
MB_PREMIUM_EMBEDDING_TOKEN="[your token]" java --add-opens java.base/java.nio=ALL-UNNAMED -jar metabase.jar
延伸阅读
阅读其他版本的 Metabase 的文档。