LightsailのWordPressインスタンスを最新版に移行したあれこれ

2019年から運用している当ブログですが、AWS Lightsailインスタンスで運用しています。
当時作ったまま、だましだまし運用してましたが、PHPのバージョンが7.2でEOLになってたり色々心配なので重い腰を上げてインスタンス移行をすることにしました。

以下手順メモ。


バックアップ取得

All-in-One WP Migrationで現行サイトのバックアップを取得。
インスタンスのスナップショットも取得しておく。

新しいインスタンスの用意

新しいWordPressインスタンスを作成して静的IPを新しいインスタンスに紐づけ。
一時的に現行サイトのアクセスができなくなりますがそこは許容。

今まではCloudFrontを使ってましたが、今回はLightsailのディストリビューション機能を使ってみました。
運用コストはちょっと増えますが、Let’s Encryptで証明書を取る必要がなくなるので便利。

今まで使ってたドメインをディストリビューション割り当てて、DNS等の設定を終えたら新しいインスタンスの管理画面にログイン。

パスワードはここにあります。
cat ./bitnami_credentials

そのままだとCSSが当たらないのでこちらを参考に設定変更。

バックアップの復元

プリインストールされているAll-in-One WP Migrationを有効化して、他のいらないプラグインは削除。
バックアップファイルが大きいとアップロードできないので、下記を参考にphp.iniを編集してファイルのアップロード上限を一時的に引き上げます。



バックアップのインポートが終われば元のサイトが復元されます。

その他やったこと

タイムゾーンの変更。
sudo timedatectl set-timezone Asia/Tokyo

Googleアドセンス周りのファイルの置き直し。

/opt/bitnami/wordpress/
ads.txt
app-ads.txt

LightsailのCPUアラートや定期スナップショットの取得設定。

トラブルシューティング

記事の新規作成でエラー

エラーログをこちらを参考に採取

PHP Fatal error:  Array and string offset access syntax with curly braces is no longer supported in /bitnami/wordpress/wp-content/plugins/jetpack-markdown/markdown/lib/extra.php on line 796

JP Markdownプラグインを削除して解決。

記事のプレビューでエラー

テーマに使っているLuxeritasがエラーを吐いていた。

PHP Fatal error:  Uncaught TypeError: method_exists(): Argument #1 ($object_or_class) must be of type object|string, null given in /bitnami/wordpress/wp-content/themes/luxeritas/inc/wpfunc.php:1358
Stack trace:
#0 /bitnami/wordpress/wp-content/themes/luxeritas/inc/wpfunc.php(1358): method_exists()
#1 /bitnami/wordpress/wp-content/themes/luxeritas/sns.php(244): thk_get_feedly_count_cache()
#2 /opt/bitnami/wordpress/wp-includes/template.php(785): require('...')
#3 /opt/bitnami/wordpress/wp-includes/template.php(718): load_template()
#4 /opt/bitnami/wordpress/wp-includes/general-template.php(204): locate_template()
#5 /bitnami/wordpress/wp-content/themes/luxeritas/single.php(72): get_template_part()
#6 /opt/bitnami/wordpress/wp-includes/template-loader.php(106): include('...')
#7 /opt/bitnami/wordpress/wp-blog-header.php(19): require_once('...')
#8 /opt/bitnami/wordpress/index.php(17): require('...')
#9 {main}
  thrown in /bitnami/wordpress/wp-content/themes/luxeritas/inc/wpfunc.php on line 1358

こんな感じで書き換えて応急処置。

if (function_exists('thk_get_feedly_count_cache') === false) :
function thk_get_feedly_count_cache() {
    global $wp_filesystem; // グローバル変数を関数内で使えるようにする

    $feedly_count = '<i class="fa fas fa-spinner fa-spin"></i>';
    $url = esc_url(get_bloginfo('rss2_url'));
    $wp_upload_dir = wp_upload_dir();
    $cache_dir = $wp_upload_dir['basedir'] . '/luxe-sns/';
    $feedly_count_cache = $cache_dir . md5($url);

    // ファイルシステムの初期化を確認する
    if (empty($wp_filesystem)) {
        require_once ABSPATH . '/wp-admin/includes/file.php';
        WP_Filesystem();
    }

予想はしてたけどPHPのバージョンアップにテーマがついてこれなくなってるので、そろそろこっちも変え時かも。


そこまでトラブルなく移行できて一安心。