マストドンにGoogle Analytics Tracking Codeを埋め込む

分散SNSのマストドン(Mastodon)にGoogleアナリティクスのトラッキングコードを埋め込んだ際のメモ。

ソースコードをいじらないとだめかなと思ったけど、Nginxの ngx_http_sub_module を利用することでソースコードをいじることなくGoogleアナリティクスのトラッキングコードを埋め込むことができた。

参考) Nginx公式ドキュメント

概要

nginxの ngx_http_sub_moduleを利用し、HTTPレスポンスに含まれるHTMLタグを置換してGoogleアナリティクスのトラッキングコードを埋め込む。

前提

  • 対象のマストドンインスタンスはConoHaマストドンのアプリケーションイメージを使用して建てたもの
  • マストドンを建てるにあたっては、上記手順にもあるConoHaのセットアップスクリプトを利用している (nginxの設定ファイルなどが上記セットアップスクリプトの利用の如何によって変わる)

各種バージョン

Ubuntu 16.04.5 LTS (Xenial Xerus)
Nginx nginx/1.10.3 (Ubuntu)
Mastodon v2.4.3

実際のところマストドンのバージョンはなんとなく書いてみただけで、別になんでも良い.

重要なのはNginxで、今回利用する ngx_http_sub_moduleのモジュールが含まれていることが必要となる。

モジュールが利用可能かどうかは下記のコマンドで確認することができる。

configure argumentsに --with-http_sub_moduleというのが含まれていればすぐに対象モジュールを使うことができる。
含まれていない場合は対象モジュールの追加が必要となる。

今回は対象モジュールはすでに利用可能な状態を前提として話を進める。

手順

  1. /etc/nginx/sites-available/${DOMAIN_NAME}.confに置換の設定を追加
  2. 設定に問題ないか確認し、nginxを再起動
  3. ブラウザからマストドンにアクセスし、HTMLコード中にトラッキングコードが出力されていることを確認

1 /etc/nginx/sites-available/${DOMAIN_NAME}.confに置換の設定を追加

ConoHaの場合、nginxの設定は

/etc/nginx/nginx.conf  => /etc/nginx/sites-enabled/${DOMAIN_NAME}.conf  => /etc/nginx/sites-available/${DOMAIN_NAME}.conf

という具合に参照されているので、/etc/nginx/sites-available/${DOMAIN_NAME}.confの中に設定を追加すれば機能を有効化することができる。

参考) /etc/nginx/nginx.conf

参考) /etc/nginx/sites-enabled/default

※sites-enabled/${DOMAIN_NAME}.confはsites-available/${DOMAIN_NAME}.confへのシムリンク。

ではさっそく/etc/nginx/sites-available/${DOMAIN_NAME}.confに置換の設定を追加する。

下記のように location @proxy { のディレクティブに設定を追加する。

ただし”UA-99999999-9″の部分は自分のGoogleアナリティクス・トラッキングIDに置き換える。

実際にHTTPレスポンスボディのHTMLタグの置換について記述しているのは sub_filter ... の部分になる。

置換後のGoogleアナリティクスのトラッキングコード(<script… 以降の部分)はこの記事執筆時点のGoogleアナリティクス管理画面で確認できる公式コードを利用していますが、記事を閲覧いただいているタイミングによっては陳腐化している可能性がありますのでご自身のGoogleアナリティクスの管理画面から最新のコードを確認して置き換えて使ってください。

2 設定に問題ないか確認し、nginxを再起動

3 ブラウザからマストドンにアクセスし、HTMLコード中にトラッキングコードが出力されていることを確認

ngx_http_sub_module利用前
ngx_http_sub_module利用前
ngx_http_sub_module利用後
ngx_http_sub_module利用後

ちゃんとアナリティクスコードが注入されている。

補足

  • リバースプロキシでgzipレスポンスを返す場合、下記設定をしないとうまく動かない、らしい。(私はこの設定がないために動かずハマった)

    参考) Stack Overflow
  • sub_filter_once on; は置換処理を繰り返すかどうか。別に設定しなくても問題ないが、あれば無駄な置換のための処理を減らせる。はず。

所感

お一人鯖=自分だけのためのマストドン=トラッキングなんていらなくね?→それはそう

まぁでも/about/moreとかどれくらいみんなみてるんだろーとかはわかると少し面白いかなって。

あとngx_http_sub_module自体は他にもいろいろ使える場面がありそうなので今回触ることができてよかった。

ではでは。

Leave a Reply

Your email address will not be published. Required fields are marked *