最近WordpressサイトをGCP環境に移行することがあったので。
意外と情報が古かったりで試行錯誤があったのでメモ。これからやる方の参考になれば。
GCPサービスの選択
GCPでWordpressの環境を構築しようとすると、以下の2つのパターンがあります。
- App Engineで動かす
- Compute Engineで動かす
結論から言うと今回は2のCompute Engineを使います。
GCPのCompute Engineで立ち上げたVMにWordpress環境を構築して、そこにサイトを移行する形です。
1のApp EngineでもWordpressサイトのデプロイは可能だし、バージョン管理やもろもろ便利な機能が沢山あるのですが、App Engineの場合はプラグインやテーマのインストールが管理画面から出来ません。そうするとWordpressサイトの管理までうちの部署でしないといけなくなってしまうので、今回はApp Engineは使えませんでした。
ちなみに検討段階で一応App Engineも試しましたが、App Engineの場合はメディアファイルをgoogle cloud storage上に持たせようとすると何かと面倒だったり、楽な分制約多め…。
サービスの選択に当たっては以下の記事を参考にさせていただきました。感謝です。
App EngineとCompute Engineのそれぞれの特性はこの記事が分かりやすかったです。
移行手順
ここからは具体的にWordpressサイトをGCP環境に移行する手順を記載します。
旧サイトからWordpressファイルをエクスポートする
サイトの移行に当たっては、All-in-One WP Migration プラグインを使用します。
移行元サイトでエクスポートしたファイルを移行先のGCP環境にインポートするイメージ。
ワードプレスの管理ページでプラグインを追加したら、メニューのExportを使ってファイルをエクスポートします。
移行元サイトのメディアファイルが膨大で容量が大きすぎる場合は、インポート時に永遠にインポートが終わらなくなるので、メディアファイルを除外してエクスポートした方が良いです。
今回移行したサイトの場合はメディアファイルが8GB近くあったので、メディファイルを除外してエクスポートしました。この場合、メディアファイルは別途サーバから取得してGCP環境に移行する必要があります。(詳細は後述)
GCPでVMを立ち上げる
GCPでCompute Engineを使ってVMを立ち上げます。Compute Engineの立ち上げからWordpress環境の構築までを自分でせっせとやってもいいですが、「マーケット」に用意されているWordpressを使うと3クリックくらいでWordpress環境入りのVMを立ち上げられます。
「マーケット」→「Wordpress」で検索→「Wordpress – Click to Deploy」を選択。
zoneは近い所でいいですが、例えば東京ならばasia-northeast1-Xになります。
デプロイ後、WordpressやMySqlのパスワードが表示されるのでメモしておく
デプロイが終了すると、各種アカウント情報が表示されるためメモしておいてください。
静的外部IPを取得する
デフォルトでは外部IPが固定IPではないため、VMを再起動する度にIPアドレスが変わってしまいます。そこで静的外部IPを取得します。以下の記事が参考になりました。
WordPressのサイトURL書き換え
次に、WordpressのサイトURLを取得した静的外部IPのアドレスに書き換えます。これをしないとページの表示が遅く使い物なりません。
VMにSSH接続したら、以下のコマンドを入力してMySQLに接続します。先にメモしたMySQLの情報でログインしてください。
mysql -uroot -p;
接続後、DBをwordpressに切り替えます。
use wordpress;
wordpressDBのwp_optionsテーブルの値を書き換えます。
UPDATE wp_options SET option_value = 'https://xx.xxx.xxx.xx/' WHERE options_name = 'home';
UPDATE wp_options SET option_value = 'https://xx.xxx.xxx.xx/' WHERE options_name = 'siteurl'
実行後、取得した静的外部IPアドレスでサイトに接続して、正常にwordpressの画面が表示されればOKです。
All-in-One WP Migration プラグインで移行元サイトをインポートする
https://静的外部IP/wp-admin/ にアクセスし先にメモしておいたWPのログイン情報で管理画面にログインし、先ほどと同じく、All-in-One WP Migration プラグインを新規追加します。
プラグインのimportメニューを開き、先にexportしておいた.wordpressファイルを選択しインポートします。
プラグインのインポートが終われば基本的にサイトの移行は完了です。メディアライブラリを含まずにエクスポートしていた場合は、この後のメディアファイルの移行を実施します。
メディアファイルの移行
移行元のサーバに接続し、wordpressのディレクトリ配下にあるwp-content/uploadsフォルダをダウンロードしておきます。
Compute EngineのVMにSFTPで接続する
移行元のuploadsフォルダの中身を移行先の同フォルダに配置するため、Compute EngineにSFTPで接続します。
公開鍵・秘密鍵の生成
コマンドプロンプトを起動し、以下のコマンドを入力して公開鍵と秘密鍵を生成します。
ssh-keygen -t rsa -N "" -b 2048 -C "任意のユーザ名"
以下のフォルダに秘密鍵と公開鍵のファイルが生成されます。
C:\Users\Username.ssh
公開鍵をvmに設定
Google CloudのCompute Engineのメニューから、作成したvmの編集画面を開き、「SSH認証鍵」の欄に一行追加し、先の手順で生成した.pubファイルの中身を張り付け保存します。
秘密鍵を使ってvmにSFTPで接続する
任意のFTPソフトを使って、接続方式SFTPでvmに接続します。この時、秘密鍵には先に生成した秘密鍵ファイルを指定するようにしてください。
ファイルをアップロードする
先の保存しておいた移行元のuploadsディレクトリの中身を、移行先の同ディレクトリにアップロードします。
この時、ログインユーザの権限不足でアップロードできない場合がある為、chmodコマンド及びusermodコマンドで適切に権限を設定してください。
これでとりあえずサイトの移行自体はOK。後は任意の方法でSSL証明書を配置したり、DNS設定をしたりしてください。DNS設定をしたらwordpressDBの値をそのアドレスに書き換えるのを忘れないように。
起きた問題と対処
トップページ以外のページにアクセスすると404エラーが発生する
パーマリンクの設定がうまく移行できていない可能性あり。Wordpressのパーマリンクの設定を確認されたし。
All-in-One WP Migrationのimport時、容量制限があってアップロードできない
設定ファイルの以下項目の値を修正して、vmを再起動。
post_max_size = 必要な容量
upload_max_filesize = 必要な容量
設定ファイルってどれなの?っていうのはサーバーの設定によるが、同じ手順を踏んでたら恐らく以下。
/etc/php/8.1/fpm/php.ini
設定がうまく効かない場合は他の設定ファイルを見ている可能性があるので上記の項目名でgrepして探してみてください。
サイトが重すぎてまともに開かない
恐らく先にやったDBのurl設定の値が間違っている。再確認されたし。
All-in-One WP Migrationのインポート時、途中から動かない
恐らく移行元と移行先のphpのバージョンが一致していないことが原因。phpのバージョンを合わせて再実行。これは移行というか、プラグインの仕様ですね…
過去記事のリンクURLが間違っている
これはプラグインとかを使って記事投稿してると起きうるっぽい。自分の場合は「Search Regex」プラグインでurlを置き換えて対処した。
おわり。