Chevron Left

查看所有社区故事

在 AWS Lightsail 上运行 Metabase

2022 年 3 月 1 日

贡献者

Percy Musaka

Catalyst IT

photo of Percy Musaka

Percy 是 Catalyst IT(一家 IT 解决方案公司)的软件工程师。他曾经梦想成为一名飞行员,直到他用 C 语言写了他的第一个“hello world”程序,开启了他与机器之间美好的关系。您可以在 Twitter 上关注 Percy:@VaMusaka

a scheme of the set up

我在互联网上搜索了一个简单的(开源)分析平台,它可以与包括 MongoDB 在内的许多数据源集成,尤其如此。对我来说同样重要的是我研究的工具的交互性和嵌入式分析功能。我发现 Metabase 符合所有要求,并且他们的定价和开源产品使这一点更具吸引力。

之前玩过 Docker,我决定测试 Metabase 并使用本地版本进行浏览。我设法在几分钟内启动并运行了它。在 Metabase 中提出几个问题后,我很快清楚地意识到我需要一个生产版本。为了继续探索而不丢失任何工作,我在安装文档中推荐了 2 个选项:将数据保存在映射的文件存储上或使用 PostgreSQL 数据库。我选择了数据库选项,因为它看起来足够简单。

尽管在 Elastic Beanstalk 上部署新版本 Metabase 的教程非常详尽,但我决定朝不同的方向发展。我选择在 AWS Lightsail Ubuntu 实例上运行 Metabase。这样做的原因很简单,与 Amazon Elastic Compute Cloud (EC2) 或 Metabase 推荐的 Elastic Beanstalk 相比,AWS Lightsail 总是显得不那么令人生畏。与 EC2 或任何其他云计算提供商相比,我一直觉得更容易管理实例、网络和存储。

在本文中,我将介绍我按照以下步骤在 AWS Lightsail 实例上安装 Docker 并将 Metabase 连接到 PostgreSQL 数据库。我还将描述我在安装过程中遇到的障碍,并提供一些解决方法。

先决条件

本文假定读者对以下不同技术有一定的了解,但这并非必不可少。

AWS Lightsail:一种使用低成本、预配置的云资源快速构建应用程序和网站的方法。我们将使用它来托管带有 Metabase 的 Docker 容器,并将其用作 PostgreSQL 数据库的主机。

Docker:一个软件平台,可让您快速构建、测试和部署应用程序。这将用于运行 Metabase 应用程序。

PostgresSQL:一个功能强大的开源对象关系数据库,我们将使用它来存储我们的 Metabase(元)数据和配置。这将允许我们更新、关闭和重建 docker 容器而不会丢失数据。

Metabase:一个开源商业智能工具,可让您使用来自各种数据库和数据源的数据创建图表和仪表盘。

以下是我遵循的步骤

创建 AWS 账户

转到 AWS 控制台,如果您还没有账户,请创建一个账户。对于新用户,亚马逊提供了一个免费套餐,您可以在第一年免费创建一些资源,而无需支付任何费用。

创建 AWS Lightsail 实例

准备好您的账户后,前往 Amazon Lightsail。

  1. 在 Lightsail 页面上,单击“创建实例”按钮创建一个新实例。 Amazon LightSail
  2. 选择离您最近的实例位置。
  3. 选择您的实例映像。

    • 选择平台 Linux/Unix;
    • 选择蓝图 Ubuntu 20.04 LTS;
    • 如果您还没有 SSH 密钥,请创建一个;
  4. 选择您的实例计划。

    • 要开始使用,我建议选择 2gb Ram, 1vCPU, 60gb SSD 实例。(在本文发布时,亚马逊在此实例大小上提供三个月免费)
  5. 识别您的实例。

    • 为您的资源指定一个唯一的名称。
  6. 如果您对设置感到满意,请创建实例。
  7. 创建实例后,请记下附加到您的实例的公有 IP。您将需要此 IP 在安装结束时检查 Metabase 的安装。您可以通过按照文章 Amazon Lightsail 中的 IP 地址中概述的步骤获取此 IP。

注意:下载带有 install.sh 的文章目录应处理下面描述的所有步骤,而无需任何额外的配置。此脚本将安装 Docker、PostgreSQL、设置数据库用户、启用 Docker 对数据库的访问、安装和运行 Metabase 容器。要使用此方法安装,只需运行 sudo ./install.sh。在提示输入时,请按照任何说明进行操作。

或者,按照以下步骤单独安装和配置每个组件

安装 Docker

  • 通过 SSH 连接到您的实例;
  • 按照说明在 Ubuntu 上安装 Docker Engine。
  • src/docker.sh 文件中描述了相同的步骤。要使用此文件安装 Docker,只需运行 sudo ./src/docker.sh
    这将删除当前安装在您机器上的任何现有 Docker 版本(如果有),并通过 Docker 推荐的安装过程安装最新版本。
    安装完成后,您可以运行 docker run hello-world 以确认 Docker 已安装。

安装 PostgreSQL

  • 根据我的经验,我建议使用 PostgreSQL 来存储您的 Metabase 数据;
  • 要安装此程序,请按照如何在 Ubuntu 20.04 上安装 PostgreSQL [快速入门]中的说明进行操作。
  • src/postgres.sh 文件中描述了安装 PostgreSQL 的相同步骤。要使用此文件安装 PostgreSQL,只需运行 sudo ./src/postgres.sh。这将安装最新版本的 PostgreSQL。

数据库设置

注意 - 以下步骤也可以通过运行提供的 sudo ./src/db_setup.sh 来实现。

  • 现在到了棘手的部分。使用 Lightsail/EC2 实例运行 Metabase 的主要目的是使数据库和 docker 容器位于同一台机器上。因此,我们需要确保 Metabase Docker 容器可以访问我们的 PostgreSQL 数据库。为了实现这一点,我们需要修改一些 PostgreSQL 文件并重新启动服务。
  • 默认情况下,安装的 PostgreSQL 版本将无权侦听 localhost 以外的任何地址。
  • 这将需要更改为允许 PostgreSQL 通过修改 /etc/postgresql/ 侦听任何地址/main/postgresql.conf,方法是更新以下行:`#listen_addresses = 'localhost'` 为:`listen_addresses = '*'`

  • 除了这一点之外,您还需要设置 PostgreSQL 以便可以从 Docker 访问。运行容器时,Docker 将从范围 172.17.0.1/16 中为容器分配一个 IP。要允许从此地址范围连接到 PostgreSQL,请修改 /etc/postgresql/<version>/main/pg_hba.conf 文件,方法是添加以下行(如果该行尚不存在)。 host all all 172.17.0.1/16 trust
  • 完成后,通过运行 sudo systemctl restart postgresql 重新启动 PostgreSQL 服务

  • 设置 PostgreSQL 用户帐户和密码,供 Metabase 用于连接。下一步将需要此信息。以下是在 PostgreSQL 中创建新用户和密码的命令。 sudo -u postgres psql -c "CREATE USER <username> WITH PASSWORD '<password>'"

  • 此用户帐户还需要在 Superuser 组中,以便它有权创建新数据库。运行以下命令将用户添加到 Superuser 组。 sudo -u postgres psql -c "ALTER USER <username> WITH SUPERUSER"

  • 最后一步是创建 Metabase 数据库,并将数据库的所有者设置为上面创建的用户。如果您已经创建了数据库,则可以跳过此步骤。 sudo -u postgres psql -c “CREATE DATABASE metabase WITH OWNER <username>”

安装 Metabase

安装 Docker 和 PostgreSQL 后,就该运行 Metabase 了。从在 Docker 上运行 Metabase 说明中,按照关于将 PostgreSQL 用作 Metabase 应用程序数据库的说明进行操作。/src/metabase.sh 文件将帮助创建用户和密码,以及运行 Metabase docker 容器来获取此信息。或者,您可以按照以下步骤设置 PostgreSQL 帐户并运行 Metabase Docker 容器。

  • 创建 PostgreSQL 帐户。 sudo -u postgres psql -c "CREATE USER <username> WITH PASSWORD <password>"

  • 将帐户设置为超级管理员 sudo -u postgres psql -c "ALTER GROUP Superuser ADD USER <username>"

  • 运行 sudo docker run -d -p 80:3000 \

--add-host host.docker.internal:host-gateway \ -e "MB_DB_TYPE=postgres" \ -e "MB_DB_DBNAME=metabase" \ -e "MB_DB_PORT=5432" \ -e "MB_DB_USER=<username>" \ -e "MB_DB_PASS=<password>" \ -e "MB_DB_HOST=<host_private_ip>" \ --name metabase metabase/metabase

  • 您可以通过每隔几秒钟检查日志来检查进度:docker logs Metabase
  • 完成后,日志应显示以下消息: 日志屏幕截图

最后,使用您在创建实例后记下的 Lightsail 公有 IP 地址,确认 Metabase 是否正在您的浏览器 http://{IP}/setup 中运行。如果一切设置正确,该页面应显示 Metabase 欢迎消息,如下所示。

来自 Metabase 的说明:不建议在与应用程序相同的实例中拥有数据库服务器,因为资源正在为 2 个关键组件共享。建议的部署模型是将数据库服务器与运行 Metabase 应用程序的服务器分开。

贡献者

Percy Musaka

Catalyst IT

photo of Percy Musaka

Percy 是 Catalyst IT(一家 IT 解决方案公司)的软件工程师。他曾经梦想成为一名飞行员,直到他用 C 语言写了他的第一个“hello world”程序,开启了他与机器之间美好的关系。您可以在 Twitter 上关注 Percy:@VaMusaka

您可能还喜欢

预测下一次点击

Ukrit Wattanavaekin

Metabase

利用数据交付可信指标

Frédéric Vion

Subclic

数据驱动的产品管理

Victor Bolu

WebAutomation

您可能还喜欢

预测下一次点击

Ukrit Wattanavaekin

Metabase

利用数据交付可信指标

Frédéric Vion

Subclic

数据驱动的产品管理

Victor Bolu

WebAutomation