我一直在互联网上寻找一个简单的(开源)分析平台,它能够与包括 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 应用程序。
PostgreSQL:一个强大的开源对象关系数据库,我们将用它来存储我们的 Metabase(元)数据和配置。这将使我们能够在不丢失数据的情况下更新、关闭和重建 Docker 容器。
Metabase:一个开源的商业智能工具,可让您使用来自各种数据库和数据源的数据创建图表和仪表板。
以下是我遵循的步骤
创建 AWS 账户
如果您还没有 AWS 账户,请前往 AWS 控制台创建一个。对于新用户,亚马逊提供免费套餐,您可以在使用第一年内免费创建一些资源。
创建 AWS Lightsail 实例
账户准备就绪后,前往 Amazon Lightsail。
- 在 Lightsail 页面上,点击“创建实例”按钮来创建一个新实例。
- 选择离您最近的实例位置。
-
选择您的实例镜像。
- 选择平台 Linux/Unix;
- 选择蓝图 Ubuntu 20.04 LTS;
- 如果您还没有 SSH 密钥,请创建一个;
-
选择您的实例计划。
- 为了开始,我建议选择
2GB 内存,1vCPU,60GB SSD
实例。(在本文发布时,亚马逊为该实例大小提供三个月免费使用)
- 为了开始,我建议选择
-
识别您的实例。
- 为您的资源指定一个唯一的名称。
- 确认设置无误后,创建实例。
- 创建实例时,请记下附加到您实例的公共 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 [快速入门]》中的说明进行操作。
- 安装 PostgreSQL 的相同步骤在
src/postgres.sh
文件中有所描述。要使用此文件安装 PostgreSQL,只需运行sudo ./src/postgres.sh
。这将安装最新版本的 PostgreSQL。
数据库设置
注意 - 下面的步骤也可以通过运行提供的
sudo ./src/db_setup.sh
来实现。
- 现在是棘手的部分。使用 Lightsail/EC2 实例运行 Metabase 的主要目的是将数据库和 Docker 容器放在同一台机器上。因此,我们需要确保 Metabase Docker 容器可以访问我们的 PostgreSQL 数据库。为此,我们需要修改一些 PostgreSQL 文件并重启服务。
- 默认情况下,安装的 PostgreSQL 版本将无法侦听
localhost
以外的任何地址。 -
需要更改此设置,通过修改 /etc/postgresql/ 以允许 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 用户账户和密码。这在下一步中是必需的。以下是在 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 地址,在浏览器中通过 http://{IP}/setup 确认 Metabase 正在运行。如果一切设置正确,页面应显示 Metabase 欢迎消息,如下所示。
Metabase 提示:不建议将数据库服务器和应用程序放在同一个实例中,因为这会导致两个关键组件共享资源。推荐的部署模型是将数据库服务器与运行 Metabase 应用程序的服务器分开。