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 中问了几个问题后,我很快意识到我需要一个生产版本。为了在不丢失任何工作成果的情况下继续探索,我根据安装文档的建议,有两个选择:将数据保存在映射的文件存储上,或者使用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 控制台并创建账户(如果您还没有)。对于新用户,Amazon 提供了一个免费套餐,您可以在第一年免费创建一些资源。

创建 AWS Lightsail 实例

账户准备就绪后,前往 Amazon Lightsail。

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

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

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

    • 为您的资源指定一个唯一的名称。
  6. 对您的设置满意后,创建实例。
  7. 创建实例时,请记下附加到实例的公共 IP。安装完成后,您将需要此 IP 来检查 Metabase 的安装情况。您可以通过 IP 地址在 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 容器位于同一台机器上。因此,我们需要确保我们的 PostgreSQL 数据库可以从 Metabase Docker 容器访问。为此,我们需要修改一些 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 服务。

  • 设置 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
  • 完成后,日志应显示如下消息:a screenshot of logs

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

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

您可能也喜欢

预测下一次点击

Ukrit Wattanavaekin

Metabase

利用数据提供可信的指标

Frédéric Vion

Subclic

© . This site is unofficial and not affiliated with Metabase, Inc.