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. 結論

メタベースは、Java ベースのオープンソース ビジネス インテリジェンス (BI) ツールです。多数のデータベースに接続し、質問ビルダーを使用して大規模な SQL クエリの複雑さを隠し、顧客データを読み取り可能な形式で視覚化して分析できるようにします。データについて質問したり、アプリに埋め込んだりして、顧客が自分でデータを探索できるようにすることができます。ダッシュボードと視覚化を生成し、Slack チャネルにアラートを送信できます。 MySQL、Google アナリティクス、MongoDB、PostgreSQL、ClickHouse、Amazon Athena、Amazon Redshift など、多くのデータベース プラットフォームやデータ ソースに接続できます。

Docker を使用して、Ubuntu 22.04 サーバーにメタベースをインストールする方法を学習します。

前提条件

  • 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 (複雑でないファイアウォール) が付属しています。

ファイアウォールが実行されているかどうかを確認します。

$ 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 構成ファイルは、メタベース Docker イメージの最新バージョンを取得し、ポート 3000 経由でアプリを公開します。これは、PostgreSQL イメージに接続されています。 PostgreSQL データベースのユーザー名とパスワードは、それぞれファイル db_user.txtdb_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 変数に対して生成した秘密鍵を貼り付けます。 https プロトコルを含むメタベース ドメインを入力します。使用するプロバイダーを使用して、SMTP の詳細を入力します。 Amazon SES を使用しています。 MB_PASSWORD_COMPLEXITY 変数は strong に設定されています。これは、メタベースのパスワードが 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 リポジトリをダウンロードする必要があります。

Nginxs 署名キーをインポートします。

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

Nginxs 安定版のリポジトリを追加します。

$ 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 をインストールする

SSL 証明書を生成するには、Certbot をインストールする必要があります。 Ubuntu リポジトリを使用して Certbot をインストールするか、Snapd ツールを使用して最新バージョンを取得できます。 Snapdバージョンを使用します。

Ubuntu 22.04 には、デフォルトで Snapd がインストールされています。次のコマンドを実行して、Snapd のバージョンが最新であることを確認します。 Snapd のバージョンが最新であることを確認します。

$ sudo snap install core
$ sudo snap refresh core

証明書ボットをインストールします。

$ 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 を開いて、メタベース セットアップ ウィザードを起動します。

Lets get started ボタンをクリックして、次のステップに進みます。次のページには、いくつかの手順がリストされています。言語を選択し、[次へ] をクリックして続行します。

メタベース管理者の詳細を入力します。

次に、探索するメタベースにデータを追加するよう求められます。データは今すぐ追加することも、後で追加することもできます。

Ill add my data later をクリックして続行します。

[メタベースが使用状況イベントを匿名で収集することを許可する] チェックマークをオフにし、[完了] ボタンをクリックしてプロセスを完了します。

[メタベースに移動] ボタンをクリックして、メタベース ダッシュボードを起動します。

今すぐメタベースを使い始めることができます。

ステップ 9 - メタベースのバックアップ

メタベース データベースをバックアップする場合は、次のコマンドを使用します。

$ 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 のコマンドを使用してメタベース データベースをバックアップすることです。

次に、ディレクトリに切り替えます。

$ cd /opt/metabase

Mastodon の最新のコンテナー イメージをプルします。

$ docker compose pull metabase/metabase:latest

必要に応じて、docker-compose.yml に変更を加えます。

Mastodon コンテナを再起動します。

$ docker compose up -d

上記の手順は、一般的な更新手順です。 Mastodon の GitHub リリース ページを常にチェックして、バージョン間の特定の更新タスクとコマンドを探し、すべてがスムーズに進むようにしてください。

結論

これで、Ubuntu 22.04 サーバーへのメタベースのインストールに関するチュートリアルは終了です。質問がある場合は、下のコメントに投稿してください。