如何使用 Docker 在 Ubuntu 20.04 上安装元数据库
简介 Metabase是一个基于 Java 的开源商业智能 (BI) 工具。它可以连接到许多不同的数据库,并有一个问题构建器工具可以隐藏大型 SQL 查询的复杂性。 在本教程中,您将使用 Docker Compose 安装 Metabase,然后安装 Nginx 作为您的 Metabase 站点的反向代理。接下来,您将使用 Certbot 从Let's Encrypt Certificate Au
简介
Metabase是一个基于 Java 的开源商业智能 (BI) 工具。它可以连接到许多不同的数据库,并有一个问题构建器工具可以隐藏大型 SQL 查询的复杂性。
在本教程中,您将使用 Docker Compose 安装 Metabase,然后安装 Nginx 作为您的 Metabase 站点的反向代理。接下来,您将使用 Certbot 从Let's Encrypt Certificate Authority下载和配置 TLS 证书来启用安全 HTTPS 连接。最后,您将配置 Metabase 并加载一些示例数据,以便您可以尝试构建自己的问题和 BI 仪表板。
先决条件
要完成本教程,您需要:
-
具有 2 个或更多 CPU、具有 sudo 访问权限的非 root 用户和防火墙的 Ubuntu 20.04 服务器。要进行此设置,请按照我们的Initial Server Setup with Ubuntu 20.04教程进行操作。
-
安装了 Docker。按照How To Install and Use Docker on Ubuntu 20.04的 Step 1 和 Step 2 进行安装并配置您的非 root 用户以能够运行
docker
个命令。
注意: 如果您使用 DigitalOcean 的One-Click Docker Image,则可以跳过这些先决条件。此映像预配置了 Docker、Docker Compose 和 UFW。
在您选择的区域中启动一个新的 Docker 映像,然后以 root 用户身份登录并继续学习本教程。
最后,要启用 TLS,您需要一个指向服务器公共 IP 地址的域名。这应该类似于example.com
或metabase.example.com
。如果您使用的是 DigitalOcean,请参阅我们的DNS 快速入门,了解有关在控制面板中创建域资源的信息。
准备好所有先决条件后,继续 Step 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
命令来启动您的 Metabase 容器。将以下行添加到文件中:
码头工人-compose.yml
version: '3'
services:
metabase:
image: metabase/metabase:latest
ports:
- "127.0.0.1:3000:3000"
volumes:
- data:/metabase
volumes:
data:
该文件定义了一个名为metabase
的service
,它运行 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
命令获取主页来测试网络服务器是否在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-Cookie
和Server
标头确认应用程序是在 Jetty Web 服务器上运行的元数据库。
接下来,我们将设置 Nginx 以将公共流量代理到 Metabase 容器。
第 3 步 - 安装和配置 Nginx
将 Nginx 等 Web 服务器放在 Metabase 服务器前面可以通过将缓存、压缩和静态文件服务卸载到更高效的进程来提高性能。我们将安装 Nginx 并将其配置为reverse proxy对 Metabase 的请求,这意味着它将负责处理用户对 Metabase 的请求并再次返回。使用非容器化的 Nginx 进程也将更容易在下一步中添加 Let's Encrypt TLS 证书。
首先,刷新你的包列表,然后使用apt
安装 Nginx:
sudo apt install nginx
使用 Nginx Full UFW 应用程序配置文件允许公共流量到端口80
和443
(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 加密添加到您的 Metabase 应用程序只需要两个命令。
首先,安装 Certbot 及其 Nginx 插件:
sudo apt install certbot python3-certbot-nginx
接下来,在--nginx
模式下运行certbot
,并指定您在 Nginxserver_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 的数据库配置页面。现在您可以通过单击 Let's get started 按钮来完成配置过程。
系统将提示您输入以下详细信息:
- 您的首选语言是什么? 如果您的语言在列表中,请选择它并按照以下屏幕截图单击下一步:
- 我们应该怎么称呼您? 填写所有字段并确保将您的密码记录在安全的地方。
- 添加您的数据:单击窗格底部的稍后添加我的数据选项
-
使用数据首选项: 选择是否要与 Metabase 共享使用数据以帮助改进工具。做出选择后,单击 Finish。
-
一切就绪! 如果您想接收来自 Metabase 项目的更新,请添加您的电子邮件地址,否则您可以忽略此字段。
最后,单击 Take me to Metabase 按钮。您将到达顶部显示“Greetings,Sammy”的页面,其中包含一组预配置的 X-Rays,您可以单击以浏览您加载的示例数据。
单击任何 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 计算所有示例产品和评级的每月平均产品评级。
单击右下角的完成按钮,您将进入显示平均产品评分图表的页面,如下图所示:
您可以尝试使用 Filter、Visualization 和 Settings 按钮来更改结果图表上的图表、数据和标签。
结论
在本教程中,您使用 Docker Compose 启动了 Metabase BI 工具,然后设置 Nginx 反向代理并使用 Let's Encrypt TLS 证书对其进行保护。您还添加了一些示例数据,并尝试在 Metabase 中创建自己的 Questions 来查询数据。
您现在已准备好开始将 Metabase 连接到外部数据库以查询您自己的数据。 Metabase 支持种数据源,包括传统的 SQL 数据库以及分析引擎和面向文档的数据库。
有关使用 Metabase 的更多信息,请参阅官方 Metabase 文档。
更多推荐
所有评论(0)