在 Microsoft Azure 上运行 Metabase
本指南介绍了使用 Docker 在 Microsoft Azure 中运行 Metabase 实例的基础知识。
步骤 1:创建资源组(资源分组)
在 Azure 管理控制台中,单击页面顶部的资源组图标(或直接搜索资源组)。如果您已经有一个资源组,则可以直接转到步骤 2。
在资源组页面上,单击顶部栏中的 + 添加 按钮以创建新的资源组。在创建资源组页面上,选择您有效的 Azure 订阅,输入资源组的名称,然后选择一个区域。
单击下一步,直到看到创建按钮,然后单击它。
在为 Metabase 选择区域时,您应考虑用户和数据仓库的位置,以及可能限制跨境数据传输的基础设施成本和隐私法。
步骤 2:创建 VNET(虚拟网络)
在页面中心,单击 创建资源 按钮。搜索 VNET
从 Microsoft 中选择 VNET 产品,然后单击创建
输入虚拟网络的名称,然后选择您为资源组使用的同一区域。单击底部的 下一步:IP 地址 按钮。
在这里,我们将创建一个由公共子网(暴露于互联网的网络)和包含应用程序数据库的私有网络组成的安全网络。
在 IPv4 地址中,您应该有一个默认值 10.0.0.0/16(否则将该网络空间添加到框中)。接下来,添加两个子网
- 一个名为 public 的子网,子网地址范围为 10.0.1.0/24,以及
- 一个名为 private 的子网,子网范围为 10.0.2.0/24。
单击下一步,直到到达查看 + 创建页面,然后单击底部的创建按钮以创建您的网络。
步骤 3:创建应用程序数据库 (PostgreSQL)
从 Azure 管理控制台主页,创建一个新资源。这次搜索 Azure Database for PostgreSQL。您也可以在 Marketplace 菜单下的数据库中找到此数据库。
在下一页中,您必须选择使用该服务的方式。暂时选择 单服务器,这是一个好的起点,但请考虑到这将仅创建一个 PostgreSQL 实例,这将是您的单点故障。
在下一个屏幕上,选择或输入以下内容
- 资源组:您在其中包含所有组件的资源组。
- 服务器名称:数据库的唯一名称。
- 数据源:可以保留为
无
。 - 位置:您为资源组和 VNET 使用的同一位置。
- 版本:使用您可以使用的最新版本。
- 计算 + 存储:您可以重新调整数据库的大小,但您必须选择
通用
层,因为这是唯一提供专用链接的层。
然后选择您选择的管理员用户名和密码。
单击下一步,直到到达最后一页,然后单击创建。Azure 创建数据库需要一些时间。创建完成后,单击转到资源按钮。
步骤 4:创建专用终结点连接
在 Azure for PostgreSQL 数据库的属性页面上,您可以管理数据库的参数。您将创建到数据库的专用终结点,以便来自 Web 应用程序的所有流量都通过 Azure 的网络在内部路由。
在左侧菜单中,单击 专用终结点连接,它位于安全性下
现在单击顶部栏上带有加号的按钮,上面写着 专用终结点。在打开的页面中
- 为此链接提供一个名称(任何描述您尝试执行的操作的名称都可以,例如
metabase_link
)。选择数据库所在的区域,单击下一步。 - 在配置的资源部分,确保将资源类型设置为
Microsoft.DBforPostgreSQL/servers
,这将使您能够在下面的下拉列表中选择上一步中创建的服务器,并将目标子资源保留为默认值 - 在配置部分,唯一需要更改的值是子网,您需要在其中选择您在本指南的第一步中创建的私有子网,并将所有其他内容保留原样。
现在转到最后一步,然后单击创建。创建终结点后,您需要在继续操作之前执行两项操作
- 在您刚刚创建的数据库服务器页面中,转到数据库连接安全性项,并拒绝所有公共网络访问。
- 在您在上一步中创建的 VNET 页面中,转到连接的设备设置,您应该会看到一个设备已连接到网络。记下 IP 地址,因为您将在步骤 5 中需要它(这是网络分配给数据库服务器的 IP 地址)。
步骤 5:创建 Web 应用程序(部署 Metabase)
最后,所有魔力汇聚在一起的步骤:转到您的资源组并添加新资源,或在 Marketplace(蓝色地球图标)中搜索 Web App。
现在在页面上设置以下值(资源组应与第一步中的资源组相同)
- 名称:名称必须唯一,因为子域在所有 Azure 部署中共享。
- 发布:Docker 容器。
- 操作系统:Linux。
- 区域:使用与前几步相同的区域。
- 应用服务计划:如果您没有服务计划,Azure 将自动创建一个新计划。
- SKU 和大小:设置生产级别计划,至少 200 个总 ACU 和 3.5GB 内存,然后单击应用。
现在转到下一步,您将在其中选择
- 选项:单容器。
- 镜像源:DockerHub。
- 访问类型:公共。
- 镜像和标签:metabase/metabase:latest(或选择您偏好的任何其他 Docker 镜像标签,例如我们的企业版)。要查找最新版本,请查看我们的 社区版 Dockerhub 存储库 以及我们的 企业版 Dockerhub 存储库。
- 启动命令:将此字段留空。
单击下一步,直到到达最后一部分,然后单击创建,然后等待应用程序初始化。
现在转到应用程序配置页面,然后在页面左侧单击设置 -> 网络。在下一页上,单击 VNET 集成 下的单击此处进行配置。
现在单击 添加 VNET 旁边的巨大加号,然后选择您创建的 VNET 和公共子网。单击确定。
返回到应用程序配置页面,然后在页面左侧单击设置 -> 配置。您应该看到一些已配置的应用程序设置。
您需要添加环境变量,用于将 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
例如,如果您的值是
- 数据库私有 IP 地址: 10.0.2.4
- 数据库端口:5432(在 Postgres 的情况下,MySQL/MariaDB 默认端口为 3306)
- 数据库服务器名称:metabase-app-database
- 数据库用户名:metabase
- 密码: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 亲缘性
自定义域名
在您的 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 的文档。