更新遅延について
いつも月曜日更新ですが今週は更新が遅れました。といいうのも、このWordpressが稼働しているLightsailのインスタンスがメモリ不足になり、記事の一覧や新規作成ページが開けなくなったからです。
PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes)
みたいなエラーがエラーログに出ていました。
また、前々からPHPのバージョンが古い(7.0.3.1)ことで管理画面で警告が出ておりいつか対応しないといけないという状況でもありました。
LightsailのwordpressはBitnamiというソフトで稼働しているのですが、実はこれはPHPのバージョンアップができません。PHPのバージョンを上げたければインスタンスを作り直さないといけないという罠があります。
以上の二つの理由で、PHPのバージョンを上げないといけないし、メモリも増やさないといけないしとなったので、Wordpressの移行作業を行いました。
やり方はいろいろあると思うのですが、今回は「All-in-One WP Migration」というプラグインを使いました。
失敗した方法と正しい順序
実は一回しくじったのでそれについて先に書きます。
ブログにアクセスできない時間を最小限にするために実は最初、次の手順でやろうとしていました。
- 新しいWordpressのインスタンスを立てる。
- 新しいインスタンスに記事やメディアのデータを移行する。
- IPアドレスやドメインを新しいインスタンスに移す。
- https化などの追加作業を行う。
こうすれば、切り替えた瞬間から訪問者の方が記事を読めると思ってやったのですが、All-in-One WP Migration のプラグインが気が利きすぎていて困ったことが起きました。
それは記事中のテキストや、リンク等に含まれるこのブログのURLが、移行先のインスタンスのURLに勝手に書き換えられてしまったことです。要するに、https://analytics-note.xyz/ って文字列があったら全部、 http://{IPアドレス}/ になってしまいました。
そして、IPアドレスやドメインを設定しても置換されたテキストは元に戻りませんでした。
これを全部治すのは面倒だったので、そのインスタンスは破棄してやり直しました。記事を読めない時間が発生するのは諦めて、次の手順で行い、今のところ正常に動いているようです。
- 新しいWordpressのインスタンスを立てる。
- IPアドレスやドメインを新しいインスタンスに移す。
- https化などの追加作業を行う。
- 新しいインスタンスに記事やメディアのデータを移行する。
- 残作業の実施。
それでは、細かく手順を説明していきますね。
旧インスタンス側の作業
データのエクスポート
移行するためにデータをローカルに取り出します。先述の通り「All-in-One WP Migration」ってプラグインを使いました。プラグインの一覧から有効化すると左部メニューに登場しますので、エクスポートを選択します。エクスポート先が選べるので、「ファイル」を選ぶとそのままダウンロードが始まります。僕のブログは画像とか少ないのですがそれでも250MBくらいになりました。ちなみに、オプションがいくつかあって僕は次の二つ選びました。これはあまり重要ではないと思います。
- スパムコメントをエクスポートしない
- 投稿リビジョンをエクスポートしない
リダイレクト処理の停止
これは、httpやIPアドレスでのアクセスをリダイレクトしてる人だけの作業なので必須ではありません。
旧環境からはドメインを剥奪するので今後はIPアドレス直打ちでしかアクセスできなくなります。僕は普通にドメインでアクセスされなかったらリダイレクトするように設定していたのでそれを戻します。要するに次の記事の逆の手順を行いました。
以上で旧環境での作業は終了です。
新環境作業
インスタンス作成
続いて新環境側の作業ですが、最初にやるのは当然ですが新環境の作成です。以下の記事を参考に新しいインスタンスを立てます。静的IPアドレスは旧環境で使ってたのを使い回すのでインスタンスだけ立てたら大丈夫です。
参考記事: Amazon Lightsail で WordPressサイトを作成する手順
今回はメモリ不足の解消を兼ねていたので、$5の、1GB/2vCPU/40GB SSD を選択しました。
ここでちょっとLightsailの宣伝なのですが、最近$3.5や$5のインスタンスでもvCPUが2個になってます。以前は1個だったので同じ値段で倍のCPUが使える計算になりますね。とはいえ、僕が不足したのはCPUではなくメモリだったので結局以前より高いプランに変えたのですが。これは、特に何か理由がない人も移行するメリットがありそうです。
静的IPの付け替え
失敗した方法のところで説明しましたが、インスタンス作ったらもう早速IPアドレスとそれに紐づいているドメインを新インスタンスに渡します。
インスタンスができたらSSH接続してパスワードを確認します。pemキーはデフォルトでは同じのが使えるのでIPアドレスだけ変えたら繋がります。
GUIで簡単に作業できます。
Lightsail の ネットワーキングにアクセスし、静的IPアドレスを選択。
管理からデタッチし、インスタンスへのアタッチでプルダウンから新しいWordpressを選んでアタッチ、と画面に沿って作業していけば完了です。
これでもう、URL叩いたら新しいWordpress(記事とか何もない初期画面)が開くようになります。
今回、PHPのバージョンアップも目的の一つだったので、SSHで繋いで $php –version してみておきましょう。無事に上がっていますね・
$ php --version
PHP 8.2.11 (cli) (built: Oct 6 2023 09:57:45) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.11, Copyright (c) Zend Technologies
with Zend OPcache v8.2.11, Copyright (c), by Zend Technologies
https化
Let’s Encryptを使ってhttps化します。
最近は昔と手順が変わっていて、ssh接続して以下のコマンドを叩いてプロンプトに従っていくだけでできるようです。ドメイン名とかメールアドレスを途中で聞かれます。
$ sudo /opt/bitnami/bncert-tool
パスワードの確認と初回ログイン
https化したらデータの移行作業へと入っていきます。wordpressの管理画面にログインしないといけないので初期パスワードを確認します。
SSH接続したホームディレクトリの中に、bitnami_application_password
ってファイルがあり、その中に書かれています。
これを使ってログインします。
データのインポート
All-in-One WP Migrationを使ってインポートするので、最初にやるのはこのプラグインの有効化です。ついでに最新化もしておきましょう。
左メニューにImportが追加されるのでそれを選びます。すると、実はこの時点ではアップロードできるファイルの上限が設定されているのでそれを確認します。おそらくインスタンスサイズによって異なります。
僕の場合は、 Maximum upload file size: 80 MB. と表示されていて、保存していたファイルがそのままだと上げられませんでした。
そこで、PHPの設定を変更してアップロードできるファイルサイズを一時的に増やします。
以下のファイルを開きます。
/opt/bitnami/php/etc/php.ini
その中に、post_max_size と、 upload_max_filesize って設定があるので、それぞれ80Mを512Mとかに書き換えます。(修正前にファイルはバックアップ取りましょう。)
書き換えたら、次のコマンドで再起動します。
$ sudo /opt/bitnami/ctlscript.sh restart
これでアップロードできるファイルサイズが上がるので、エクスポートしていたファイルをアップロードします。
PHP7からPHP8への移行だったので色々警告とか出ましたが仕方ないので全て認めて作業進めます。
この時点で、記事や画像等のメディア、テーマ、小テーマ、プラグイン情報などが移行されほぼほぼ元通り見れるサイトになります。
/opt/bitnami/php/etc/php.ini の中身は元に戻して、もう一回再起動しておきましょう。
再ログインとDB更新
データをインポートすると、wordpressのユーザー情報、要するにパスワードなども復元されるので一回セッションが切れてログアウトします。
次にログインするときは、旧環境のパスワードでログインするので間違えないようにしてください。
ただし、パスワードが戻るのはアプリ(wordpress)のユーザーだけで、MySQLコマンド等で接続するときに使う、DB自体のパスワードは新しい環境のパスワードそのままです。あくまでも書き換わるのはDBの中身だけってことですね。
wordpressの管理画面に再ログインすると、「データベースの更新が必要です」ってメッセージが出るので更新します。
これでほぼ移行完了です。
残作業
残りは細かい残作業やっていきます。
例えばこれとかやる必要があります。
– WordPressの一般設定にあるURLをhttpsに変える
– LightsailのWordPressにads.txtを設置する
– 不要になったインスタンスの削除
ads.txtの設置場所は
/opt/bitnami/wordpress
に変わってました。
また、旧インスタンスは即消すのではなくしばらく並行しておいておく方がお勧めです。ぼくもしばらくは放置しておこうと思っています。
この後も何か残作業見つかったら順次対応していこうと思います。