在微软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(否则请将那个网络空间添加到框中)。接下来,添加两个子网

  • 一个名为公共的子网,其子网地址范围为10.0.1.0/24,
  • 一个名为私有的子网,其子网范围为10.0.2.0/24。

Azure network configuration

点击下一步,直到到达查看和创建页面,然后点击底部的创建按钮以创建您的网络。

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

从Azure管理控制台主页创建一个新的资源。这次搜索Azure Database for PostgreSQL。您也可以在“数据库”菜单下的市场菜单中找到此数据库。

Azure PostgreSQL

在下一页中,您将必须选择您将如何使用该服务。现在选择单服务器,这是一个良好的起点,但请记住,这将创建一个PostgreSQL实例,这将成为您的单点故障。

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

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

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

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

第4步:创建私有端点连接

在Azure for PostgreSQL数据库的属性页面上,您可以管理数据库的参数。您将为数据库创建一个私有端点,因此来自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)

最后,所有魔法汇聚的步骤:转到您的资源组,添加一个新资源,或在市场(蓝色地球图标)中搜索Web AppAzure web app

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

  • 名称:名称必须是唯一的,因为子域名是在所有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应用“概览”标签中显示的Metabase URL(在URL部分下)。

其他配置

如何启用健康检查

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

如何升级

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

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

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

如何查看日志

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

您还可以通过访问设置 -> 管理员 -> 故障排除 -> 日志在Metabase内查看日志。

性能调优

  • 禁用FTP状态
  • 更改HTTP版本为2.0
  • 启用WebSockets
  • 启用ARR亲和性

自定义域名

在您的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_USERMB_DB_PASSWORD字段组合也有效。

请参阅其他Metabase版本的文档。

想改进这些文档吗? 提出更改。