如何使用 Docker 在 Ubuntu 22.04 上安装元数据库如何使用 Docker 在 Ubuntu 22.04 上安装元数据库如何使用 Docker 在 Ubuntu 22.04 上安装元数据库如何使用 Docker 在 Ubuntu 22.04 上安装元数据库
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何使用 Docker 在 Ubuntu 22.04 上安装元数据库

在此页

  1. 先决条件
  2. 第 1 步 - 配置防火墙
  3. 第 2 步 - 安装 Docker 和 Docker Compose
  4. 第 3 步 - 为元数据库创建 Docker Compose 文件
  5. 第 4 步 - 配置环境文件并启动元数据库
  6. 第 5 步 - 安装 Nginx
  7. 第 6 步 - 安装 SSL
  8. 第 7 步 - 配置 Nginx
  9. 第 8 步 - 安装和访问配置数据库
  10. 第 9 步 - 备份配置数据库
  11. 第 10 步 - 升级配置数据库
  12. 结论

Metabase 是一种基于 Java 的开源商业智能 (BI) 工具。它连接到许多数据库并使用问题生成器来隐藏大型 SQL 查询的复杂性,使您能够以可读格式可视化客户数据并对其进行分析。您可以询问有关您的数据的问题或将其嵌入您的应用程序中,让您的客户自行探索他们的数据。它可以生成仪表板和可视化效果,并向您的 Slack 频道发送警报。它可以连接到许多数据库平台和数据源,包括 MySQL、Google Analytics、MongoDB、PostgreSQL、ClickHouse、Amazon Athena、Amazon Redshift 等等。

使用 Docker,您将学习如何在 Ubuntu 22.04 服务器上安装 Metabase。

先决条件

  • A server running Ubuntu 22.04 with a minimum of 2 CPU cores and 2GB of memory. You will need to upgrade the server as per requirements.

  • A non-root user with sudo privileges.

  • A fully qualified domain name (FQDN) pointing to your server. For our purposes, we will use metabase.example.com as the domain name.

  • Metabase sends email notifications to users. We recommend you use a 3rd party Transactional mail service like Mailgun, Sendgrid, Amazon SES, or Sparkpost. The instructions in the guide will be using Amazon SES.

  • Make sure everything is updated.

    $ sudo apt update
    
  • Install basic utility packages. Some of them may already be installed.

    $ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
    

第 1 步 - 配置防火墙

第一步是配置防火墙。 Ubuntu 默认带有 ufw (Uncomplicated Firewall)。

检查防火墙是否正在运行。

$ sudo ufw status

您应该得到以下输出。

Status: inactive

允许 SSH 端口,以便防火墙在启用时不会中断当前连接。

$ sudo ufw allow OpenSSH

也允许 HTTP 和 HTTPS 端口。

$ sudo ufw allow http
$ sudo ufw allow https

启用防火墙

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

再次检查防火墙的状态。

$ sudo ufw status

您应该会看到类似的输出。

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

第 2 步 - 安装 Docker 和 Docker Compose

Ubuntu 22.04 附带旧版本的 Docker。要安装最新版本,首先,导入 Docker GPG 密钥。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

创建 Docker 存储库文件。

$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

更新系统存储库列表。

$ sudo apt update

安装最新版本的 Docker。

$ sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

确认它正在运行。

$ sudo systemctl status docker
? docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-01-05 05:55:23 UTC; 2min 16s ago
TriggeredBy: ? docker.socket
       Docs: https://docs.docker.com
   Main PID: 2116 (dockerd)
      Tasks: 8
     Memory: 22.5M
        CPU: 252ms
     CGroup: /system.slice/docker.service
             ??2116 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

默认情况下,Docker 需要 root 权限。如果您想避免在每次运行 docker 命令时都使用 sudo,请将您的用户名添加到 docker 组。

$ sudo usermod -aG docker $(whoami)

您将需要注销服务器并以同一用户身份重新登录以启用此更改或使用以下命令。

$ su - ${USER}

确认您的用户已添加到 Docker 组。

$ groups
navjot wheel docker

第 3 步 - 为配置数据库创建 Docker Compose 文件

为配置数据库创建一个目录。

$ mkdir ~/metabase

创建并打开 Docker 组合文件以进行编辑。

$ nano docker-compose.yml

将以下代码粘贴到其中。

version: '3.9'
services:
  metabase:
    image: metabase/metabase:latest
    container_name: metabase
    hostname: metabase
    volumes:
    - /dev/urandom:/dev/random:ro
    ports:
      - 3000:3000
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: metabase
      MB_DB_PORT: 5432
      MB_DB_USER_FILE: /run/secrets/db_user
      MB_DB_PASS_FILE: /run/secrets/db_password
      MB_DB_HOST: postgres
    env_file:
      - metabase.env
    healthcheck:
      test: curl --fail -I http://localhost:3000/api/health || exit 1
      interval: 15s
      retries: 5
      start_period: 10s
      timeout: 5s
    networks:
      - metanet1
    depends_on:
      - postgres
    secrets:
      - db_password
      - db_user
  postgres:
    image: postgres:latest
    container_name: postgres
    hostname: postgres
    environment:
      POSTGRES_USER_FILE: /run/secrets/db_user
      POSTGRES_DB: metabase
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'postgres']
    volumes:
      - ./postgresql:/var/lib/postgresql/data
    networks:
      - metanet1
    secrets:
      - db_password
      - db_user
networks:
  metanet1:
    driver: bridge
secrets:
   db_password:
     file: db_password.txt
   db_user:
     file: db_user.txt

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

上面的 Docker 组合文件获取最新版本的 Metabase Docker 镜像,并通过端口 3000 公开应用程序。它连接到 PostgreSQL 镜像。 PostgreSQL 数据库用户名和密码分别存储在db_user.txt 和db_password.txt 文件中。

创建并打开 db_user.txt 文件进行编辑。

$ nano db_user.txt

将您的用户名粘贴到其中,然后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

创建并打开 db_password.txt 文件进行编辑。

$ nano db_password.txt

将密码粘贴到其中,然后按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

第 4 步 - 配置环境文件并启动元数据库

使用以下命令生成加密密钥。

$ openssl rand -base64 32
aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=

复制密钥以备后用。

创建并打开 metabase.env 文件进行编辑。

$ nano metabase.env

将以下代码粘贴到其中。将您生成的密钥粘贴到 MB_ENCRYPTION_SECRET_KEY 变量中。填写您的 Metabase 域,包括 https 协议。使用您使用的任何提供商填写您的 SMTP 详细信息。我们正在使用亚马逊 SES。 MB_PASSWORD_COMPLEXITY 变量设置为强,这意味着您的 Metabase 密码长度至少应为 8 个字符,包括 2 个小写字母、2 个大写字母、1 个数字和 1 个特殊字符。

MB_SITE_URL=https://metabase.example.com
MB_SITE_NAME="Howtoforge"



MB_EMAIL_FROM_NAME=Howtoforge
MB_EMAIL_SMTP_HOST=email-smtp.us-west-2.amazonaws.com
MB_EMAIL_SMTP_USERNAME=AWS_USERID
MB_EMAIL_SMTP_PASSWORD=AWS_KEY
MB_EMAIL_SMTP_PORT=587
MB_EMAIL_SMTP_SECURITY=starttls

MB_ENCRYPTION_SECRET_KEY=aWPk99bIjkG7NvWYVqR5NIAojhW1Idk0OvTH1xWVMbY=
MB_ANON_TRACKING_ENABLED=false
MB_APPLICATION_NAME=Howtoforge Metabase
MB_PASSWORD_COMPLEXITY=strong

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

启动 Docker 容器。

$ docker compose up -d

您可以使用以下命令查看容器的状态。

$ watch docker ps

您将收到类似的输出。等待两个容器的状态都变得健康,然后按 Ctrl + C 退出屏幕。

CONTAINER ID   IMAGE                      COMMAND                  CREATED         STATUS                   PORTS                                       NAMES
15698ae2de6a   metabase/metabase:latest   "/app/run_metabase.sh"   2 minutes ago   Up 2 minutes (healthy)   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   metabase
ee2d03dc3a00   postgres:latest            "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes (healthy)   5432/tcp                                    postgres

第 5 步 - 安装 Nginx

Ubuntu 22.04 附带旧版本的 Nginx。要安装最新版本,您需要下载官方 Nginx 存储库。

导入 Nginx 签名密钥。

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

添加 Nginx 稳定版本的存储库。

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

更新系统存储库。

$ sudo apt update

安装 Nginx。

$ sudo apt install nginx

验证安装。

$ nginx -v
nginx version: nginx/1.22.1

启动 Nginx 服务器。

$ sudo systemctl start nginx

检查服务器的状态。

$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-01-05 07:21:46 UTC; 1s ago
       Docs: https://nginx.org/en/docs/
    Process: 13197 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 13198 (nginx)
      Tasks: 3 (limit: 2237)
     Memory: 2.6M
        CPU: 7ms
     CGroup: /system.slice/nginx.service
             ??13198 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??13199 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
             ??13200 "nginx: worker process" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""

Jan 05 07:21:46 metabase systemd[1]: Starting nginx - high performance web server...
Jan 05 07:21:46 metabase systemd[1]: Started nginx - high performance web server.

第 6 步 - 安装 SSL

我们需要安装 Certbot 来生成 SSL 证书。您可以使用 Ubuntu 存储库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。

Ubuntu 22.04 默认安装了 Snapd。运行以下命令以确保您的 Snapd 版本是最新的。确保您的 Snapd 版本是最新的。

$ sudo snap install core
$ sudo snap refresh core

安装 Certbot。

$ sudo snap install --classic certbot

使用以下命令通过创建指向 /usr/bin 目录的符号链接来确保 Certbot 命令运行。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

运行以下命令以生成 SSL 证书。

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m  -d metabase.example.com

上面的命令会将证书下载到服务器上的 /etc/letsencrypt/live/metabase.example.com 目录。

生成 Diffie-Hellman 组证书。

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

试运行该过程以检查 SSL 续订是否正常工作。

$ sudo certbot renew --dry-run

如果您没有看到任何错误,则一切就绪。您的证书将自动更新。

第 7 步 - 配置 Nginx

打开文件 /etc/nginx/nginx.conf 进行编辑。

$ sudo nano /etc/nginx/nginx.conf

在行 include /etc/nginx/conf.d/*.conf; 之前添加以下行。

server_names_hash_bucket_size  64;

通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

创建并打开文件 /etc/nginx/conf.d/metabase.conf 进行编辑。

$ sudo nano /etc/nginx/conf.d/metabase.conf

将以下代码粘贴到其中。

server {
  # Redirect any http requests to https
  listen         80;
  listen         [::]:80;
  server_name    metabase.example.com;
  return 301     https://$host$request_uri;
}

server {
  listen                    443 ssl http2;
  listen                    [::]:443 ssl http2;
  server_name               metabase.example.com;

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

  # TLS configuration
  ssl_certificate           /etc/letsencrypt/live/metabase.example.com/fullchain.pem;
  ssl_certificate_key       /etc/letsencrypt/live/metabase.example.com/privkey.pem;
  ssl_trusted_certificate   /etc/letsencrypt/live/metabase.example.com/chain.pem;
  ssl_protocols             TLSv1.2 TLSv1.3;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
  ssl_prefer_server_ciphers on;
  ssl_session_cache         shared:SSL:50m;
  ssl_session_timeout       1d;

  # OCSP Stapling ---
  # fetch OCSP records from URL in ssl_certificate and cache them
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;

  location / {
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header	    X-Forwarded-Host $http_host;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass              http://127.0.0.1:3000;
  }
}

完成后,按 Ctrl + X 并在出现提示时输入 Y 来保存文件。

验证 Nginx 配置文件语法。

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

重新启动 Nginx 服务器。

$ sudo systemctl restart nginx

第 8 步 - 安装和访问配置数据库

打开 URL https://metabase.example.com 以启动元数据库设置向导。

单击让我们开始按钮继续下一步。下一页将列出几个步骤。选择您的语言,然后单击下一步继续。

输入您的元数据库管理员详细信息。

接下来,您将被要求将数据添加到元数据库以进行探索。您可以现在添加数据,也可以稍后添加。

单击稍后添加我的数据以继续。

取消选中 Allow Metabase to anonymously collect usage events 复选标记并单击 Finish 按钮以完成该过程。

单击 Take me to Metabase 按钮以启动 Metabase 仪表板。

您现在可以开始使用元数据库了。

第 9 步 - 备份元数据库

如果要备份 Metabase 数据库,请使用以下命令。

$ docker exec -t postgres pg_dumpall -c -U navjot > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql

将 navjot 替换为您的数据库用户名,将 postgres 替换为您的 PostgreSQL docker 容器名称。

要恢复数据库,请使用以下命令。

$ cat dump_*.sql | docker exec -i your-db-container psql -U navjot

第 10 步 - 升级元数据库

升级元数据库需要几个步骤。第一步是使用步骤 9 中的命令备份 Metabase 数据库。

然后,切换到目录。

$ cd /opt/metabase

拉取 Mastodon 的最新容器镜像。

$ docker compose pull metabase/metabase:latest

如果需要,可以在 docker-compose.yml 中进行任何更改。

重新启动 Mastodon 容器。

$ docker compose up -d

以上说明为通用更新说明。始终检查 Mastodon 的 GitHub 发布页面,以查找版本之间的任何特定更新任务和命令,以确保一切顺利进行。

结论

我们关于在 Ubuntu 22.04 服务器上安装 Metabase 的教程到此结束。如果您有任何问题,请在下面的评论中发表。

©2015-2025 艾丽卡 support@alaica.com