在 Microsoft Azure 上运行 Metabase

本指南介绍了在 Microsoft Azure 上使用 Docker 运行 Metabase 实例的基础知识。

步骤 1:创建资源组(资源分组)

在 Azure 管理控制台中,点击页面顶部的资源组图标(或者直接搜索“资源组”)。如果您已有资源组,可以直接跳到步骤 2

在资源组页面,点击顶部栏中的+ 添加按钮以创建新的资源组。在创建资源组页面,选择您的有效 Azure 订阅,输入资源组的名称,然后选择一个区域。

Create a Resource Group

点击下一步直到您看到创建按钮,然后点击它。

为您的 Metabase 选择区域时,您应该考虑用户和数据仓库的位置,以及可能限制跨境数据传输的基础设施成本和和隐私法。

步骤 2:创建 VNET(虚拟网络)

在页面中央,点击创建资源按钮。搜索 VNET

VNET Marketplace

从 Microsoft 中选择 VNET 产品,然后点击创建

VNET Product

输入虚拟网络的名称,并选择与资源组相同的区域。点击底部的下一步:IP 地址按钮。

在这里,我们将创建一个由公共子网(暴露于互联网的网络)和包含您的应用程序数据库的私有网络组成的安全网络。

在 IPv4 地址中,您应该有一个默认值 10.0.0.0/16(否则请将该网络空间添加到框中)。接下来,添加两个子网

  • 一个名为 public 的子网,其子网地址范围为 10.0.1.0/24,以及
  • 一个名为 private 的子网,其子网地址范围为 10.0.2.0/24。

Azure network configuration

点击下一步直到您进入审查并创建页面,然后点击底部的创建按钮以创建您的网络。

步骤 3:创建应用程序数据库 (PostgreSQL)

在 Azure 管理控制台主页,创建新资源。这次搜索适用于 PostgreSQL 的 Azure 数据库。您也可以在 Marketplace 菜单的数据库下找到此数据库。

Azure PostgreSQL

在下一页中,您需要选择使用该服务的方式。现在选择单一服务器,这是一个很好的起点,但请注意,这将只创建一个 PostgreSQL 实例,它将是您的单点故障。

在下一个屏幕上,选择或输入以下内容

  • 资源组:您包含所有组件的资源组。
  • 服务器名称:您数据库的唯一名称。
  • 数据源:可以留空为 None
  • 位置:与您的资源组和 VNET 使用的相同。
  • 版本:使用您能使用的最新版本。
  • 计算 + 存储:您可以重新调整数据库的大小,但必须选择通用层,因为它是唯一提供私人链接的层。

然后选择您选择的管理员用户名和密码。

点击下一步直到您进入最后一页,然后点击创建。Azure 创建数据库需要一些时间。创建完成后,点击转到资源按钮。

步骤 4:创建私有终结点连接

在适用于 PostgreSQL 的 Azure 数据库的属性页面上,您可以管理数据库的参数。您将创建到数据库的私有终结点,以便所有来自 Web 应用程序的流量都通过 Azure 网络内部路由。

在左侧菜单中,点击安全下的私有终结点连接

Azure Database for PostgreSQL

现在点击顶部栏带有加号的按钮,显示私有终结点。在打开的页面中

  1. 为此链接提供一个名称(任何描述您尝试执行操作的名称都可以,例如metabase_link)。选择数据库所在的区域,点击下一步
  2. 在配置的资源部分,确保资源类型设置为Microsoft.DBforPostgreSQL/servers,这将使您能够在下面的下拉列表中选择上一步中创建的服务器,并保持目标子资源为默认值。
  3. 配置部分,唯一需要更改的值是子网,您需要选择本指南第一步中创建的私有子网,其他所有内容保持不变。

Azure PrivateLink config

现在进入最后一步,点击创建。终结点创建完成后,在继续之前您需要做两件事

  1. 在您刚创建的数据库服务器页面中,转到数据库的连接安全性项并拒绝所有公共网络访问
  2. 在您上一步创建的 VNET 页面中,转到连接设备设置,您应该会看到一个设备已连接到网络。记下 IP 地址,因为您在步骤 5 中需要它(这是网络分配给数据库服务器的 IP 地址)。

步骤 5:创建 Web 应用程序(部署 Metabase)

最后,所有魔力汇聚的步骤:转到您的资源组并添加新资源,或在 Marketplace(蓝色地球图标)中搜索Web 应用Azure Web 应用

现在在页面上设置以下值(资源组应与第一步相同)

  • 名称:名称必须是唯一的,因为子域在所有 Azure 部署中共享。
  • 发布:Docker 容器。
  • 操作系统:Linux。
  • 区域:使用与之前步骤相同的区域。
  • 应用服务计划:如果您没有服务计划,Azure 将自动创建一个新计划。
  • SKU 和大小:设置生产级别计划,至少包含 200 个总 ACU 和 3.5GB 内存,然后点击应用

现在进入下一步,您将选择

  • 选项:单一容器。
  • 镜像源:DockerHub。
  • 访问类型:公共。
  • 镜像和标签:metabase/metabase:latest(或选择您喜欢的任何其他 Docker 镜像标签,例如我们的企业版)。要查找最新版本,请查看我们的社区版 Dockerhub 仓库以及我们的企业版 Dockerhub 仓库
  • 启动命令:将此字段留空。

点击下一步直到您进入最后一部分,然后点击创建,并等待您的应用程序初始化。

现在转到应用程序配置页面,点击页面左侧的设置 -> 网络。在下一页中,点击VNET 集成下的点击此处配置

Azure VNET integration

现在点击添加 VNET旁边的巨大加号,选择您创建的 VNET 和公共子网。点击确定

Azure VNET public subnet

返回应用程序配置页面,点击页面左侧的设置 -> 配置。您应该会看到一些已配置的应用程序设置。

您需要添加环境变量,以便将 Metabase 连接到其PostgreSQL 应用程序数据库。确保您使用完整的 MB_DB_CONNECTION_URI

另外,请注意 Azure PostgreSQL 中的用户名是 user@name_of_your_database_engine,因此在这种情况下,整个连接 URI 将如下所示

postgresql://databasePrivateIPAddress:port/postgres?user=user@name_of_your_database_engine&password=configuredpassword&ssl=true&sslmode=required

例如,如果您的值是

  1. 数据库私有 IP 地址: 10.0.2.4
  2. 数据库端口:5432(Postgres 的情况,MySQL/MariaDB 默认端口为 3306)
  3. 数据库服务器名称:metabase-app-database
  4. 数据库用户名:metabase
  5. 密码:Password1!

那么您的连接字符串将是

postgresql://10.0.2.4:5432/postgres?user=metabase%40metabase-app-database&password=Password1!&ssl=true&sslmode=require

注意:“@”字符已替换为“%40”,因为在版本 > 43 中“@”将不再起作用

点击保存,实例将重新启动。

完成后,您应该能够在 Web 应用的“概览”选项卡(在 URL 部分下)中显示的 URL 访问您的 Metabase。

附加配置

如何启用健康检查

在 Metabase 中启用健康检查是一个好习惯。转到您的Web 应用 -> 监控 -> 健康检查 -> 启用健康检查,并在路径中包含 /api/health

如何升级

转到您创建的 Metabase Web 应用,点击部署 -> 部署中心

注册表设置下的完整镜像名称和标签文本字段中,将容器版本更改为新版本,然后点击保存。Metabase Docker 镜像的可用版本可以在Docker Hub上找到。

重要:在升级之前,务必备份 Metabase 应用程序数据库,尤其是在主要版本之间进行升级时。Metabase 也不官方支持降级版本。

如何查看日志

访问您在 Azure 中的 Web 应用,并导航到监控 -> 日志流

您也可以通过前往“设置”->“管理员”->“故障排除”->“日志”在 Metabase 内部查看日志。

性能调优

  • 禁用 FTP 状态
  • 将 HTTP 版本更改为 2.0
  • 启用 WebSockets
  • 启用 ARR Affinity

自定义域

在您的 Azure Web 应用中,访问设置 -> 自定义域以使用您自己的证书的自定义域。

纵向扩展与横向扩展

Azure 提供了一种通过纵向扩展来增加服务器容量的简便方法。只需选择一个具有更多 RAM 和 CPU 数量的定价层并重新启动实例即可。这种方法比横向扩展更容易,您应该在横向扩展之前首先选择此选项。

对于高可用性的 Metabase 部署,您可以让您的 Web 应用进行横向扩展(更多服务器并行提供应用程序服务)。只需转到“横向扩展”并使用滑块请求更多实例,或使用自定义自动扩缩策略(例如在工作时间使用更多服务器,在非工作时间使用更少服务器)。

CORS

如果您正在嵌入 Metabase,您可能需要在 Web 应用程序的设置 -> CORS中启用 CORS。您需要为嵌入 Metabase 的应用程序填写源域,以便 Azure 知道允许来自这些域的跨域请求。

数据库名称

Azure 不允许用户在创建服务时创建数据库,这就是我们使用postgres作为安装 Metabase 数据库的原因。尽管这不应该是一个问题,但一个好的做法是将数据库安装在一个名为metabase的独立数据库中。如果您不急于尝试该产品,您应该在创建数据库后立即创建一个名为metabase的数据库,然后在部署 Docker 容器时使用适当的连接字符串。在上面的示例中,连接字符串将是

postgresql://10.0.2.4:5432/metabase?user=metabase@metabase-app-database&password=Password1!&ssl=true&sslmode=require

如果您遇到连接问题,请参考Postgres 配置说明,因为连接字符串的用户名部分中可能存在“@”符号问题。结合使用MB_DB_CONNECTION_URI和单独的MB_DB_USER以及MB_DB_PASSWORD字段也有效。

阅读其他Metabase 版本的文档。

© . All rights reserved.