DEV Community

Yoichi Dan
Yoichi Dan

Posted on

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

Maxmind IP lookup database cannot be downloaded anonymously anymore - mautic/mautic

上記の issue でも触れられていますが、mautic がデフォルトにしている MaxMind の GeoLite2 データセットがライセンスキーを必要とするようになったようです。

MaxMind のライセンスを使った設定

2021-06-16_08h55_07
上記のように account:password の区切りで設定できます。

Maxmind license | Mautic

直接 MaxMind の geoipupdate を使う

通常行う必要は無いですが、参考までに。

対応方法

[Solved] Maxmind GeoLite2 & GeoIP Database Auto-Update | 2020.

Issue にも貼られていた上記のページが対応方法になります。

[BUG] Bad cron for geoip db #171 mautic/docker-mautic

上記をさらに docker に適用する方法が上記に提案されています。
今回はこれらをベースにします。

ディレクトリ構成

Dockefile
GetIP.conf # MaxMind からダウンロードしたライセンスファイル
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode

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 としています。

これは最終的には以下の場所と同じになる必要があります。
https://github.com/mautic/mautic/blob/7a2875bc16a6de50a1803fbc41b64278ae9b5428/app/bundles/CoreBundle/IpLookup/MaxmindDownloadLookup.php#L29

$this->getDataDir().'/GeoLite2-City.mmdb'

さらに展開すると以下です。
https://github.com/mautic/mautic/blob/7a2875bc16a6de50a1803fbc41b64278ae9b5428/app/bundles/CoreBundle/IpLookup/AbstractLocalDataLookup.php#L171

$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
 ------------------ ------------------------------
Enter fullscreen mode Exit fullscreen mode

Top comments (0)