前記事で GCP で WordPress の VM インスタンスをデプロイしたところまで書いたが、その後、必要な設定に関して記しておく。
ImageMagick を有効にする
Bitnami の WordPress インスタンスでは ImageMagick の PHP 機能拡張は初期設定で向こうになっているため、WordPress の Site Health (Dashboard -> Tools -> Site Health) でワーニングが表示される。
作業としては、php の設定ファイルに変更を加えてサーバーをリスタートする。
PHP の設定の変更
SSH クライアントから php.ini を編集する。GCP メニュ -> VM Instances -> SSH -> Open in browser window.
コンソールから、次のコマンド
1 |
sudo nano /opt/bitnami/php/etc/php.ini |
で php.ini
を編集。ここでは nano テキストエディタを起動している。sudo をつけないとパーミションが原因で編集後のファイルを保存できないので注意。
PageDown キーを連打し、ずっと下の方にある[openssl]のセクションあたり。extension=imagick.so
のラインのコメントを取り除いてあげる。そして保存して終了。
サービスを再起動
そして、Apache と php-fpm のサービスを再起動。
1 |
sudo /opt/bitnami/ctlscript.sh restart |
これで、WordPress の Site Health を開くと、先程のワーニングは消えている。
参考: https://docs.bitnami.com/azure-templates/apps/wordpress/configuration/install-modules-php/#imagick
WordPress のEメール機能を有効にする
Bitnami にはメールサーバー及びクライアントはインストールされておらず、PHP もデフォルトではメールを送信できない。そのため WordPress もメールの機能は無効になっている。これは Bitnami 側の配慮で、クラウドサービス側が一日あたりのメールの送受信数を定めており、それ以上は課金するシステムのため、安全のために無効にしているとのこと。一方で、メール機能はコメントが投稿されたりした時に通知してくれるので、ないと困る。後にコンタクトフォームを導入する時にも必要になってくる。
Bitnami が勧めるのは WP Mail SMTP というプラグインを使うというもの。しかし、これはPro バージョンへの誘導がちょっとあざといので敬遠したい。
sendmail のインストール
結局これは失敗に終わったので、マルチサイトのネットワーク全体用のメールの設定方法だけ確認したい場合はここは飛ばして、次の WP Mail SMTP プラグインの使用のセクションへ
ということで、sendmail をインストールし、それを PHP で使用するようにする。Windows では XAMPP などにバンドルされている sendmail は sendmail.ini という設定ファイルがあり、ここで SMTP サーバーや認証情報を一括設定できるのだが、Linux の場合そのような設定ファイルがない模様。php.ini のメールのセクションで指定可能なのかどうかが鍵。
まず、sendmail がインストールされているか確認。例のごとく SSH で VM インスタンスにログインし、次のコマンドを打つ。
1 |
$ sudo /usr/sbin/sendmail -q |
インストールされていなければ、 sudo: /usr/sbin/sendmail: command not found
と表示される。
インストールされていない場合、次のコマンドでインストール。
1 |
$ sudo apt-get install sendmail |
次に php.ini
を編集。
1 |
sudo nano /opt/bitnami/php/etc/php.ini |
[mail function]
のセクションで次のラインのコメントを取り払う。
1 |
sendmail_path = "env -i /usr/sbin/sendmail -t -i" |
SMTP サーバーの指定は Windows 32bit のみ対応とのこと。なので、変更を保存して nano を閉じる。(参考 https://docs.bitnami.com/oci/apps/wordpress/troubleshooting/send-mail/)
sendmail の SMTP Relay
次に sendmail の SMTP Relay の設定をする。ここで sendmail が送信する SMTP サーバーを介するメールの一括設定を行う。
失敗
結果から言うと、失敗に終わった。以下のサイトを参考に勧めたが、sendmail を使って outbound の STMP(TSL) 経由のメール送信はできなかった。結局 PHP の mail 関数も使用できず、Bitnami の勧めるプラグインを利用することになりそう。
- https://wiki.amahi.org/index.php/Enable_Outgoing_Emails
- https://www.bonusbits.com/wiki/HowTo:Configure_SendMail_to_Use_SMTP_Relay
- https://access.redhat.com/solutions/60803
簡単に何をしたかをまとめると、
- 認証ファイルの作成
- sendmail コンフィギュレーションにそれを読むようにというのとSMTPサーバーの指定
- コンフィギュレーションの再生成
- sendmail サービスのリスタート
- テスト送信
で、最後は次のようなメッセージで、メールが届かないという状況に。
認証ファイルの作成
ディレクトリ /etc/mail/auth/
を作成し、パーミション 777
を付与。
1 |
AuthInfo:{サーバードメイン名} "U:root" Ï:{ユーザー名}" "P:{パスワード}" "M:PLAIN" |
のラインを記述し、/etc/mail/auth/authinfo
としてファイルを新規保存し、パーミションを 777 に変更。次に /etc/mail/auth
に cd
で移動し sudo makemap hash authinfo > authinfo
で authinfo.db ファイルを生成。
sendmail 設定ファイルの編集
1 |
$ sudo nano /etc/mail/sendmail.mc |
で、次のラインを最後の方に追加。
1 2 3 4 5 6 |
define(`SMART_HOST',`{サーバードメイン名}')dnl define(`RELAY_MAILER_ARGS',`TCP $h 587')dnl define(`ESMTP_MAILER_ARGS',`TCP $h 587')dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl FEATURE(`authinfo',`hash /etc/mail/auth/authinfo')dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') |
設定ファイルのリビルド
1 |
$ sudo make -C /etc/mail |
sendmail のリスタート
1 |
$ sudo service sendmail restart |
テスト送信
1 |
$ sudo sendmail -Am -v -t |
エンターを押して、ラインが改行されるので次を打ち込んで Control + D で送信。
1 2 3 4 5 |
To: test@{アドレス} From: test@{アドレス} Subject: Test Please ignore. |
/var/log/mail.log
には次のような記録。
1 2 3 4 5 6 |
Nov 27 11:56:59 wordpress-multisite-1-vm sendmail[7425]: xARBunsL007425: from={コンソールユーザー名}, size=79, class=0, nrcpts=1, msgid=<201911271156.xARBunsL007425@wordpress-multisite-1-vm.us-central1-c.c.getting-started-01.in>, relay=root@localhost Nov 27 11:57:00 wordpress-multisite-1-vm sendmail[7425]: STARTTLS=client, relay={サーバードメイン名}., version=TLSv1.2, verify=FAIL, cipher=DHE-RSA-AES256-GCM-SHA384, bits=256/256 Nov 27 11:57:00 wordpress-multisite-1-vm sendmail[7425]: xARBunsL007425: SYSERR(root): hash map "authinfo": unsafe map file /etc/mail/auth/authinfo.db: World writable directory Nov 27 11:57:00 wordpress-multisite-1-vm sendmail[7425]: xARBunsL007425: to={送信先Eメールアドレス}, ctladdr={コンソールユーザー名} (1002/1005), delay=00:00:11, xdelay=00:00:01, mailer=relay, pri=30079, relay={サーバードメイン名}. [{サーバーIPアドレス}], dsn=5.0.0, stat=Service unavailable Nov 27 11:57:00 wordpress-multisite-1-vm sendmail[7425]: xARBunsL007425: xARBunsM007425: DSN: Service unavailable Nov 27 11:57:00 wordpress-multisite-1-vm sendmail[7425]: xARBunsM007425: to={コンソールユーザー名}, delay=00:00:00, xdelay=00:00:00, mailer=local, pri=30000, dsn=2.0.0, stat=Sent |
var/mail/{ログインユーザー名}
に記録された内容は次の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
--xARBouit007156.1574855466/wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in-- From MAILER-DAEMON Wed Nov 27 11:57:00 2019 Return-Path: <MAILER-DAEMON> Received: from localhost (localhost) by wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in (8.15.2/8.15.2/Debian-8) id xARBunsM007425; Wed, 27 Nov 2019 11:57:00 GMT Date: Wed, 27 Nov 2019 11:57:00 GMT From: Mail Delivery Subsystem <MAILER-DAEMON> Message-Id: <201911271157.xARBunsM007425@wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in> To: {コンソールユーザー名} MIME-Version: 1.0 Content-Type: multipart/report; report-type=delivery-status; boundary="xARBunsM007425.1574855820/wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in" Subject: Returned mail: see transcript for details Auto-Submitted: auto-generated (failure) This is a MIME-encapsulated message --xARBunsM007425.1574855820/wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in The original message was received at Wed, 27 Nov 2019 11:56:49 GMT from root@localhost ----- The following addresses had permanent fatal errors ----- {テスト送信先Eメールアドレス} (reason: 530 5.7.0 Authentication required) ----- Transcript of session follows ----- 451 4.0.0 hash map "authinfo": unsafe map file /etc/mail/auth/authinfo.db: World writable directory ... while talking to {SMTPサーバーアドレス}.: >>> MAIL From:<{コンソールユーザー名}@wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in> SIZE=79 AUTH={コンソールユーザー名}@wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in <<< 530 5.7.0 Authentication required 554 5.0.0 Service unavailable --xARBunsM007425.1574855820/wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in Content-Type: message/delivery-status Reporting-MTA: dns; wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in Arrival-Date: Wed, 27 Nov 2019 11:56:49 GMT Final-Recipient: RFC822; {テスト送信先Eメールアドレス} Action: failed Status: 5.7.0 Diagnostic-Code: SMTP; 530 5.7.0 Authentication required Last-Attempt-Date: Wed, 27 Nov 2019 11:57:00 GMT --xARBunsM007425.1574855820/wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in Content-Type: text/rfc822-headers Return-Path: <{コンソールユーザー名}> Received: (from root@localhost) by wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in (8.15.2/8.15.2/Debian-8) id xARBunsL007425; Wed, 27 Nov 2019 11:56:49 GMT Date: Wed, 27 Nov 2019 11:56:49 GMT Message-Id: <201911271156.xARBunsL007425@wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in> To: {テスト送信先Eメールアドレス} From: {テスト送信元Eメールアドレス} Subject: Test --xARBunsM007425.1574855820/wordpress-multisite-1-vm.us-central1-c.c.{プロジェクト名}.in-- |
結局、原因がわからない。まあ、解決方法が見つかったら記事は更新予定。
WP Mail SMTP プラグインの使用
不本意ながら、WP Mail SMTP というプラグインに頼る。プラグインの一覧から有効にし、プラグインの設定画面で SMTP の サーバーや認証情報を入力すればメールは機能するようになる。
ネットワーク下の個別ブログにおいての設定は特に難しくない。
Network Admin Email の変更
しかし、マルチサイト全体のネットワークのメール通知の設定がなく、案の定、デフォルトの管理者Eメールアドレス user@example.com
を変更しようと新しくメールアドレスを指定するも、認証通知が保留になったままでメールは来ない。
マルチサイトの場合メール設定
どうやら、マルチサイトの場合、wp-config.php
に設定を書き込む必要がある模様。SSH で VM インスタンスにログインし、次のコマンドで wp-config.php
を編集し、
1 |
sudo nano /opt/bitnami/apps/wordpress/htdocs/wp-config.php |
以下の設定を追加。
1 2 3 4 5 6 7 8 9 10 11 |
define('WPMS_ON', true); define('WPMS_MAIL_FROM', '{送信元Eメールアドレス}'); define('WPMS_MAIL_FROM_NAME', '{送信者名}'); define('WPMS_MAILER', 'smtp'); define('WPMS_SET_RETURN_PATH', false); define('WPMS_SMTP_HOST', '{SMTPサーバーアドレス}'); define('WPMS_SMTP_PORT', 587); define('WPMS_SSL', 'tls'); define('WPMS_SMTP_AUTH', true); define('WPMS_SMTP_USER', '{SMTPユーザー名}'); define('WPMS_SMTP_PASS', '{SMTPパスワード}'); |
これで、確認メールが届き、Network Admin Email も変更できた。
参考: https://bobcares.com/blog/wp-mail-smtp-multisite/
PHP mbstring 機能拡張の確認
PHP の mbstring 機能拡張が有効になっているか確認して置きたい。これは日本語などの文字列を処理するのに必要で、有効になっていないと、多くのプラグインが動かなかったり、抜粋表記が上手く行かなかったりする。
SSH で VM インスタンスにログインし、次のコマンドを入力し mbstring がリストされているか確認。
1 |
$ /opt/bitnami/php/bin/php -m |
参考: https://docs.bitnami.com/aws/apps/processmakerenterprise/administration/phpinfo/
Bitnami のバナーを消す
表示されたページの底に Bitnami のバナーリンクが自動挿入されるので、これを消したい。
SSH で VM インスタンスにログインし、次のコマンドを実行。
1 2 |
$ sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1 $ sudo /opt/bitnami/ctlscript.sh restart apache |
これでリンクは表示されなくなる。
参考: https://docs.bitnami.com/google/how-to/bitnami-remove-banner/
雑感
調べながら記録していく作業はなかなか大変。トライアンドエラーで時間と精神を消耗してしまう。sendmail の設定が上手く行かず、PHP のネイティブ mail 関数が使えるようにならなかったのは残念。ただ、設定方法はやり方さえわかってしまえば、ものの10分もあれば終わる内容なので、ここに記録することには意味がある。
本記事は GCP で WordPress を走らせる際に必要な VM インスタンス内での設定変更等を紹介した。もし該当する設定がでてきたら追記予定。次の記事では DNS や SSL 化を扱う予定。