如何使用Docker在Ubuntu20.04上安装元数据库

来自菜鸟教程
跳转至:导航、​搜索

介绍

Metabase 是一个基于 Java 的开源商业智能 (BI) 工具。 它可以连接到许多不同的数据库,并有一个问题构建器工具可以隐藏大型 SQL 查询的复杂性。

在本教程中,您将使用 Docker Compose 安装 Metabase,然后安装 Nginx 作为您的 Metabase 站点的反向代理。 接下来,您将通过使用 Certbot 从 Let's Encrypt Certificate Authority 下载和配置 TLS 证书来启用安全 HTTPS 连接。 最后,您将配置 Metabase 并加载一些示例数据,以便您可以尝试构建自己的问题和 BI 仪表板。

先决条件

要完成本教程,您需要:

注意:如果您使用的是DigitalOcean的One-Click Docker Image,您可以跳过这些先决条件。 此映像预配置了 Docker、Docker Compose 和 UFW。

在您选择的区域中启动一个新的 Docker 映像,然后以 root 用户身份登录并继续学习本教程。


最后,要启用 TLS,您需要一个指向服务器公共 IP 地址的域名。 这应该类似于 example.commetabase.example.com。 如果您使用的是 DigitalOcean,请参阅我们的 DNS 快速入门 ,了解有关在控制面板中创建域资源的信息。

准备好所有先决条件后,继续执行 步骤 1,您将在其中安装 docker-compose 包。

第 1 步 — 安装 Docker Compose

要安装 docker-compose 命令行工具,首先刷新你的包列表:

sudo apt update

然后使用 apt 安装包:

sudo apt install docker-compose

注意:您还可以安装比 Ubuntu 20.04 中包含的更新的 Docker Compose 包。 为此,请按照 如何在 Ubuntu 20.04 上安装和使用 Docker Compose 的 步骤 1

如果您选择使用此版本的 Docker Compose,则需要在本指南中用 docker compose 代替 docker-compose 作为命令。


您可以通过运行以下命令来确认软件包已安装:

docker-compose --version

您应该收到如下输出:

Outputdocker-compose version 1.25.0, build unknown
docker-py version: 4.1.0
CPython version: 3.8.10

一旦您确认 Docker Compose 已安装在您的服务器上,您将在本教程的下一步中使用它来配置和启动 Metabase。

第 2 步 — 使用 Docker Compose 运行元数据库

要开始创建您的 Metabase 容器,请在您的主目录中创建一个名为 metabase 的目录来存储您将在本教程中创建的文件。 您将使用此目录来存储运行 Metabase 所需的所有文件。

运行以下命令来创建目录:

mkdir ~/metabase

然后导航到它:

cd ~/metabase

现在使用 nano 或您喜欢的编辑器打开一个名为 docker-compose.yml 的新空白 YAML 文件:

nano docker-compose.yml

您将使用此文件和 docker-compose 命令来启动您的元数据库容器。 将以下行添加到文件中:

码头工人-compose.yml

version: '3'
services:
  metabase:
    image: metabase/metabase:latest
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - data:/metabase

volumes:
  data:

该文件定义了一个名为 metabaseservice,它运行 Metabase 应用程序。 该服务还引用了一个命名卷,它用于在运行的容器实例之外存储数据。 最后,metabase 服务将服务器上的端口 3000 暴露给在同一端口 3000 上运行的元数据库容器。

完成编辑后保存并退出文件。 如果您正在使用 nano,请按 CTRL+O 然后按 RETURN 保存,然后按 CTRL+X 退出。

您现在可以使用 docker-compose 命令启动 metabase 容器:

docker-compose up -d

up 子命令告诉 docker-compose 启动容器以及在 docker-compose.yml 文件中定义的相关卷和网络。 -d 标志(代表“守护进程”)告诉 docker-compose 在后台运行容器,这样命令就不会接管您的终端。 docker-compose 将在下载所需的 Docker 映像并启动容器时打印一些简短的输出:

OutputCreating network "metabase_default" with the default driver
Creating volume "metabase_data" with default driver
Pulling metabase (metabase/metabase:latest)...
latest: Pulling from metabase/metabase
. . .

如果您想随时停止 Metabase 容器,请在 ~/Metabase 目录中运行以下命令:

docker-compose stop

容器将停止。 卷中的配置和数据将被保留,以便您可以使用 docker-compose up -d 命令再次启动容器。


完成后,元数据库应该正在运行。 您可以通过使用 curl 命令获取主页来测试 Web 服务器是否在 127.0.0.1:3000 上运行:

curl --head http://localhost:3000

这将仅打印响应中的 HTTP 标头:

OutputHTTP/1.1 200 OK
Date: Tue, 15 Mar 2022 19:26:22 GMT
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Last-Modified: Tue, 15 Mar 2022 19:26:22 GMT
Strict-Transport-Security: max-age=31536000
Set-Cookie: metabase.DEVICE=3525ed6d-13e0-4ad0-8fdb-f1bc426706dc;HttpOnly;Path=/;Expires=Sat, 15 Mar 2042 19:26:22 GMT;SameSite=Lax
X-Permitted-Cross-Domain-Policies: none
Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'none'; script-src 'self' 'unsafe-eval' https://maps.google.com https://apis.google.com https://*.googleapis.com *.gstatic.com https://www.google-analytics.com   'sha256-lMAh4yjVuDkQ9NqkK4H+YHUga+anpFs5JAuj/uZh0Rs=' 'sha256-ib2/2v5zC6gGM6Ety7iYgBUvpy/caRX9xV/pzzV7hf0=' 'sha256-JJa56hyDfUbgNfq+0nq6Qs866JKgZ/+qCq2pkDJED8k='; child-src 'self' https://accounts.google.com; style-src 'self' 'unsafe-inline'; font-src 'self' ; img-src * 'self' data:; connect-src 'self' metabase.us10.list-manage.com www.google-analytics.com https://sp.metabase.com ; manifest-src 'self';  frame-ancestors 'none';
Content-Type: text/html;charset=utf-8
Expires: Tue, 03 Jul 2001 06:00:00 GMT
Content-Length: 0
Server: Jetty(9.4.43.v20210629)

200 OK 响应意味着应用程序正在端口 3000 上响应。 突出显示的 Set-CookieServer 标头确认应用程序是在 Jetty Web 服务器上运行的元数据库。

接下来,我们将设置 Nginx 以将公共流量代理到 Metabase 容器。

第 3 步 — 安装和配置 Nginx

将 Nginx 等 Web 服务器放在 Metabase 服务器前面可以通过将缓存、压缩和静态文件服务卸载到更高效的进程来提高性能。 我们将安装 Nginx 并将其配置为 反向代理 对 Metabase 的请求,这意味着它将负责处理从您的用户到 Metabase 的请求并再次返回。 使用非容器化的 Nginx 进程也将更容易在下一步中添加 Let's Encrypt TLS 证书。

首先,刷新你的包列表,然后使用 apt 安装 Nginx:

sudo apt install nginx

使用 Nginx Full UFW 应用程序配置文件允许公共流量到端口 80443(HTTP 和 HTTPS):

sudo ufw allow "Nginx Full"
OutputRule added
Rule added (v6)

接下来,在/etc/nginx/sites-available目录下打开一个新的Nginx配置文件。 我们将调用我们的 metabase.conf 但您可以使用不同的名称:

sudo nano /etc/nginx/sites-available/metabase.conf

将以下内容粘贴到新的配置文件中,确保将 your_domain_here 替换为您配置为指向 Metabase 服务器的域。 这应该类似于 metabase.example.com,例如:

/etc/nginx/sites-available/metabase.conf

server {
    listen       80;
    listen       [::]:80;
    server_name  your_domain_here;

    access_log  /var/log/nginx/metabase.access.log;
    error_log   /var/log/nginx/metabase.error.log;

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Proto https;
      proxy_pass http://localhost:3000;
  }
}

此配置目前仅适用于 HTTP,因为我们将让 Certbot 在下一步中负责配置 TLS。 配置文件的其余部分设置日志记录位置,然后将所有流量以及一些重要的代理标头传递到 http://localhost:3000,即我们在上一步中启动的元数据库容器。

保存并关闭文件,然后通过将其链接到 /etc/nginx/sites-enabled/ 来启用配置:

sudo ln -s /etc/nginx/sites-available/metabase.conf /etc/nginx/sites-enabled/

使用 nginx -t 验证配置文件语法是否正确:

sudo nginx -t
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

最后,使用新配置重新加载 nginx 服务:

sudo systemctl reload nginx.service

您的元数据库站点现在应该可以在纯 HTTP 上使用。 加载 http://your_domain_here(您可能需要点击安全警告),它看起来像这样:

现在您的站点已通过 HTTP 启动并运行,是时候使用 Certbot 和 Let's Encrypt 证书来保护连接了。 您应该在 完成 Metabase 的基于 Web 的设置程序之前执行此

第 4 步 — 安装 Certbot 并设置 TLS 证书

感谢 Certbot 和 Let's Encrypt 免费证书颁发机构,将 TLS 加密添加到您的元数据库应用程序只需两个命令。

首先,安装 Certbot 及其 Nginx 插件:

sudo apt install certbot python3-certbot-nginx

接下来,在 --nginx 模式下运行 certbot,并指定您在 Nginx server_name 配置指令中使用的相同域:

sudo certbot --nginx -d your_domain_here

系统将提示您同意 Let's Encrypt 服务条款,并输入电子邮件地址。

之后,系统会询问您是否要将所有 HTTP 流量重定向到 HTTPS。 这取决于您,但通常建议这样做并且安全。

之后,Let's Encrypt 将确认您的请求,Certbot 将下载您的证书:

OutputCongratulations! You have successfully enabled https://metabase.example.com

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=metabase.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/metabase.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/metabase.example.com/privkey.pem
   Your cert will expire on 2022-05-09. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Certbot 将使用新的配置和证书自动重新加载 Nginx。 在浏览器中重新加载您的网站,如果您选择重定向选项,它应该会自动将您切换到 HTTPS。

您的站点现在是安全的,可以安全地继续执行基于 Web 的设置步骤。

第 5 步 — 设置元数据库

返回您的网络浏览器,重新加载页面。 您现在应该通过安全的 https:// 连接打开 Metabase 的数据库配置页面。 现在您可以通过单击让我们开始按钮来完成配置过程。

系统将提示您输入以下详细信息:

  • 您的首选语言是什么?如果您的语言在列表中,请选择它并单击下一步,如下图所示:
  • 我们应该叫你什么? 填写所有字段并确保将您的密码记录在安全的地方。
  • 添加您的数据:单击窗格底部的稍后添加我的数据选项
  • 使用数据首选项: 选择是否要与 Metabase 共享使用数据以帮助改进工具。 做出选择后单击完成
  • 大功告成! 如果您想接收来自 Metabase 项目的更新,请添加您的电子邮件地址,否则您可以忽略此字段。

最后,单击 Take me to Metabase 按钮。 您将到达顶部显示“Greetings,Sammy”的页面,其中包含一组预配置的 X 射线 ,您可以单击它们来浏览您加载的示例数据。

单击任何 X-Ray 以查看有关 Metabase 中表的详细信息。 您可以使用 X-Ray 页面上的控件来过滤数据,或浏览相关的数据库字段和表格。

当您准备好尝试创建自己的 Question(这是 Metabase 用来描述查询的术语)时,单击页面右上角的 Browse data 网格图标。 单击 Sample Database 磁贴,然后单击列表中的表。 在本例中,我们将使用 Reviews 表。

您的屏幕将类似于以下内容:

现在单击页面右上角的 Summarize 按钮,并将 Summarize by 字段更改为 Average of Rating。 Metabase 将根据 Rating 字段中的表中的数据计算此值。 还将 Group by 字段更改为 Created At,因为该字段将允许 Metabase 计算所有示例产品和评级的每月平均产品评级。

单击右下角的 Done 按钮,您将进入显示平均产品评分图表的页面,如下图所示:

您可以尝试使用 FilterVisualizationSettings 按钮来更改结果图上的图表、数据和标签。

结论

在本教程中,您使用 Docker Compose 启动了 Metabase BI 工具,然后设置 Nginx 反向代理并使用 Let's Encrypt TLS 证书对其进行保护。 您还添加了一些示例数据,并尝试在 Metabase 中创建自己的 Questions 来查询数据。

您现在已准备好开始将 Metabase 连接到外部数据库以查询您自己的数据。 Metabase 支持 多种数据源 ,包括传统的 SQL 数据库以及分析引擎和面向文档的数据库。

有关使用 Metabase 的更多信息,请参阅 官方 Metabase 文档