docker-compose 上の mautic で GeoLite2 の自動更新設定

上記の issue でも触れられていますが、mautic がデフォルトにしている MaxMind の GeoLite2 データセットがライセンスキーを必要とするようになったようです。
MaxMind のライセンスを使った設定
直接 MaxMind の geoipupdate を使う
通常行う必要は無いですが、参考までに。
対応方法
Issue にも貼られていた上記のページが対応方法になります。
上記をさらに docker に適用する方法が上記に提案されています。
今回はこれらをベースにします。
ディレクトリ構成
Dockefile
GetIP.conf # MaxMind からダウンロードしたライセンスファイル
FROM mautic/mautic:v3

RUN apt-get update && wget https://github.com/maxmind/geoipupdate/releases/download/v4.6.0/geoipupdate_4.6.0_linux_amd64.deb \
    && dpkg -i geoipupdate_4.6.0_linux_amd64.deb && rm geoipupdate_4.6.0_linux_amd64.deb

COPY GeoIP.conf /etc/GeoIP.conf
RUN sed -i -e '/^"$@" &/i mkdir -p /var/www/html/app/cache/ip_data && geoipupdate -f /etc/GeoIP.conf -d /var/www/html/app/cache/ip_data && chown www-data.www-data -R /var/www/html/app/cache/ip_data' /entrypoint.sh

RUN sed -i '/iplookup/s/^/#/g' /etc/cron.d/mautic && \
    echo '        0 4 15 * *     www-data  geoipupdate -f /etc/GeoIP.conf -d /var/www/html/app/cache/ip_data > /var/log/cron.pipe 2>&1' >> /etc/cron.d/mautic
geoipupdate に関しては現在 4.7.1 までリリースされているのでバージョンは指定できるようにした方が良いとは思いますが、ここでは上記の issue に合ったものをそのまま使います。
Dockerfile のポイントは以下です。
  • /etc/cron.d/mauticgeoipupdate を使ったジョブを追加し、既存の更新処理をコメントアウト
  • /entrypoint.sh の事前処理の最後に、初回の GeoLite2 データセットのダウンロードを実行
    • /var/www/html/app/entrypoint.sh 内で構築されるため、Dockerfile 内で処理はできないため、ここに記述している
  • cache ディレクトリの注意
    上記では最終的に ip_data を入れる先を /var/www/html/app/cache/ip_data としています。
    $this->getDataDir().'/GeoLite2-City.mmdb'
    $dataDir = $this->cacheDir.'/../ip_data';
    AbstractLocalDataLookupAbstractLookup を継承しており、初期化は以下の設定が反映されます。
    https://github.com/mautic/mautic/blob/de7e701ab2e498e7a8e5129e35a8fa482e1e2ff8/app/bundles/CoreBundle/Config/config.php#L927-L945
    つまり、cacheDirkernel.cache_dir になります。
    例えば私の環境では以下のようになるので、上記の Dockerfile ではここが一致しません。 /var/www/html/var/cache/ip_data を指定しなければいけません。
    # bin/console debug:container --parameter=kernel.cache_dir
     ------------------ ------------------------------
      Parameter          Value
     ------------------ ------------------------------
      kernel.cache_dir   /var/www/html/var/cache/prod
     ------------------ ------------------------------

    31

    This website collects cookies to deliver better user experience

    docker-compose 上の mautic で GeoLite2 の自動更新設定