ECSにMatomo（Piwik）をインストールしてWebとモバイルアナリティクスを実行

この記事では、**Alibaba Cloud Elastic Compute Service**（ECS）インスタンスに**Matomo（Piwik）**をインストールして、Webとモバイルのアナリティクスを実行します。

[Alibaba Cloud Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.40ae5c87K7QBE5)執筆、Liptan Biswas。[Tech Share](https://www.alibabacloud.com/campaign/techshare?spm=a2c65.11461447.0.0.40ae5c87K7QBE5)は、技術的な知識やベストプラクティスをクラウドコミュニティ内で共有することを奨励するAlibaba Cloudのインセンティブプログラムです。

Matomoはオープンソースで無料のウェブおよびモバイル分析プラットフォームで、以前はPiwikとして知られていました。これは、Google Analyticsに代わるセルフホスティング型のオープンソースのアナリティクスで、ほぼ同様の機能を提供しています。セルフホスト型のアプリケーションであるため、ユーザーに分析データの完全な所有権を提供します。

検索エンジンのキーワード、リファラー、訪問者の国と言語、使用されたデバイスとブラウザ、サイト内の検索、気に入ったページ、ページに費やした時間、およびコンバージョンを含む、あなたのウェブサイトと訪問者の包括的なレポートを提供することができます。自己ホスト型のMatomoインスタンスには、データやユーザー数の制限はありません。ウェブサイト上でのトラッキングの設定はとても簡単で、トラッキングしたいページにJavaScriptのコードを追加するだけです。Matomoには、ほとんどの一般的なCMS、ブログ、Eコマースプラットフォームのトラッキングを簡単に設定するためのプラグインもあります。Matomoは非常に人気のあるアプリケーションで、現在100万以上のウェブサイトがMatomoを使ってアナリティクスを取得しています。

この記事では、[Alibaba Cloud Elastic Compute Service](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.40ae5c87K7QBE5) (ECS)インスタンスにMatomo (Piwik)をインストールして、ウェブとモバイルのアナリティクスを実行します。

#前提条件
1、[Alibaba Cloud ECS](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.40ae5c87K7QBE5&biz_params=%7B%22intl%22:%22%7B%5C%22referralCode%5C%22:%5C%22fmj2og%5C%22%7D%22%7D)インスタンスにUbuntu 16.04 64ビットがインストールされています。
2、ポート80、443を許可するように構成されたファイアウォールまたはセキュリティグループのルール。
3、[ECS インスタンスを指す](https://www.alibabacloud.com/help/doc-detail/58077.htm?spm=a2c65.11461447.0.0.40ae5c87K7QBE5)必要がある[ドメイン名](https://www.alibabacloud.com/domain?spm=a2c65.11461447.0.0.40ae5c87K7QBE5&biz_params=%7B%22intl%22:%22%7B%22referralCode%22:%22fmj2og%22%7D%22%7D)。

[クイックスタートガイド](https://www.alibabacloud.com/help/doc-detail/25422.htm?spm=a2c65.11461447.0.0.40ae5c87K7QBE5)に従ってECSインスタンスを作成し、インスタンスに接続するための手順を見つけることができます。このチュートリアルでは、すでにAlibaba Cloud ECSインスタンスを作成し、Ubuntuインスタンスを指すようにmatomo.example.comを設定していることを前提としています。SSH経由でインスタンスに接続したら、以下のコマンドを実行してリポジトリキャッシュとベースシステムを更新します。

```
apt update && apt -y upgrade && apt -y autoremove
```

#PHP 7でNGINXをインストールする
MatomoはPHPに対応した任意のWebサーバーにインストールすることができます。今回は、PHP 7.2を搭載した軽量なNGINXのWebサーバーにMatomoアプリをインストールしてみます。PHP 7.2は利用可能なPHPの最新バージョンであり、古いバージョンのPHPに比べて大きなアドバンテージを持っています。PHP 7.2用のUbuntu PPAリポジトリを追加します。

```
apt -y install software-properties-common
add-apt-repository ppa:ondrej/php –yes
apt update
```

NGINXウェブサーバーとPHP7.2を必要なPHPモジュールと一緒にインストールします。

```
apt -y install nginx php7.2 php7.2-curl php7.2-gd php7.2-cli php7.2-mysql php-xml php7.2-mbstring php7.2-fpm unzip
Since we are using the PHP-FPM with NGINX to execute the PHP scripts, edit the PHP configuration file for the PHP-FPM.
```

```
nano /etc/php/7.2/fpm/php.ini
```

適切なタイムゾーンとメモリ制限を設定します。必要であれば、メモリ制限オプションに -1 を使用すると、スクリプトが消費するメモリ量の制限が解除されます。コメントを外し、"cgi.fix_pathinfo "の値に0を設定します。パラメータを更新すると、以下のように更新されるはずです。

```
memory_limit = 512M    
...    
date.timezone =Asia/Kolkata
...
cgi.fix_pathinfo=0
```

php.iniファイルの設定が終わったら、「php-fpm」サービスを再起動し、起動時に自動的に起動するようにします。

```
systemctl restart php7.2-fpm
systemctl enable php7.2-fpm
```

また、nginxのWebサーバーを起動し、起動時に自動的に起動するようにします。

```
systemctl restart nginx
systemctl enable nginx
```

#Matomoをダウンロード
Piwikの開発者が最近PiwikからMatomoに名前を変えたので、アーカイブの名前は「piwik.zip」のままです。Matomo（Piwik）のアーカイブをダウンロードします。

```
wget [https://builds.matomo.org/piwik.zip](https://builds.matomo.org/piwik.zip?spm=a2c65.11461447.0.0.40ae5c87K7QBE5&file=piwik.zip)
```

上記のリンクが期限切れの場合は、Matomoのダウンロードページでいつでも最新版のアプリケーションへのリンクを見つけることができます。ダウンロードしたアーカイブを /var/www/piwik ディレクトリにデプロイします。

```
unzip piwik.zip -d /var/www/
```

ファイルの適切な所有権をNGINXユーザーに提供します。

```
chown -R www-data:www-data /var/www/
```

この時点で、MatomoファイルはECSインスタンスに正常に配置されています。

#SSLの設定
SSL証明書を使ってMatomoインスタンスを保護することは必須ではありませんが、推奨されるステップです。MatomoはJavaScriptを使ってクライアントのコンピュータから様々なウェブサイトのデータを収集します。交換されるデータを暗号化する必要性は非常に重要です。また、HTTPSのみでアクセス可能なウェブサイトにMatomoのトラッキングコードが挿入されている場合、多くのブラウザは安全でないHTTP接続で提供されるコンテンツをブロックします。クライアントのコンピュータでJavaScriptがブロックされている場合、Matomoはあらゆる種類のデータを収集することができません。

このチュートリアルでは、Let's Encrypt CAが生成した無料のSSL証明書を使用します。しかし、ビジネスユーザーは、非常に高いレベルのセキュリティと信頼性を実現するために、[アリババクラウドSSL証明書サービス]()の利用を検討する必要があります。

CertbotはLet's Encryptの無料SSL証明書を生成するためのクライアントアプリケーションです。Certbotをインストールします。

```
add-apt-repository ppa:certbot/certbot –yes
apt update
apt -y install certbot
```

注：SSL証明書を要求する前に、使用しているドメインがECSインスタンスのIPアドレスに向けられていることを確認してください。そうでない場合は、DNS管理パネルで「A」タイプのレコードを作成し、ドメインまたはサブドメインをECSインスタンスのパブリックIPアドレスに向けて、DNSが伝播するのを待ちます。

ドメインのSSL証明書を生成します。

```
certbot certonly --webroot -w /var/www/html -d 
```

matomo.example.com
matomo.example.comを実際のドメイン名に置き換えます。

Let's Encryptの証明書は3ヶ月ごとに期限が切れるので、証明書を更新するためのcronジョブを作成します。

```
{ crontab -l; echo '36 2 * /usr/bin/certbot renew --post-hook "systemctl reload nginx"' }; } }. | crontab -l; echo '36 2 * /usr/certbot renew
```

上記のコマンドは、毎日午前2時36分に更新コマンドを実行します。証明書の有効期限が切れている場合は、自動的に更新します。

Matomoアプリの仮想ホスティング用のNGINXサーバブロックを新規作成します。

```
nano /etc/nginx/sites-available/matomo
```

ファイルに以下の設定を入力してください。matomo.example.comの出現箇所をすべて実際のドメイン名に置き換え、Let's Encrypt SSL証明書のパスと秘密鍵が正しいことを確認してください。


```
server {
    listen 80;
    server_name matomo.example.com;
    return 301 https://$server_name$request_uri;
}
server {
    listen 443 ssl;    
    server_name matomo.example.com;
 
    ssl_certificate  /etc/letsencrypt/live/matomo.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/matomo.example.com/privkey.pem;
 
    add_header Strict-Transport-Security "max-age=15768000;
    includeSubDomains; preload;";
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
 
    root /var/www/piwik/;
    index index.php;

    access_log /var/log/nginx/matomo.example.com_access.log;
    error_log /var/log/nginx/matomo.example.com_error.log;

    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;  

    location = /index.php {
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_buffers 256 4k;
        fastcgi_intercept_errors on;
        fastcgi_read_timeout 14400; 
        fastcgi_index index.php;
    }
    location = /piwik.php {
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_buffers 256 4k;
        fastcgi_intercept_errors on;
        fastcgi_read_timeout 14400; 
        fastcgi_index index.php;
    }

    location ~* ^.+\.php$ {
        return 403;
    }
    location ~* (?:DESIGN|(?:gpl|README|LICENSE)[^.]*|LEGALNOTICE)(?:\.txt)*$ {
        return 302 /;
    }
    location ~* \.(?:bat|git|ini|sh|svn[^.]*|txt|tpl|xml)$ {
        return 404;
    }
    location ~ ^/(config|core|lang|misc|tmp)/ {
        deny all;
    }
}
```

設定ファイルを有効化します。

```
ln -s /etc/nginx/sites-available/matomo /etc/nginx/sites-enabled/matomo
```

設定の変更を実装するためにnginxウェブサーバーを再起動します。

```
systemctl restart nginx php7.2-fpm
```

#ApsaraDB RDSインスタンスでのMySQLデータベースのセットアップ
MySQLデータベースは、Matomoアプリケーションがインストールされている同じECSインスタンスにインストールすることもできます。ただし、かなりの訪問者数を持つウェブサイトにはお勧めできません。MySQLの[Alibaba Cloud ApsaraDB for RDS](https://www.alibabacloud.com/product/apsaradb-for-rds?spm=a2c65.11461447.0.0.40ae5c87K7QBE5)インスタンスを使用すると、セルフホスティング版のMySQLよりも多くの利点があります。デプロイが非常に簡単で、高性能な機能で管理のしやすさを提供します。

500万ページビューごとに、ほぼ1ギガバイトのデータが収集され、MySQLデータベースに保存されています。もしあなたのウェブサイトが多くの訪問者を獲得しているのであれば、[ApsaraDB RDS](https://www.alibabacloud.com/product/apsaradb-for-rds?spm=a2c65.11461447.0.0.40ae5c87K7QBE5) instance for MySQLを使用することを強くお勧めします。ApsaraDBのパフォーマンスはホストされたMySQLサーバーよりもかなり速いので、データは迅速に処理され、レポートを素早く取得することができます。

新しいApsaraDB MySQLインスタンスを作成するには、[ApsaraDB RDSコンソール](https://rds.console.aliyun.com/?spm=a2c65.11461447.0.0.40ae5c87K7QBE5)にアクセスし、インスタンスの作成ボタンをクリックします。そして支払い方法、リージョン、ゾーンを選択します。MatomoのECSインスタンスがあるのと同じリージョンとゾーンにRDSインスタンスを作成します。次にデータベースエンジンとして MySQL 5.6 を選択します。インスタンスタイプを選択します。とりあえず、1GBのインスタンスで十分です。大規模なウェブサイトの場合は、ニーズに応じて大規模なインスタンスを選択します。必要なストレージ容量とネットワークの種類を選択します。ECS インスタンスが実行されているのと同じ VPC ネットワークと VSwitch を選択することが重要で、そうしなければデータベースインスタンスに接続する際にエラーが発生します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/59e8a0cf-cd20-f90b-9f23-6bf8e39f915a.png)

RDSインスタンスを作成したら、インスタンスが起動するまで数分待ちます。インスタンスが正常に起動したら、Manageリンクをクリックしてインスタンスの管理パネルに移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/dc2fb3e6-b340-f001-3f81-c46c46c979b1.png)

セキュリティタブに移動し、ホワイトリストグループの追加ボタンをクリックします。新しいホワイトリストグループに説明的な名前を与え、Matomoを実行しているECSインスタンスのプライベートIPアドレスまたはイントラネットアドレスを入力します。ECSインスタンスのイントラネットIPアドレスをメモしていない場合は、アップロードECSイントラネットIPアドレスのリンクをクリックして、ECSインスタンスのプライベートIPアドレスを選択することもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/b0fdd439-4b9a-d387-5a6d-af4c0c3451e4.png)


サイドバーから [アカウント] タブに移動し、[アカウントの作成] ボタンをクリックします。データベースのユーザー名とパスワードを入力します。ユーザー名とパスワードはチュートリアルの後半で必要になるので、メモしておきましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9cb89084-db16-31bb-f72a-22602c6abd4b.png)

アカウントが作成されたら、「データベース」タブに移動し、「データベースの作成」ボタンをクリックします。データベースの名前を入力し、アカウントのリストからユーザー名を選択します。読み取り/書き込みアクセスのチェックボックスを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/db4b6534-4e0a-b35d-6393-cb2f5af41517.png)


サイドバーから[基本情報]タブに戻ると、RDSインスタンスのイントラネットアドレスが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/2906d99d-494e-a553-4899-01172643726c.png)


イントラネットのアドレスがRDSインスタンスを指していることを確認してください。これで MySQL データベースインスタンスの準備ができました。Webブラウザを使用してMatomoの最終的なインストールに進むことができます。

#ウェブベースのインストール
お気に入りのWebブラウザを開き、URL [https://matomo.example.com](https://matomo.example.com/?spm=a2c65.11461447.0.0.40ae5c87K1JiP2) にアクセスします。Matomoのインストールインターフェースからのウェルカム画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/d70c9973-b626-494e-f872-a80f46c8842a.png)


次のインタフェースでは、Matomo Webインストーラがシステムがデプロイの準備ができているかどうかを確認します。チュートリアルに正確に従っていれば、すべての要件が満たされていることがわかるはずです。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/9b555fb6-27ad-fd61-9e27-fbccc6e9558f.png)


さらに、次のインターフェイスでは、ApsaraDB for MySQLインスタンスを作成した際に取得したデータベースサーバーのホスト名と、作成したデータベースユーザーの資格情報を提供します。デフォルトのテーブルプレフィックスはそのままにして、データベースアダプタとしてMYSQLIを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8ec67f0b-72a0-efac-00f4-7aefb721116c.png)

MatomoアプリケーションがMySQLインスタンスに正常に接続できれば、自動的にスキーマを作成し、初期データをテーブルに書き込みます。次のインタフェースでは、管理者の詳細を提供するように求められます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f4e20001-d870-ad7e-6f47-702d0e0056bb.png)

最後に、インストーラーは追跡したいウェブサイトを追加するように求めてきます。ウェブサイトの名前とURLを入力してください。URLには、httpまたはhttpsのいずれかのサイトにアクセスするための正しいプロトコルを含める必要があります。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/4b4662f7-ca2c-1596-5153-088215cb5d9c.png)


これであなたのECSインスタンスにMatomoがインストールされました。インストーラは JavaScript コードを提供しますので、Matomo で追跡したいウェブサイトの各ページに設置する必要があります。チュートリアルの後半では、WordPressのウェブサイトをトラッキングする方法を学びますので、ここでは省略します。

さて、管理者の資格情報を使ってMatomoダッシュボードにログインしてください。あなたのウェブサイトにデータが記録されていないというメッセージが表示されます。Don't show this message for the next hour」ボタンをクリックすると、あなたのMatomoダッシュボードに移動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/01bc0dbc-33d9-c565-4655-11e3cb910ec7.png)


#WordPressでMatomoトラッキングコードを追加する
あなたのウェブサイトにMatomoトラッキングコードを追加するのはとても簡単です。プレーンな HTML サイトの場合は、「body」タグを閉じる直前に、すべてのページにトラッキングコードを追加することができます。このチュートリアルでは、WordPressサイトにJavaScriptのトラッキングコードを追加していきます。

WordPressにMatomoコードを追加する方法は2つあります。1つ目はプラグインを利用する方法で、2つ目はテーマコードを手動で編集する方法です。ここでは、両方のオプションについて簡単に見ていきます。どちらの方法もお好みに合わせて選んでください。

###WP-Matomoを使う
WP-Matomoプラグインなど、MatomoをWordPressに接続するために利用できるプラグインがいくつかあります。WP-Matomoは設定が簡単で、ウェブサイトのユーザーを追跡するだけでなく、WordPressの管理者ダッシュボードにグラフを表示することもできます。

WordPressの管理画面にログインして、プラグインのオプションを追加してください。「wp-matomo」を検索し、インストール後にプラグインを有効化してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/8dc72769-31e7-f14c-07af-b5922266d883.png)


さて、設定 > WP-Piwikに移動すると、プラグインの設定ページが表示されます。セルフホスティング、HTTP APIモードを選択し、MatomoまたはPiwikをインストールしたURLを提供します。また、ユーザー認証トークンを提供する必要があります。認証トークンは、管理ダッシュボードに移動して、プラットフォーム > APIに移動することで、あなたのMatomoインストールから取得することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/7a118852-36f5-f743-437e-d7cb25410368.png)


設定ページは次のスクリーンショットのように表示されるはずです。変更を保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/f00ca86c-1428-8a4a-55b4-b42012840902.png)


これであなたのWordPressサイトは、あなたのMatomoインスタンスに接続されました。WordPress サイトでトラッキングを有効にするには、「トラッキングを有効にする」タブに切り替えて、「デフォルトのトラッキング」オプションを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/c8dee4c1-7f05-7543-6ce5-3d8b0493cc4e.png)


これでMatomoにWordPressサイトのトラッキングが開始されます。

###トラッキングコードを手動で追加する
プラグインは設定や使用が簡単ですが、サイトのパフォーマンスに影響を与える処理オーバーヘッドを作成することもできます。プラグインを使用したくない場合は、手動でウェブサイトにトラッキングコードを追加することもできます。

Appearance > Editorに移動し、テーマエディタのページが開きます。アクティブなテーマが事前に選択されていることを確認してください。右サイドバーから、テーマフッター、footer.phpファイルをエディタに読み込みます。終了直前にMatomoのトラッキングコードを丸ごと貼り付けます。



*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/installing-matomo-%28piwik%29-for-web-and-mobile-data-analytics-on-alibaba-cloud-ecs_593790)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*