[自分用メモ] Aarch64なDocker環境でWordPress実行時のEWWW Image Optimizer の使用方法

Containerwordpress

はじめに

最近はVPSの方はそうでもないですが、Cloudの方はArm CPUを搭載したコンピュートが販売されるようになりました。(AWSだとgravitonのt4gインスタンスとか、OCIだとAmpere A1 Computeとか)

一概に性能では比較できませんが、運用コストでは総じて安価になることから今後は使用の選択肢に入ることも多くなることかと思いますが、WordPressをそんなArmインスタンスで稼働させたときにプラグインでちょっと困ったことが起きました。

該当したのがWordPressの画像の最適化を行う「EWWW Image Optimizer」なのですが、プラグインをインストールすると以下のようなエラーメッセージが表示されます。

EWWW Image Optimizer は jpegtran, optipng, pngout, pngquant, gifsicle, and cwebp を使用します。 jpegtran,optipng, gifsicle がありません。 設定ページ と インストール手順 をインストールしてください。

EWWW Image Optimizer
より小さな画像、より速いサイト、より幸せな訪問者。ロケット工学の学位を必要としない、包括的な画像最適化です。

なんじゃらほいということで調べてみました。

原因としてプラグインが既定で使用する付属バイナリがx86のもののため

  • jpegtran
  • optipng
  • pngquant
  • gifsicle
  • webp

WordPressのプラグインとしてEWWW Image Optimizer には変換用のbinaryが付属はしているのですが、以下のようにx86版のものなので、Aarch64環境で稼働させるWordPressでは正常に動作しません。

# file cwebp
cwebp.bak: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=8667df6fad9538c0e6703c31a3278e6c9c4ac2dd, stripped

本来であればAarch64バイナリを期待しているはず。

# file /usr/bin/cwebp
/usr/bin/cwebp: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=4b5e68e7c92d24df025eea84743b3191d26899ea, stripped

確認環境

$ uname -a
Linux instance-20210528-1225 5.4.0-1045-oracle #49-Ubuntu SMP Mon May 3 05:27:18 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
services:
   db:
     image: mariadb
   wordpress:
     image: wordpress:latest

解決方法

対象のコンテナに入る

$ docker-compose exec wordpress bash

不足しているパッケージをインストールする。

# apt-get update
# apt-get install imagemagick optipng pngquant gifsicle webp libjpeg-progs

以下の公式ドキュメントにあるように、EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLEwp-config.php に設定する。

}
/** Sets up WordPress vars and included files. */
require_once ABSPATH . 'wp-settings.php';

define( 'EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE', true );
Override Options - EWWW IO Support
As you may have noticed, EWWW IO has a lot of ways that you can override the default behavior. Additionally, it is possi...

EWWW_IMAGE_OPTIMIZER_SKIP_BUNDLE – (true/false) Tells the plugin not to install the bundled optimization utilities and use system-level binaries instead. For example, if you installed jpegtran, optipng, and gifsicle via yum or apt, you may wish to use those versions instead of the ones included with EWWW IO. I really don’t recommend it, but you can if you want to.

https://docs.ewww.io/article/40-override-options

残課題

Docker Containerイメージの差し替えの際にパッケージインストール作業を再度行う必要があるので、docker-compose.yml に buildを追加し、パッケージの追加を組み合わせる必要がある。

FROM wordpress:latest
LABEL maintainer kometchtech

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install imagemagick optipng pngquant gifsicle webp libjpeg-progs \
    && rm -rf /var/apt/cache

参考

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました