WordPressのサーバ移行&ドメイン移行+SSL化

最近、このブログを自宅のRaspberry pi2からGCP(Google Computing Platform)に移行しました。それに伴い、DDNSのサブドメインから通常のドメインへ移行し、サイト全体をSSL化しました。

ぼちぼち安定して稼働しているようなので、これらの簡単な手順をメモするとともに、若干はまった箇所について記録しておきます。

手順の概要

基本的には、以下のサイトを参照してすすめました。めちゃくちゃ丁寧でよくできていると思います。

【第1回】GCPの無料枠でdev.toなみの爆速WordPress環境を構築する(爆速は正義)

ただし、このサイトでできるのは空っぽのWordPressサイトを新規に立ち上げるところまで。以下の手順でいうところの1〜5までです。

  1. Freenomで新規ドメインを取得
  2. GCPに新規登録、Always Free枠でVMを作成し、静的IPアドレスを割り当て
  3. Cloudflareに新規登録し、DNSと紐づけてキャッシュを設定
  4. VM上にKUSANAGI Runs on Dockerをインストール
  5. WordPressを起動、ダッシュボードから各種変更を実施
  6. 旧WordPressからデータを移行
  7. 旧WordPressに転送設定を追加

私の場合は、稼働中のWordPressからデータを移行させ、さらに旧WordPressへのアクセスを新WordPressに誘導する必要がありました。

WordPress起動までの手順でのハマりポイント

外部IPアドレスのネットワーク階層設定

外部IPアドレスの設定で、ネットワーク階層として「プレミアム」か「標準」を選ぶ場所があります。これは、最近まで存在していなかった項目なので、参考サイトの手順には記されていませんでした。結論からいえば、プレミアムで問題ありません。プレミアムを選ぶと、標準よりもリージョンをまたがる通信が高速になりますが、一ヶ月あたりのダウンロード容量1G以内というAlways Freeの制限内であれば、プレミアムだろうが標準だろうが関係なく無料です。

リンククリックすると開いたページが真っ白に

各種高速化設定を実施した後に、WordPress内でリンクをクリックすると、開いたページが白紙になってしまう事象が発生しました。1つずつ設定をオン・オフして調べた結果、InstantClickによって発生していたことがわかったため、InstantClickのみオフにしました。

データ移行方法

ここからが大変でした。データ移行には色々な方法がありますが、私は次の条件を満たす方法を探しました。

  • 記事のURLは、ドメイン部分を除いて移行前と変わらないこと(burabura117.dip.jp/investment/1 → burabura-investment.net/investment/1)
  • 画像やリンク等、記事中から参照されている画像や記事のURLも問題なく書き換わること
  • 一件ずつの手作業が発生しないこと

大した条件じゃないですよね。ないんですが、これをすべて満たす方法は結局見つけることができませんでした。私が採用した方法を紹介します。

私が採用した方法

私が採用した方法は、記事はDBデータをそのまま移行し、メディアはWordPressエクスポート/インポートツールを使う、というものです。これで、アイキャッチ設定がすべてクリアされる以外はうまく移行できました。具体的には以下です。

  1. 移行元WordPressにて、データベース内容をSQL形式ですべてエクスポート
    1. 私はBackWPupプラグインを利用
    2. phpMyAdminやmysqlクライアントでもOK
  2. 移行元WordPressにて、WordPressエクスポートツールでメディアのみをエクスポート
  3.  移行先WordPressのデータベースサーバにて、SQLをインポート
    1. 私はmysqlクライアントを利用
    2. Database Search and Replace Script in PHPで参照先URLを書き換え
  4. 移行先WordPressのWordPressインポートツールでメディアをインポート

他にも色々な方法はあったのですが、どれもうまくいきませんでした。参考までに記事の最後に記載しています。

転送の設定

旧WordPressへのアクセスを、新WordPressに自動的に転送する設定です。データ移行時に「記事のURLは、ドメイン部分を除いて移行前と変わらないこと」という条件で移行しておけば、移行元WordPressに転送ルールを1つ設定するだけで、過去記事を見に来た人をすべて新しいサイトに(ほとんど気づかれないまま)誘導することができます。この方法は、Feedly等のRSS購読に対してもうまく動作していることを確認しました。

具体的なツールとしてはRedirectionsというプラグインを使い、以下のルールを設定しました。

  • Type:301
  • 正規表現:あり
  • ソースURL:/wp/(.*)
  • ターゲットURL:https://www.burabura-investment.net/$1

KUSANAGI Runs on Docker難しい

データ移行で試行錯誤するにあたり、KUSANAGI Runs on Docker特有の構成で色々つまづいたので、メモしておきます。

WP-CLIの利用が難しい

データのインポート等を行う際に、WordPressダッシュボード経由では非効率であったり、難しかったりすることがあります。こうした場合、サーバのコンソール上で動作するコマンドラインベースの管理ツールであるWP-CLIを使えば簡単なこともあるのですが、php実行環境とWordPressが両方インストールされた環境でないと動作しないため、機能ごとに細かくコンテナが分離しているKUSANAGI Runs on Dockerでは動作させることが難しかったです。少なくとも私はどこにインストールすれば動くのかわかりませんでした。

ちょっとした設定変更が難しい

これも同様の問題ですが、docker-compose.yml等を読み込んで、コンテナの分離方針や、設定ファイルの場所を把握しないと、ちょっとした設定変更でも正確に行うのが非常に難しいです。構築まではできても、DockerやDocker Composeにある程度なじまないと運用が難しいと感じました。ホストVMにログインしても、それだけだと大したことができないんですよね。

私の場合、WordPressインポートツールで記事をインポートする際に容量制限でひっかかり、httpの容量設定は問題なかったのでsslの設定を探し回ったりして相当の時間を費やしました。。

DBサーバにデータを送るのが面倒

Dockerに慣れた人であれば問題ないのでしょうが、KUSANAGI Runs on Dockerの構成では、デフォルトでDBサーバから読み込めるホストストレージはありません。このため、mysqlコマンドでSQLファイルを読み込ませる際には、mariadbのdocker-compose.ymlを以下のように編集し、ホストの適当なディレクトリをマウントさせてやる必要がありました。

/home/wordpress/mariadb/docker-compose.yml

version: '2'
services:
  mariadb:
    container_name: mariadb
    image: mariadb:10.1.21
    environment:
      MYSQL_ROOT_PASSWORD: sn0wsmi|e25670
      MYSQL_USER: burabura
      MYSQL_PASSWORD: sn0wsmi|e25670
      MYSQL_DATABASE: wordpress
    volumes:
      - /home/wordpress/share:/share
    volumes_from:
      - db-data
    ports:
      - "3306"
    restart: always
    networks:
      - common_link
  db-data:
    container_name: db-data
    image: busybox
    restart: always
    stdin_open: true
    tty: true
    volumes:
      - /var/lib/mysql
    command: /bin/sh
networks:
  common_link:
    external: true

その他に試みたデータ移行方法

最終的に採用した方法以外にもいくつかの方法を試してみましたので、参考までに結果を記載しておきます。

記事、メディアファイルともにWordPressインポート/エクスポートツールで移行

  • 記事のURLが新規に生成されるため、既存とはまったく異なるものに
  • メディアライブラリは問題なく移行完了

記事はSQLエクスポート/インポートツール、メディアファイルはFTP等のファイルコピーで移行

  • 記事は問題なく移行完了
  • メディアライブラリは不整合状態で、ファイルの存在は認識しているが中身を認識できておらず、記事に埋め込みできない

記事はSQLエクスポート/インポートツール、メディアファイルはFTP等のファイルコピー後にプラグインで認識

  • 記事は問題なく移行完了
  • メディアライブラリの不整合状態はそのままに、新たに同じファイルが追加され、参照のためのURLも異なる
    • WordPress Flash Uploaderはエラーが発生し、動作せず
    • Add From Server、Media From FTPともに上記の動作に
  • 既存の記事は不整合状態のメディアエントリを参照しており、不整合なメディアエントリを削除すると記事からも見えてなくなってしまう
類似ブログのランキング&応援はこちら

にほんブログ村 株ブログ 高配当株へ にほんブログ村 株ブログ インデックス投資へ にほんブログ村 株ブログ REIT・不動産投信へ

コメントを残す