現在Youtubeに注力してますので是非チャンネル登録お願いします!

胡田昌彦のコンピューター系チャンネル

WordPressのAzure PaaS移行ではまったこと

この記事は約5分で読めます。

個人で管理しているブログをAzureのPaaSに移行しました。合計で6個ほどのブログを移行してみました。 いろいろとハマってしまって、結局丸一日かかってしまったので、事の顛末を記録しておきたいと思います。

動画でも同じ内容を喋っているので、動画でご覧になりたい方は下記からご覧ください。

環境

移行元と移行先は下記です。

  • 移行元
    • Azure VM(WordPress on Apache2 + MySQL)
  • 移行先
    • Azure App Service(Linux)
    • WebApp
    • Azure Database for MySQL
    • Azure Blob Storage

WordPress on AppService

WordPress自体はAppService上でコンテナとして動作させました。このコンテナ自体は以前からこのブログ含めて複数ブログで利用していたもので、それを再利用しました。

GitHub - ebibibi/wordpress-cocoon
Contribute to ebibibi/wordpress-cocoon development by creating an account on GitHub.

WordPressの公式のイメージをもとにそこに自分が利用するテーマやプラグインを追加しているだけのシンプルなものです。

レポジトリにコードをコミットすれば自動的にGitHub Actionsでイメージがビルドされたうえで、Azure Container Registryに格納され、AppServiceにPushされるところまで全自動で動きます。

画像データのAzure Blobストレージへのオフロード

移行先の環境はコンテナなので、画像データをコンテナ内に持っておくわけにはいきません。そこでWordpressプラグインでAzure Blobストレージにあらかじめ画像を逃がすようにしました。

つかったプラグインはこちらです。

WP Azure offload
While uploading files to media library, copies files to Azure Storage and serve them using CDN url for faster delivery.

少し古いプラグインなのですが、以前から使ってますし、今回もきちんとうまく動いてくれました。このプラグインを使って、あらかじめAzureのブログに画像をオフロードさせます。その際にこのプラグインはブログのエントリーの中に埋め込まれているURLも書き換えるところまで自動的にやってくれます。

MySQL間のデータ移行

MySQL間のデータ移行に関しては、当初Azure Database Migration Servicesを使おうと考えたのですが、スキーマ移行には別途MySQL Workbenchが必要でしたし、それならMySQL Workbenchでそのままデータ移行してしまえばよさそうな感じでした。もちろんこれは私がサイトを簡単に停めても大丈夫だし、データ量も少ないからです。何度もデータ移行を継続的に繰り返さなければいけない時にはAzure Database Migration Sericesが役に立つと思います。

ですが、この方法はうまくいかず文字化けしてしまいました。原因はそもそも私が以前作っていたデータベースの文字コード設定が間違っていたからです。下記の状況でした。

  • Latin1に設定されたDBにUTF8のデータが入っていた
  • データ移行をそのまま行うと文字化け…。

いろいろ悩みましたが、結局下記の方法で回避しました。

  • 先に移行先DBをUTF8で作成
  • Mysqldumpでダンプしたデータ内のcharset関連の部分を置換してから取り込み

具体的には下記のように行いました。

#DB作成
create database wp_dbname character set UTF8 collate utf8_general_ci;

#DBダンプ
mysqldump -u user -p --default-character-set=latin1 wp_dbname > wp_dbname.dump
sed -e s/latin1/utf8/ wp_dbname.dump > wp_dbname_utf8.dump
sed -e s/latin1_general_cs/utf8_general_ci/ wp_dbname_utf8.dump > wp_dbname_utf8_general_ci.dump

#DB取り込み
mysql --host=newmysqldb.mysql.database.azure.com --user=user -p wp_dbname < wp_dbname_utf8_general_ci.dump

その他のはまった点

その他にもあれこれはまりました…。

  • プラグインによっては(移行前後で)「いきなりなくなる」とWordpress自体が壊れるものが存在する模様
    • 移行先でテーマの設定画面が開かなくなって大変困った
    • Debugモードにしても何もエラーも表示されなかった
    • テーマを変更すると正常稼働(テーマにも依存する模様)
    • 移行元でプラグインを無効化してからDumpしたDBデータなら正常稼働した(これに気が付くのにほぼ丸一日かかった)
  • 1つのブログがこの対応ができなくて(移行前からおかしくなってた)、仕方がないのでデータをエクスポートしたうえで新規環境にデータインポートをして対応完了にした。

というわけで、かなり苦労してしまいましたが、何とか丸一日かけて6個のブログをAzure PaaS環境に。 移行させることができました。細かい構成などはこれからなので、まだ全然整ってはいないのですが、とりあえず動いていると言う状況です。

Azure PaaSに移行して

自分が個人の趣味で管理する常時稼働のサーバーは大学生になった時からずっと存在していましたが、これで0台にすることができました。証明書もAzure App Serviceの無償SSL証明書で勝手に管理してくれますし、自分の面倒を見なければいけない部分がかなり減ってとてもよい感じです。

懸念点としては、この環境はMicrosoft Mvpとしていただいている特典のAzure環境上に構築しているので Microsoft MVPじゃなくなったら費用的に困るという点があります。とは言え、万が一そういうことになれば自分でまた再度データを移行して別の場所にお引越しはできると思います。その時にはこのブログエントリやyoutube動画を見返して、はまりポイントを思い出してから移行に臨みたいと思います。

まあ、そんな日がなるべく来ないように、Microsoft MVPの活動も継続的に頑張りたいと思います。

コメント

  1. […] WordPressのAzure PaaS移行ではまったこと個人で管理しているブログをAzureのPaaSに移行しました。合計で6個ほどのブログを移行してみました。 いろいろとハマってしまって、結局丸一日かか […]

タイトルとURLをコピーしました