Maxmind IP lookup database cannot be downloaded anonymously anymore - mautic/mautic
上記の issue でも触れられていますが、mautic がデフォルトにしている MaxMind の GeoLite2 データセットがライセンスキーを必要とするようになったようです。
MaxMind のライセンスを使った設定
上記のように account:password
の区切りで設定できます。
直接 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 からダウンロードしたライセンスファイル
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/mautic
にgeoipupdate
を使ったジョブを追加し、既存の更新処理をコメントアウト -
/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'
$dataDir = $this->cacheDir.'/../ip_data';
AbstractLocalDataLookup
は AbstractLookup
を継承しており、初期化は以下の設定が反映されます。
https://github.com/mautic/mautic/blob/de7e701ab2e498e7a8e5129e35a8fa482e1e2ff8/app/bundles/CoreBundle/Config/config.php#L927-L945
つまり、cacheDir
は kernel.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
------------------ ------------------------------
Top comments (0)