Skip to main content

配置插件数据库

本指南涵盖 Backstage 开箱即支持的各种生产持久性用例。 除基本客户端和连接配置外,数据库管理器还允许开发人员根据每个插件设置客户端和数据库连接细节。 这意味着您可以为特定插件使用 SQLite 3 内存数据库,同时为其他所有插件使用 PostgreSQL,等等。

默认情况下,Backstage 会为每个插件自动创建数据库,其名称遵循backstage_plugin_<pluginId>模式,例如backstage_plugin_auth在共享数据库实例或群集上运行多个部署时,可以配置不同的数据库名称前缀。

在将基础架构定义为代码或数据(Terraform、AWS CloudFormation 等)的情况下,可能会出现数据库凭证缺乏创建新数据库的权限,或者无法控制数据库名称的情况。 在这些情况下,可以将数据库连接配置设置在按插件计算.

通过以下功能,Backstage 可支持所有这些用例DatabaseManager@backstage/backend-common下面我们将介绍如何使用和配置 Backstage 的数据库。

先决条件

依赖关系

请确保在您的计算机中安装了适当的数据库驱动程序。backend如果打算同时使用 PostgreSQL 和 SQLite,可以同时安装这两个软件包。

# From your Backstage root directory
# install pg if you need PostgreSQL
yarn add --cwd packages/backend pg

# install SQLite 3 if you intend to set it as the client
yarn add --cwd packages/backend better-sqlite3

从操作角度看,只需为正在使用的客户端安装驱动程序。

配置

您应该在您的app-config.yaml(基础客户端和配置将作为默认设置使用,并为具有相同或未设置客户端类型的每个插件进行扩展。 如果为特定插件指定的客户端类型与基础客户端不匹配,则将使用为该插件设置的配置,而不会扩展基础配置。

插件的客户端类型和配置需要在**backend.database.plugin.<pluginId>**举个例子、catalogpluginId下面我们将探讨更详细的配置示例。

最低内存配置

在下面的示例中,我们使用better-sqlite3您可能希望将此配置用于测试或其他非持久性用例。

backend:
database:
client: better-sqlite3
connection: ':memory:'

PostgreSQL

下面的示例使用 PostgreSQL (pg)作为所有插件的数据库客户端。auth插件使用的是用户定义的数据库名称,而不是自动生成的名称。backstage_plugin_auth.

backend:
database:
client: pg
connection:
host: some.example-pg-instance.tld
user: postgres
password: password
port: 5432
plugin:
auth:
connection:
database: pg_auth_set_by_user

自定义数据库名称前缀

下面的配置使用example_prefix_作为数据库名称前缀,而不是backstage_plugin_插件,如authcatalog将使用名为example_prefix_authexample_prefix_catalog分别是

backend:
database:
client: pg
connection:
host: some.example-pg-instance.tld
user: postgres
password: password
port: 5432
prefix: 'example_prefix_'

每个插件的连接配置

两者authcatalog这种类型的配置适用于将基础架构作为代码或数据的环境,这些环境可能提供随机生成的凭证和/或数据库名称。

backend:
database:
client: pg
connection: 'postgresql://some.example-pg-instance.tld:5432'
plugin:
auth:
connection: 'postgresql://fort:[email protected]:5432/unwitting_fox_jumps'
catalog:
connection: 'postgresql://bank:[email protected]:5432/shuffle_ransack_playback'

PostgreSQL 和 SQLite 3

下面的示例使用 PostgreSQL (pg)作为所有插件的数据库客户端,除了auth插件,该插件使用better-sqlite3因为auth如果插件的客户机类型与基本客户机类型不同,则auth是逐字使用的,无需扩展 PostgreSQL 的基本配置。

backend:
database:
client: pg
connection: 'postgresql://foo:[email protected]:5432'
plugin:
auth:
client: better-sqlite3
connection: ':memory:'

检查你的数据库

DatabaseManager将尝试创建不存在的数据库。 如果因为基本配置中的凭据没有创建数据库的权限而为每个插件设置了凭据,则必须在启动服务前确保它们存在。 服务将无法创建它们,只能使用它们。

特权

由于 Backstage 会尝试检查数据库是否存在,因此可能需要授予特定用户列出或显示数据库的权限。 对于 PostgreSQL,需要授予以下权限:

GRANT SELECT ON pg_database TO some_user;

MySQL:

GRANT SHOW DATABASES ON *.* TO some_user;

本指南中的机制应能帮助您应对不同的数据库部署情况。 祝你好运!