🦔

WP Offload Media Liteを使ってWordPressからS3に画像が上がらなくて泣いた話

2022/02/06に公開

表題の通り、WP Offload Media Liteというプラグインを使ってWordPressからS3に画像をアップロードしようとしてハマったので、解決に至るまでのメモです。

まず、EC2(Amazon Linux 2+LAMP)にWP Offload Mediaのドキュメントを参考にしながら
プラグインのインストールをしていきます。

[EC2]

// XMLWriter か、SimpleXMLがインストールされているかを確認
$ php -m | grep -e XMLWriter -e SimpleXML

// php-xmlをインストール
$ sudo yum install php-xml

// cURLのバージョンとOpenSSL、zlibの有無を確認
$ curl --version
curl 7.79.1 (x86_64-koji-linux-gnu) libcurl/7.79.1 OpenSSL/1.0.2k-fips zlib/1.2.7 libidn2/2.3.0 libssh2/1.4.3 nghttp2/1.41.0 OpenLDAP/2.4.44
Release-Date: 2021-09-22
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: alt-svc AsynchDNS GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB SPNEGO SSL UnixSockets

// Apacheを再起動し、php-xmlが動作するようにする
$ sudo systemctl restart httpd.service

[Wordpress]
ここまで作業が完了したので、一度Wordpressの管理画面を開いているタブを再読み込みするが…「WP Offload Mediaの要件を満たしてないよ!」とWordpress管理画面上にエラーメッセージが表示され続けてしまうので再度EC2の画面から確認を。

[EC2]

// XMLWriter か、SimpleXMLがインストールされているかを確認
$ php -m | grep -e XMLWriter -e SimpleXML
SimpleXML

色々と調べた結果、php-fpmの再起動を行っていないことが原因だとわかりました。
参考: Apacheの再起動でphp.iniの設定が反映されなかった時

[EC2]

// php-fpmの再起動
$ sudo systemctl restart PHP-FPM 

[Wordpress]
php-fpmの再起動後、WordPressを開いているタブをリロードしてみると、今度はプラグインが問題なく動作してくれるようになったので、AWSのアクセスキー・シークレットアクセスキーやS3バケット名など、必要な情報の設定を進めていきます。

設定が終わったあと、記事編集内で画像アップロードを試みましたがWordPressの編集画面も下の画像のようなヘンテコなエラーが表示されてしまい、S3のバケット内にアップロードされていませんでした。

作成したIAMユーザーでAWSコンソールにログインしてアップロードを試みたところ、こちらは成功したので権限まわりは問題なさそう。

しばらく設定画面とドキュメントとGoogleをにらめっこした結果、S3の画像アップロードができない理由は、ACLの設定が無効になっていたことが原因だったようです。ドキュメントの読み込み不足…!
参考:Block All Public Access to Bucket

バケットの詳細画面内の"アクセス許可"の中にオブジェクト所有者に関する設定があるので、ここからACLを有効にします。

設定完了後、ACLが有効になっているのを確認。

この設定が完了後、改めてWordPressで画像をアップロードしてみると編集画面内に画像が表示されるようになりました。
表示された画像のURLを確認してみると、「 http://my-backet.s3.ap-northeast-1.amazonaws.com/wp-content/uploads/2022/02/06013138/test.jpeg 」と、きちんとS3にアップロードされた画像のアドレスであることが確認できました。
※URLはダミーなのでアクセスしてもエラー画面が出ます。

プラグインのインストールと設定は40分くらいでしたが、S3に画像がアップロードされない原因を調べるのに3時間くらい使ってしまいました…。

Discussion