序章

Metabase は、Javaベースのオープンソースビジネスインテリジェンス(BI)ツールです。 さまざまなデータベースに接続でき、大規模なSQLクエリの複雑さを隠すことができる質問ビルダーツールを備えています。

このチュートリアルでは、Docker Composeを使用してMetabaseをインストールしてから、NginxをインストールしてMetabaseサイトのリバースプロキシとして機能させます。 次に、Certbotを使用して Let’s Encrypt Certificate Authority からTLS証明書をダウンロードして構成することにより、安全なHTTPS接続を有効にします。 最後に、Metabaseを構成し、いくつかのサンプルデータを読み込んで、独自の質問とBIダッシュボードの作成を試すことができます。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • 2つ以上のCPUを搭載したUbuntu20.04サーバー、sudoアクセス権を持つ非rootユーザー、およびファイアウォール。 これを設定するには、 Ubuntu20.04を使用したサーバーの初期設定チュートリアルに従ってください。
  • Dockerがインストールされています。 Ubuntu 20.04にDockerをインストールして使用する方法のステップ1およびステップ2に従って、Dockerをインストールしてroot以外のユーザーを構成しますdockerコマンドを実行できるようにします。

注: DigitalOceanのワンクリックDockerイメージを使用している場合は、これらの前提条件をスキップできます。 このイメージは、Docker、Docker Compose、およびUFWで事前構成されています。

選択したリージョンで新しいDockerイメージを起動し、 root ユーザーとしてログインして、チュートリアルを続行します。

最後に、TLSを有効にするには、サーバーのパブリックIPアドレスを指すドメイン名が必要です。 これは、example.comまたはmetabase.example.comのようになります。 DigitalOceanを使用している場合は、コントロールパネルでドメインリソースを作成する方法について、DNSクイックスタートを参照してください。

すべての前提条件が整ったら、ステップ1 に進み、docker-composeパッケージをインストールします。

ステップ1—DockerComposeをインストールする

docker-composeコマンドラインツールをインストールするには、最初にパッケージリストを更新します。

  1. sudo apt update

次に、aptを使用してパッケージをインストールします。

  1. sudo apt install docker-compose

:Ubuntu20.04に含まれているものよりも新しいDockerComposeパッケージをインストールすることもできます。 これを行うには、 Ubuntu20.04にDockerComposeをインストールして使用する方法のステップ1に従います。

このバージョンのDockerComposeを使用する場合は、このガイド全体で、コマンドとしてdocker-composeの代わりにdocker composeを使用する必要があります。

次のコマンドを実行して、パッケージがインストールされていることを確認できます。

  1. docker-compose --version

次のような出力を受け取るはずです。

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

Docker Composeがサーバーにインストールされていることを確認したら、それを使用して、このチュートリアルの次のステップでMetabaseを構成して起動します。

ステップ2—DockerComposeでMetabaseを実行する

Metabaseコンテナの作成を開始するには、ホームディレクトリにmetabaseというディレクトリを作成して、このチュートリアルで作成するファイルを保存します。 このディレクトリを使用して、Metabaseを実行するために必要なすべてのファイルを保存します。

次のコマンドを実行して、ディレクトリを作成します。

  1. mkdir ~/metabase

次に、そこに移動します。

  1. cd ~/metabase

次に、nanoまたはお好みのエディターを使用して、docker-compose.ymlという新しい空のYAMLファイルを開きます。

  1. nano docker-compose.yml

このファイルをdocker-composeコマンドとともに使用して、メタベースコンテナを起動します。 次の行をファイルに追加します。

docker-compose.yml
version: '3'
services:
  metabase:
    image: metabase/metabase:latest
    ports:
      - "3000:3000"
    volumes:
      - data:/metabase

volumes:
  data:

このファイルは、Metabaseアプリケーションを実行するmetabaseと呼ばれるserviceを定義します。 このサービスは、実行中のコンテナーインスタンスの外部にデータを格納するために使用する名前付きボリュームも参照します。 最後に、metabaseサービスは、サーバー上のポート3000を、同じポート3000で実行されているMetabaseコンテナーに公開します。

編集が完了したら、ファイルを保存して終了します。 nanoを使用している場合は、CTRL+ORETURNの順に押して保存し、CTRL+Xを押して終了します。

これで、docker-composeコマンドを使用してmetabaseコンテナを起動する準備が整いました。

  1. docker-compose up -d

upサブコマンドは、docker-composeに、docker-compose.ymlファイルで定義されているコンテナーと関連するボリュームおよびネットワークを開始するように指示します。 -dフラグ(「デーモン化」を表す)は、コマンドが端末を引き継がないように、docker-composeにコンテナーをバックグラウンドで実行するように指示します。 docker-composeは、必要なDockerイメージをダウンロードしてからコンテナーを起動するときに、簡単な出力を出力します。

Output
Creating 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ディレクトリで次のコマンドを実行します。

  1. docker-compose stop

コンテナは停止します。 docker-compose up -dコマンドを使用してコンテナーを再開できるように、ボリューム内の構成とデータが保持されます。

これが完了すると、Metabaseが実行されているはずです。 curlコマンドを使用してホームページを取得することにより、Webサーバーが127.0.0.1:3000で実行されていることをテストできます。

  1. curl --head http://localhost:3000

これにより、応答からHTTPヘッダーのみが出力されます。

Output
HTTP/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ヘッダーは、アプリケーションがJettyWebサーバーで実行されているMetabaseであることを確認します。

次に、パブリックトラフィックをMetabaseコンテナにプロキシするようにNginxを設定します。

ステップ3—Nginxのインストールと構成

NginxなどのWebサーバーをMetabaseサーバーの前に配置すると、キャッシュ、圧縮、静的ファイルの提供をより効率的なプロセスにオフロードすることで、パフォーマンスを向上させることができます。 Nginxをインストールし、Metabaseへのリバースプロキシリクエストを構成します。つまり、ユーザーからMetabaseへのリクエストの処理を処理します。 コンテナ化されていないNginxプロセスを使用すると、次のステップでLet’sEncryptTLS証明書を追加するのも簡単になります。

まず、パッケージリストを更新してから、aptを使用してNginxをインストールします。

  1. sudo apt install nginx

Nginx Full UFWアプリケーションプロファイルを使用して、ポート80および443(HTTPおよびHTTPS)へのパブリックトラフィックを許可します。

  1. sudo ufw allow "Nginx Full"
Output
Rule added Rule added (v6)

次に、/etc/nginx/sites-availableディレクトリにある新しいNginx構成ファイルを開きます。 metabase.confと呼びますが、別の名前を使用することもできます。

  1. 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;
  }
}

次のステップでCertbotにTLSの構成を任せるため、この構成は現時点ではHTTPのみです。 構成ファイルの残りの部分は、ログの場所を設定してから、すべてのトラフィックといくつかの重要なプロキシヘッダーを、前の手順で起動したMetabaseコンテナーであるhttp://localhost:3000に渡します。

ファイルを保存して閉じ、/etc/nginx/sites-enabled/にリンクして構成を有効にします。

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

nginx -tを使用して、構成ファイルの構文が正しいことを確認します。

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

そして最後に、nginxサービスを新しい構成でリロードします。

  1. sudo systemctl reload nginx.service

これで、MetabaseサイトがプレーンHTTPで利用できるようになります。 http://your_domain_hereをロードすると(セキュリティ警告をクリックする必要がある場合があります)、次のようになります。

Screenshot of Metabase's "Welcome to Metabase" page, with a button that says "Let's get started".

サイトがHTTP経由で稼働しているので、CertbotおよびLet’sEncrypt証明書を使用して接続を保護します。 これは、MetabaseのWebベースのセットアップ手順を実行する前に実行する必要があります

ステップ4—CertbotのインストールとTLS証明書の設定

CertbotとLet’sEncryptの無料認証局のおかげで、MetabaseアプリにTLS暗号化を追加するのに必要なコマンドは2つだけです。

まず、CertbotとそのNginxプラグインをインストールします。

  1. sudo apt install certbot python3-certbot-nginx

次に、certbot--nginxモードで実行し、Nginxserver_name構成ディレクティブで使用したものと同じドメインを指定します。

  1. sudo certbot --nginx -d your_domain_here

Let’s Encryptの利用規約に同意し、メールアドレスを入力するよう求められます。

その後、すべてのHTTPトラフィックをHTTPSにリダイレクトするかどうかを尋ねられます。 それはあなた次第ですが、これは一般的に推奨され、安全に行うことができます。

その後、Let’s Encryptがリクエストを確認し、Certbotが証明書をダウンロードします。

Output
Congratulations! 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—メタベースの設定

Webブラウザーに戻り、ページをリロードします。 これで、安全なhttps://接続を介してMetabaseのデータベース構成ページを開く必要があります。 これで、始めましょうボタンをクリックして、構成プロセスを完了することができます。

次の詳細を入力するように求められます。

  • ご希望の言語は何ですか?ご使用の言語がリストにある場合は、その言語を選択して、次のスクリーンショットに従って次へをクリックしてください。

Screenshot of Metabase's on-boarding language selection page

  • 何と呼びますか?すべてのフィールドに入力し、安全な場所にパスワードを記録してください。

Screenshot of Metabase's on-boarding user creation page

  • データを追加する:ペインの下部にある後でデータを追加しますオプションをクリックします

Screenshot of Metabase's Add your data page with a highlighted circle around the "I'll add my data later" link

  • 使用状況データの設定:ツールの改善に役立てるために、使用状況データをMetabaseと共有するかどうかを選択します。 選択したら、[完了]をクリックします。

  • これですべての設定が完了しました! Metabaseプロジェクトから更新を受け取りたい場合は、メールアドレスを追加してください。それ以外の場合は、このフィールドを無視してかまいません。

最後に、 Take me toMetabaseボタンをクリックします。 上部に「Greetings、Sammy」と表示されたページが表示されます。このページには、事前に構成された X-Rays のセットがあり、クリックしてロードしたサンプルデータを調べることができます。

Screenshot of Metabase's dashboard page with links to example "X-Rays" that you can click to explore sample data

X線をクリックして、メタベースのテーブルに関する詳細を表示します。 X線ページのコントロールを使用して、データをフィルタリングしたり、関連するデータベースフィールドやテーブルを調べたりすることができます。

独自の質問(これはMetabaseがクエリを説明するために使用する用語です)を作成する準備ができたら、ページの右上にあるデータの参照グリッドアイコンをクリックします。 サンプルデータベースタイルをクリックし、リストからテーブルをクリックします。 この例では、Reviewsテーブルを使用します。

画面は次のようになります。

Screenshot of Metabase's Question creation page showing a table of example review data

次に、ページの右上にある要約ボタンをクリックし、要約フィールドを評価の平均に変更します。 Metabaseは、[評価]フィールドのテーブルのデータに基づいてこの値を計算します。 また、 GroupbyフィールドをCreatedAt に変更します。これにより、Metabaseは、すべてのサンプル製品と評価の1か月あたりの平均製品評価を計算できるようになります。

Screenshot of Metabase's Question creation page showing how to create a graph of average product ratings

右下の完了ボタンをクリックすると、次のスクリーンショットのような平均製品評価のグラフを表示するページが表示されます。

Screenshot of an example Question that shows a line graph of average product ratings grouped by month

Filter Visualization 、および Settings ボタンを試して、結果のグラフのグラフ、データ、およびラベルを変更できます。

結論

このチュートリアルでは、DockerComposeを使用してMetabaseBIツールを起動し、Nginxリバースプロキシをセットアップして、Let’sEncryptTLS証明書を使用して保護しました。 また、いくつかのサンプルデータを追加し、Metabaseで独自の Questions を作成して、データをクエリすることを試みました。

これで、Metabaseを外部データベースに接続して、独自のデータを照会する準備が整いました。 Metabaseは、従来のSQLデータベース、分析エンジン、ドキュメント指向データベースなど、さまざまなデータソースをサポートしています。

Metabaseの使用の詳細については、公式のMetabaseドキュメントを参照してください。