MovableTyleのサーバー移行方法(引越し)

MovableTyleのサーバー移行方法はいろいろあるのだけど、往年のWeb屋さんはあまりCMSの面倒くささについてはさほど理解が深くないのでHTMLをスポンとFTPであげてしまえばハイお終いというぐらいなものだと思っています。にも関わらずCMSを使ったWEBサイトの移行はそうは簡単ではないです。以下MobaleTypeのサーバー移行の要件をまとめてました。

  1. MTで生成したHTML,CSS,JSなどのファイルそのものの移動。
  2. MT(CMS)ファイルの移動。(mt-config.cgiの設定変更)
  3. 移動元のMTからバックアップ、移動先のMTへ復元(記事とテンプレートの移動)
  4. SSL、ソシャルボタンなどの設定

1. MTで生成したHTML,CSS,JSなどのファイルそのものの移動

殆どの場合WEBサイトの移動はこれだけで終了します。サーバー依存する部分が殆どないために、ファイル移動については殆ど問題が起きません。しかし大量ファイルの場合はFTPやSFTPなどのセッションが切れることもあるので途中半端なアップロードになってしまってデザインがめちゃくちゃになっちゃうこともあるので、そのような場合は、いくらかに分けてアップロードしれば問題ないでしょう。
この時点ではすでに遅しということになりますが、アイテムとして記事にアップロードした画像ファイルのファイル名が日本語名の場合、移動先でうまく読み込まれない場合があります。その場合、移動後にすべてのアップロードファイルを再アップしないといけないハメになるので日本語ファイルの扱いは注意が必要です。
また、ファイルパーミッションには注意しましょう。ディレクトリが755、ファイルが644でたいていの場合は構いません。がその他に動的なファイルがある場合はその環境に合わせます。
その他には、移動元のファイルをしっかりバックアップしておくこと意外に注意点はありません。

2. MT(CMS)ファイルの移動。(mt-config.cgiの設定変更)

MTの本体を移動します。本来的にはMTの本体自体のソースコードを変更するのはご法度ですので、ここではMTのソースが変更されていないことが前提となります。

  • Pluginの移動 – 数多くのプラグインがインストールされている場合もMTを本体ごと移動することで大丈夫です。
  • mt-config.cgiの設定変更

mt-config.cgiでは、DBの接続情報などMT機能のコア部分の設定が書かれています。URLやパスの設定は、MTのインストール時にウィザードで設定が可能なので、少なくとも移動先のDBの設定のみ変更します。DB名、ユーザー名、パスワード、ホスト名の4つになります。
また、サーバーの設定によってはMTが出力するディレクトリやファイルのパーミッションが様々です。MTでは基本的にディレクトリが755、ファイルが644で設定できればよいです。この設定がおろそかになると移動先ではPHPファイルが軒並みInternal Server Error 500になってしまうことがあります。以下のようにパーミションを調整することができます。(マスクの調整といった方が正しいですが…。)

# Permission for php files
#======== ORIGINAL PERMISSION =======================
DBUmask 0022
HTMLUmask 0022
UploadUmask 0022
DirUmask 0022

MT本体をアップロードしmt-config.cgiの書き換えを行ったら、通常どおりMTにアクセスします。インストール画面が出ますのでいつものようにインストールを進めます。パスやURLの設定、sendmailなどの設定は移動先の環境に合わせます。それ以外はだいたいデフォルトで構いません。

3. 移動元のMTからバックアップ、移動先のMTへ復元(記事とテンプレートの移動)

かつては私もDBダンプからリストアという手順を踏んでいましたが、DBに直接接続させてくれることが非常に少ない(というかSSHからDBに接続できる人自体がごく少数)なので、これらの環境を整えるのが困難なことが多いです。MT5からバックアップとリストアが結構簡単にできるようになったのでこれを使うのが一番いいです。
MTにログインしてから「システム」→「ツール」→「バックアップ」と進みます。ここからテンプレートやログを含めたすべてをバックアップ可能なのですが、バックアップ先を指定する必要があります。デフォルトではサーバーの/tmp/以下にバックアップが作成されますが、たいていの場合サーバーのROOT権限などないので、そのディレクトリからバックアップファイルをダウンロードすることができません。ですので、バックアップ先を手元のFTPなどからダウンロードできる場所に指定する必要があります。mt-config.cgiに以下を追記します。

# Backup Dir
TempDir /home/username/www/tmp/

バックアップ先はフルパスで指定します。自分のユーザー権限でアクセスできる範囲なら任意の場所で構いませんので、新たにディレクトリを作成しておきます。パーミションは777にしておくとよいです。というのはMTはCGIで動いているのでApache権限でファイルを出力するからです。
これらの準備ができたら、バックアップの作成をします。バックアップは画像などのアイテムとしてアップロードしたものも含まれますが、大切なのは、

  • Movable_Type-2012-12-20-01-40-02-Backup.manifest
  • Movable_Type-2012-12-20-01-40-02-Backup-1.xml

という2つのファイルになります。manifestはバックアップリストになります。xmlファイルはリストアの際に必要なMTのすべての設定情報になりますのでリストアの際になります。
リストアではウェブサイト、各ブログの設定画面が現れますので移動元の環境に合わせてパスやURLを作成します。MTがインストールされた際の最初のウェブサイトやブログとは別のものとしてリストアされるので、既存のものに上書きされることはありません。(勿論パスの設定が同じだったら再構築時に上書きされてしまいますが…。)
リストアが完了したら全体を再構築します。これで殆ど終了でがMTのバックアップではどうしてだかわかりませんが、グローバルテンプレートが中途半端にしかバックアップされていないという現象が多々生じます。しかたがないので、移動元から移動先のMTへ手動でコピペする作業が生じるかもしれません。私の経験では十中八九はグローバルテンプレートの移動に失敗しています。
もう一つの弱点は、ブログのIDが変更されてしまうことです。

<mt:Entries include_blogs="3,4,5" lastn="10">

というように、ブログのIDで指定しているMTタグがある場合は、すべてのブログIDを調べ直して軒並み変更する必要がありますのでご注意。

4. SSL、ソシャルボタンなどの設定

ここまでで殆どが終了している筈ですが、逆に殆どの場合何らかの不具合があります。サーバー環境が全く違うので多少の不具合があるのはあたり前ということで、各所修正します。
先に上げた日本語ファイル名の読み込みは比較的致命的です。エンコードされたファイル名が軒並み読み込まれないということがあるので、要注意。また、ファイルのパーミッションや権限の違いで思うように再構築できなかったりすることがあります。
送信フォームがあって移動先ではSSLの設定などが必要になる場合には、そのURLを変更する必要があります。MTのシステムに組み込むためには、その該当のURLに関するMTタグを変更する必要があります。該当箇所には、以下のように置換しておきます。

<$mt:EntryPermalink regex_replace="/^http:/","https:"$>
<$mt:BlogURL regex_replace="/^http:/","https:"$>

などです。
ここ最近のFBのいいねボタンなどもいくらか変更が必要かもしれません。それらの新しいサーバー環境に合わせて修正します。手動で修正加えないといけないところが非常に面倒です。
ここまでで殆どWEBサイトの引越しに成功している筈です。

MySQLのダンプとリストアで移行する

少々敷居が高いのですが、DBのダンプとリストアで移行することもできます。しかし、SSHサーバーと双方のサーバーが接続可能であることとMySQLの権限が必要ですし、設定もややこしくなります。要点は、

  • 移行元と移行先のmtディレクトリのフルパスの置換
  • 移行元と移行先のURLの置換
  • 管理者メールアドレスの置換

となります。勿論MTテンプレートの中で適切なMTタグの設定をしていることが前提になりますが、もし仮にパスなどをベタ書きしている場合は、出力されたHTMLファイルなどをgrepなどで移行先のパスに置換してから、DB内のパスも同時に置換しないとダメです。サーバーの引越しを見越してMTの設計をしないといけないわけです。これらの方法は後ほど後述します。

Last update: 2016.10.24 (月)