Chevron Left

查看所有社区故事

在AWS Lightsail上运行Metabase

2022 年 3 月 1 日

贡献者

Percy Musaka

Catalyst IT

photo of Percy Musaka

Percy 是 Catalyst IT 的软件工程师,Catalyst IT 是一家 IT 解决方案公司。他原本想成为一名飞行员,直到他第一次用 C 语言编写了“hello world”,从此开始了人与机器之间美好的关系。您可以在 Twitter 上找到 Percy,地址为 @VaMusaka

a scheme of the set up

我在互联网上搜索了一个简单(开源)的可以与许多数据源集成的分析平台,特别是 MongoDB。对我来说,我考虑的工具的交互性和嵌入式分析能力也非常重要。我发现 Metabase 满足所有要求,而且他们的定价和开源提供使它更具吸引力。

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

尽管部署 Metabase 新版本的 Elastic Beanstalk 教程非常详尽,但我决定走不同的路。我选择在 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应用程序。

PostgreSQL:一个功能强大的开源对象关系型数据库,我们将使用它来存储我们的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。您需要在安装完成后检查Metabase的安装。您可以通过遵循文章中概述的步骤来获取此IP地址“Amazon Lightsail中的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[快速入门]的说明。
  • 安装 PostgreSQL 的相同步骤已在 src/postgres.sh 文件中描述。要使用此文件安装 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 服务。

  • 设置 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>'"

  • 将账户设置为 Superadmin: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的注意事项:不建议将数据库服务器与应用程序所在的同一实例一起使用,因为两个关键组件的资源正在共享。建议的部署模式是在运行Metabase应用程序的服务器之外有一个数据库服务器。

贡献者

Percy Musaka

Catalyst IT

photo of Percy Musaka

Percy 是 Catalyst IT 的软件工程师,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