GAE間のWordPressの移設方法

  • このエントリーをはてなブックマークに追加

今回は、GAE上のWordPressの移設方法について紹介します。

  • Aリージョンで作成したWordpressを別のリージョンに移したい
  • Aプロジェクトで作成したWorspressを、Bプロジェクトへ移動したい
  • 複数プロジェクトでそれぞれ管理していたWordPressを1つのプロジェクトにまとめたい

など、Wordpress環境をゼロから作り直す事なく、DBやコンテンツを移行する事ができます。

コンテンツの移行が面倒なのでは…と思うかもしれませんが、そんな事はありません!
少しのコマンドを使えばあっという間にコピーが可能です。
みなさんも是非試してみてください。

移行作業を行う前の準備

  1. 移行先のプロジェクトを用意し、移行元のサービスアカウントをプロジェクトの編集者メンバーとして追加しておく。
  2. WordPressファイル一式を用意
    GAEにアップするファイル類をローカルに準備します。
     ※もし、テーマファイル内のファイル等でメディア参照をしていて、GCSのストレージ名を記載の場合、URLを移行先のストレージ名に変更しておきます。
  3. wp-config.php内のDB名、ユーザー名、パスワード、インスタンス名を移行先のものに変更する。

 変更箇所等については、WordPressをGAEで簡単に使う10のステップの、1.6.2 wp-config.php の修正 の欄をご確認下さい。

ここから移行作業になります。
主に3つの作業に分かれます。

  • メディアのコピー
  • DB情報の移行
  • WordPressファイルをアップロード

順番に見ていきましょう。

Google Cloud Storage(GCS)にあるメディアのコピー

GAEでWordPressを利用の場合、画像等のメディアは、GCSに保管されます。
ローカルにメディアがある場合、手動でアップし直す等の手段もありますが、GCS→GCSへ簡単にコンテンツのコピーが可能です。

手順

  1. Cloud Shellを起動します。
  2. メディアコピーのコマンドを入力します。
    gsutil -m rsync gs//コピー元、gs//コピー先

    例)

    gsutil -m rsync gs://aaa-bucketname gs://bbb-bucketname
  3. コンテンツの移行後、移行先のバケット内にコンテンツがコピーされた事を確認し、さらにコマンドを入力します。
gsutil acl set public-read gs://bbb-bucketname/*.jpg(メディアに合わせて拡張子を変更して下さい)

このコマンドにより、バケット内のコンテンツが一般公開されるようになります。
(バケット内のコンテンツの横のチェックボックスにチェックを入れ、画面上部の【一般公開で共有する】をクリックする、という一連の動作と同じ事がこのコマンドで可能です!)

移行先のバケットにファイルがコピーされている事を確認したらメディアコピーの作業は完了です。

※拡張子を決めず、一括で公開処理も行えます。その場合は一括で(*.jpg→*.*)変換してもOKです。

DB情報等のエクスポート、インポート

ここからGoogle Compute Engine(GCE)を使用します。
利用した事がない方は、VMインスタンスを作成して下さい。
(VMインスタンスの作成方法については、15分でできる!GCE上でGO言語を動作させるための手順 の、2 GCEインスタンスの作成 の項目を参照して下さい。)
VMインスタンスの作成や、管理、その他の基本的なことは、公式のドキュメントに記載がありますので、そちらも読んでみてください!

Google Compute Engineのドキュメント
https://cloud.google.com/compute/docs/?hl=ja

エクスポート準備

移行先のプロジェクトのSQL→アクセス制御→承認→ネットワークを追加の欄に、作成したVMインスタンスの外部IPを追加して下さい。この後実行するコマンドが通りません。

VMインスタンスを起動してバックアップファイルを作成

VMインスタンスの画面に入り、作成したインスタンスのSSHをクリックし、起動した画面で下記コマンドを入力し、移行元のDBよりデータのエクスポートを行います。

mysqldump -u USERNAME -h xxx.xxx.xxx.xxx -r Backupname.bkup --single-transaction DBNAME -p

赤文字の部分を手元の情報に合わせて以下の通り変更して下さい。

  • USERNAME の部分には、移行元のDBに接続するユーザー名
  • xxx.xxx.xxx.xxx には、移行元のインスタンスのIPを入れます。
  • Backupname.bkup には作成するバックアップファイルにつける任意の名前をつけます。
    (任意で名前をつけるのはBackupnameの部分のみです)
  • DBNAME の部分には移行元のDB名を入れます。

ERROR 2003が出た場合→この上の、準備の項目を参照して、移行先のプロジェクトのネットワークにVMインスタンスの外部IPを追加して下さい。

ERROR 1045が出た場合→DB接続パスワードが違う場合があります。
第1世代のSQLを利用の場合、localhostと%(すべてのホスト)、1つの名前で2つのユーザーが作成されますが、2つのパスワードが同じかどうかを確認しましょう。

文字列の置換

ファイル内に移行元のバケット名があるので、それをコピー先のバケット名に置換します。
上記コマンドの実行後、

vi Backupname.bkup

とコマンドを入れ、でファイルを展開します。

:%s/ 変換前の言葉/変換後の言葉/g

と打ち込み、置換を行ったあと、:wq と打ち込み、ファイルを上書きして終了です。

例)

:%s/cloudace-bucket-name/cloudace-media-bucket\.appspot\.com/g

※バケット名に.(ドット)が含まれる場合、エスケープさせる事を忘れないでください。
主にドメインの置換や、GCSのバケット名等を変更します。

インポート

置換したバックアップファイルを移行先DBにインポートします。置換後に引き続き、下記コマンドを利用して実行します。

mysql -u USERNAME -h xxx.xxx.xxx.xxx -p DBNAME < Backupname.bkup

赤文字の部分を手元の情報に合わせて変更して下さい。

  • USERNAME の部分にはconfig.phpに記載の移行先のDBに接続するユーザー名
  • xxx.xxx.xxx.xxx には、移行先のIP
  • DBNAMEにはconfig.phpに記載の移行先のDB名

をそれぞれ記載します。

GAEにWordPressファイルをアップロード

プロジェクト名、バージョン名を変更している事を確認し、移行先のプロジェクトにアップします。
また、DB名が、インポート時に指定した名前と一緒である事を確認してください。

コマンドプロンプトで、Wordpressファイルがある階層を指定し、

gcloud app deploy --project プロジェクトID --version バージョン名 --no-promote

と入力します。
※–no-promote は任意でOKです。付けてない場合はデフォルトバージョンが自動的に今回デプロイしたバージョンに切り替わります。

入力後、Enterを押し、(Y/N)の選択肢がでたら、Yを入力し、進めます。

アップ完了後、GCPのコンソール画面に入り、GAE→バージョンから、アップしたWordPressにアクセスしてDBに接続出来ているか、WordPressが表示されているか確認します。

DB接続エラーになる場合は、

  • 移行元のサービスアカウントを移行先のIAMにプロジェクト編集者メンバーとして追加しておく。
  • 移行先のプロジェクトのSQL→アクセス制御→承認→ネットワークを追加の欄に、作成したVMインスタンスの外部IPを追加

の項目を確認してください。

注意点

アイキャッチ画像(サムネイル画像)やを記事中・ページ内に画像を設定している場合、GCSのアドレス変更により、アイキャッチ画像が表示されなくなったり、管理画面内の、メディア一覧画面にて、画像が表示されない事があります。
これは、GAEのプラグインの動きのようです。
GAEのプラグインが、GCSの機能を使い、画像配信用のURL(https://lh3.~から始まるもの)を生成し、DBに書き込みます。記事やアイキャッチ画像に用いられるURLが、移行してきたDB内の配信用のURLと一致しないため、画像が表示されない、という現象が見られるようです。
もし、アイキャッチ画像や、記事中・ページ中の画像が表示されない、といった場合、手作業で再度画像を再設定する必要があります。記事やページの編集画面にて、画像を再アップロードし、アイキャッチ画像や記事中・ページ中に入れる画像を再度設定して下さい。

弊社でもこの現象が発生したりしなかったり、という状況なので、どのような状況下で発生するのか、引き続き検証等行っていきたいと思います。

まとめ

いかがでしょうか。
コマンドに不慣れな方でも、この記事を見ながら実行して、コマンドに触れて少しずつ慣れていってもらえると嬉しいです。
GCSに関してはgsutil というコマンドがあります。
バケットの作成から、ファイルのアップロード、ダウンロード等、GCSに関する操作がコマンドで簡単にできます。
特に、大量のファイルに一括で何か操作を行いたいという場合はコマンドを使うと便利ですよ。
公式にドキュメントがありますのでこちらを参照してくださいね。
gsutil ツール
https://cloud.google.com/storage/docs/gsutil

GAE上へのWordpressの移行や構築、Google Cloud Platform に関する開発については、クラウドエースへご相談下さい。
また、無料相談会も行っております。是非お気軽にお問い合わせ下さい。

  • このエントリーをはてなブックマークに追加

Google のクラウドサービスについてもっと詳しく知りたい、直接話が聞いてみたいという方のために、クラウドエースでは無料相談会を実施しております。お申し込みは下記ボタンより承っておりますので、この機会にぜひ弊社をご利用いただければと思います。

無料相談会のお申込みはこちら