序章

Matomo は、PHPで記述されたオープンソースのセルフホストWeb分析アプリケーションです。

このチュートリアルでは、Docker Composeを使用してMatomoとMariaDBデータベースをインストールしてから、NginxをインストールしてMatomoアプリのリバースプロキシとして機能させます。 最後に、Certbotを使用してLet’s Encrypt認証局からSSL証明書をダウンロードして構成することにより、安全なHTTPS接続を有効にします。

前提条件

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

  • UFWファイアウォールが有効になっているUbuntu20.04サーバー。 これらの要件の設定の詳細については、 Ubuntu20.04を使用した初期サーバー設定をお読みください。
  • Dockerがインストールされています。 これを行うには、 Ubuntu20.04にDockerをインストールして使用する方法のステップ1を使用できます。 オプションで、 root以外のユーザーがsudoを使用せずにdockerコマンドを実行できるようにする場合は、そのチュートリアルのステップ2に従うことができます。
  • DockerComposeがインストールされています。 このソフトウェアをインストールするには、 Ubuntu20.04にDockerComposeをインストールして使用する方法のステップ1に従ってください。

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

選択したリージョンで新しいDockerイメージを起動し、 root ユーザーとしてログインして、チュートリアルを続行します。 root ユーザーを使用するため、以降のすべてのコマンドのsudo部分を省略できますが、必須ではありません。

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

すべての前提条件を満たしたら、ステップ1 に進み、Matomoソフトウェアをダウンロードして起動します。

ステップ1—DockerComposeでMatomoとMariaDBを実行する

最初のステップは、MatomoアプリとMariaDBデータベースの両方のコンテナーを起動するDockerCompose構成を作成することです。

このチュートリアルでは、ホームディレクトリのmatomoディレクトリ内に構成を配置します。 /opt/matomoディレクトリまたは選択した他のディレクトリで作業することもできます。

まず、ホームディレクトリにいることを確認します。

  1. cd ~

次に、matomoディレクトリとcdを作成します。

  1. mkdir matomo
  2. cd matomo

次に、docker-compose.ymlという名前の新しい空のYAMLファイルを開きます。

  1. nano docker-compose.yml

これは、docker-composeソフトウェアがコンテナを起動するときに読み取る構成ファイルです。 以下をファイルに貼り付けます。

docker-compose.yml
version: "3"

services:
  db:
    image: mariadb
    command: --max-allowed-packet=64MB
    restart: always
    environment:
      - MARIADB_DATABASE=matomo
      - MARIADB_USER
      - MARIADB_PASSWORD
      - MARIADB_ROOT_PASSWORD
    volumes:
      - ./db:/var/lib/mysql

  app:
    image: matomo
    restart: always
    volumes:
      - ./matomo:/var/www/html
    ports:
      - 127.0.0.1:8080:80

このファイルは、2つのservices、1つはMariaDBコンテナーであるdbサービス、もう1つはMatomoソフトウェアを実行するappサービスを定義します。 どちらのサービスも、データを格納する名前付きボリュームを参照し、appサービスは、ループバック(127.0.0.1)インターフェイスのポート8080も開きます。これは、接続します。 localhost経由で。

ファイルを保存し、テキストエディタを終了して続行します。 nanoで、CTRL+OENTERの順に押して保存し、CTRL+Xを押して終了します。

MariaDBコンテナーが機能するには、環境変数を介してコンテナーに渡される構成が必要です。 docker-compose.ymlファイルにはこれらの環境変数がリストされていますが、すべてに値が関連付けられているわけではありません。 これは、特にGitリポジトリやその他のソース管理システムにパスワードをコミットする場合は、docker-compose.ymlファイルにパスワードを含めないようにすることをお勧めします。

代わりに、同じディレクトリの.envファイルに必要な情報を配置します。このファイルは、コンテナの起動時にdocker-composeコマンドによって自動的に読み込まれます。

nanoを使用して新しい.envファイルを開きます。

  1. nano .env

ユーザー名とパスワード、およびMariaDB rootスーパーユーザーアカウントの強力なパスワードを入力する必要があります。

.env
MARIADB_USER=matomo
MARIADB_PASSWORD=a_strong_password_for_user
MARIADB_ROOT_PASSWORD=a_strong_password_for_root

強力なパスワードを生成する1つの方法は、opensslコマンドを使用することです。これは、ほとんどのオペレーティングシステムで使用できるはずです。 次のコマンドは、パスワードとして使用できるランダムな30文字のハッシュを出力します。

  1. openssl rand 30 | base64 -w 0 ; echo

.envファイルへの情報の入力が完了したら、それを保存してテキストエディタを終了します。

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

  1. sudo docker-compose up -d

upサブコマンドは、docker-composedocker-compose.ymlファイルで定義されたコンテナー(およびボリュームとネットワーク)を開始するように指示し、-dフラグは開始するように指示しますバックグラウンドで(「デーモン化」)、コマンドが端末を引き継がないようにします。 docker-composeは、コンテナーを開始するときに簡単な出力を出力します。

Output
Creating matomo_db_1 ... done Creating matomo_app_1 ... done

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

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

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

Output
HTTP/1.1 200 OK Date: Tue, 25 Jan 2022 19:56:16 GMT Server: Apache/2.4.51 (Debian) X-Powered-By: PHP/8.0.14 X-Matomo-Request-Id: 1e953 Cache-Control: no-store, must-revalidate Referrer-Policy: same-origin Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' 'unsafe-inline' 'unsafe-eval' data:; Set-Cookie: MATOMO_SESSID=dde7d477b0822e166ed90448964ec1e7; path=/; HttpOnly; SameSite=Lax Content-Type: text/html; charset=utf-8

200 OK応答は、Matomoサーバーが稼働中であることを意味しますが、localhostでのみ使用できます。 強調表示されたX-Matomo-Request-Idヘッダーは、サーバーがMatomoであり、ポート8080でリッスンするように構成されている可能性のある他のものではないことを示します。 次に、パブリックトラフィックをMatomoコンテナにプロキシするようにNginxを設定します。

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

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

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

  1. sudo apt update
  2. sudo apt install nginx

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

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

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

  1. sudo nano /etc/nginx/sites-available/matomo.conf

以下を新しい構成ファイルに貼り付けます。必ずyour_domain_hereをMatomoサーバーを指すように構成したドメインに置き換えてください。 これは、たとえばmatomo.example.comのようになります。

/etc/nginx/sites-available/matomo.conf
server {
    listen       80;
    listen       [::]:80;
    server_name  your_domain_here;

    access_log  /var/log/nginx/matomo.access.log;
    error_log   /var/log/nginx/matomo.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:8080;
  }
}

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

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

  1. sudo ln -s /etc/nginx/sites-available/matomo.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

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

Screenshot of the first page of the Matomo web installation process, with a "Welcome!" headline and a green "Next" button

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

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

CertbotとLet’sEncryptの無料認証局のおかげで、MatomoアプリにSSL暗号化を追加するのに必要なコマンドは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://matomo.example.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=matomo.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/matomo.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/matomo.example.com/privkey.pem Your cert will expire on 2021-12-06. 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ベースのセットアップ手順を安全に続行できます。

ステップ4—Matomoをセットアップする

Webブラウザーに戻ると、Matomoの Welcome!ページが安全なhttps://接続を介して開かれているはずです。 これで、ユーザー名とパスワードを安全に入力して、インストールプロセスを完了することができます。

次へボタンをクリックします。 システムチェックの手順に進みます。

Screenshot of Matomo's "System Check" page with a list of system properties with green checkmarks next to them

これはMatomoが実行されているシステムの概要であり、すべてが問題がないことを示す緑色のチェックマークである必要があります。 一番下までスクロールして、次へボタンをクリックします。

これで、データベース設定ページが表示されます。

Screenshot of Matomo's "Database Setup" page, with a form for inputting database connection details

このページに入力する情報は、MatomoアプリケーションにMariaDBデータベースへの接続方法を指示します。 手順1で選択したMARIADB_USERMARIADB_PASSWORDが必要です。 必要に応じて、.envファイルからそれらをコピーできます。

最初の4つのフィールドに入力します。

  • データベースサーバー: db
  • ログイン:MARIADB_USER環境変数に設定したユーザー名
  • パスワード:MARIADB_PASSWORD環境変数に設定したパスワード
  • データベース名: matomo

残りの2つのフィールドでは、デフォルトで問題ありません。

もう一度次へをクリックします。 データベースが正しく設定されたことを確認するメッセージが表示されます。 もう一度次へをクリックします。 次に、管理者ユーザーを設定する必要があります。最後に、分析を収集する最初のWebサイトに関する情報を設定します。

その後、おめでとうございますページのステップ8に進む必要があります。 ほぼすべて完了です。 一番下までスクロールして、 Matomoに進むボタンをクリックすると、ホームページに移動します。

Screenshot of the Matomo homepage with a large orange "Warning:" box along the top

ページの上部に大きな警告が表示されます。 このプロセスを完了するには、Matomoの構成ファイルに対して行う必要のある小さな更新があります。

コマンドラインに戻り、テキストエディタで構成ファイルを開きます。

  1. sudo nano matomo/config/config.ini.php

上部近くに[General]セクションがあります。 そのセクションの最後に、以下で強調表示されている最後の3行を追加します。

config.ini.php
[General]
proxy_client_headers[] = "HTTP_X_FORWARDED_FOR"
proxy_host_headers[] = "HTTP_X_FORWARDED_HOST"
salt = "e0a81d6e54d6d2200efd0f0ef6ef8563"
trusted_hosts[] = "localhost"
trusted_hosts[] = "example.com"
trusted_hosts[] = "localhost:8080"
assume_secure_protocol = 1
force_ssl = 1

これらのオプションにより、Matomoは、ポート8080を使用しても安全であり、常に安全な接続を介してアクセスされていると想定する必要があることを通知します。

構成ファイルを保存して閉じてから、ブラウザーに戻ってページをリロードします。 エラーは解消され、ログインプロンプトが表示されます。

Screenshot of Matomo's "Sign in" screen with a form for username and password

セットアップ中に作成した管理者アカウントでログインすると、ダッシュボードが表示されます。

Screenshot of Matomo's homepage dashboard with a placeholder indicating "No data has been recorded yet" and instructions on how to set up the tracking code

トラッキングコードをまだ設定していない可能性があるため、ダッシュボードにはデータが記録されていないことが示されます。 指示に従って、WebサイトでのJavaScriptコードの設定を完了し、分析データの受信を開始します。

結論

このチュートリアルでは、Docker Composeを使用してMatamo分析アプリとMariaDBデータベースを起動し、Nginxリバースプロキシを設定して、Let’sEncryptSSL証明書を使用して保護しました。

これで、Webサイトをセットアップし、Matomo分析追跡スクリプトを追加する準備が整いました。 Matomoソフトウェアの操作の詳細については、公式のMatomoドキュメントを参照してください。