【お名前.com】WordPressを共用SDサーバーからVPS(KVM)へ乗り換える その7

CentOS + Nginx でのサーバ構築。1から始める初心者向けです。
なお、筆者もばりばりの初心者です。

<その6>では「VSFTPD」と「phpMyAdmin」を導入しました。

<その7>では「WordPressの引っ越し」を行います。

バックアップ用プラグインには「BackWPup」を使用しています。
本体とデータベースをVPSに移し、<その8>で動作確認を行ってからDNS変更を行います。

なお、共用SDサーバーでメールを使用している場合はDNS設定を変更するとメールが使えなくなります
「Gmail」などに移行しておくか、早急に「postfix」でメールサーバを構築しておきましょう。


ドキュメントルートを確認

ドキュメントルートとはなんなのかを例によって調べてみました。

ドキュメントルートとは?
HTTPやFTPでアクセス可能にするコンテンツの保管場所のフォルダ/ディレクトリのことで、そのサーバにアクセスした時の最上位フォルダ/ディレクトリ IT用語辞典 e-Wordsより抜粋

要するに「○○.com」とか「○○.net」とかにアクセスした時、一番初めに参照されるディレクトリのことです。ここ「mndangler.net」では「nginx」の設定により「/var/www/vhosts/default」がドキュメントルートに設定されています。「default」という名前のフォルダの中身がまず参照されるということです。

var ─  www ─  vhosts ─  default ┬  wp-admin
 ├  wp-content
 ├  wp-includes
 └  index.php 他

「var」や「www」といった階層の中にもフォルダやファイルが無数に存在しますが、外部からブラウザでアクセスできるのは「defaultフォルダより下の階層のみ」ということになります。

サイトにアクセスがあればドキュメントルート内にある「index.html」や「index.php」が読み込まれてページが表示されるという仕組みです。当ブログでは上記の一番右側の階層がドキュメントルートですので、アクセスがあればその中の「index.php」が読み込まれます。

このドキュメントルートの指定の違いが、思わぬトラブルを招きかねません。

お名前.com 共用SDサーバーのドキュメントルート

元々、私は「お名前.com共用SDサーバー」で「簡単インストール機能」というのを利用して「WordPress」をインストールして使用していました。

この場合、ドキュメントルートは「WordPress本体」のあるディレクトリではなく、

mndangler.net ┬  wp ┬  wp-admin
 ├  .htaccess ├  wp-content
 └  index.php ├  wp-includes
 └  wp-blog-header.php 他

1つ上の「wpフォルダ」「.htaccess」「index.html」があるディレクトリになります。
これは「簡単インストール機能」がそういう仕様になっているためです。

ドキュメントルートに「WordPressの本体」がありません。
上記の構造なら、普通に考えれば「https://mndangler.net/wp/」がドキュメントルートになるべきです。

しかし、これでしっかりとサイトは表示されます。

なぜ「WordPress」が機能して表示されるのかというと「wp」フォルダと同じ階層に置かれている「index.php」が「wpフォルダ」の中の「wp-blog-header.php」を読み込みに行くという仕組みになっているからです。

ちなみにその「index.php」にはこのように書いてあります。

/** Loads the WordPress Environment and Template */
require('./wp/wp-blog-header.php');

なぜこんな仕組みにしているのか考えてみました。思うに、こういうことなのだと思います。

サーバを「WordPress」以外の用途で外部からアクセスして使用する場合、ドキュメントルートが「WordPress本体のあるディレクトリ」だと「WordPress本体と同時に関係無いファイル・フォルダを置いておかなくてはならない」という状況になってしまうので、それを避けるためにドキュメントルートを1つ上に置いてそこから移動する構造にしているのではないでしょうか。

どこがドキュメントルートであってもパスが正しく通ってさえいれば問題なく動くのですが、自身のサイトのドキュメントルートがどこになっているのか、また、引っ越しするのであれば引っ越し元のドキュメントルートはどのようになっていたのかを確認しておくことは非常に大切です。

なぜ大切なのかと言うと「パスが変わってしまう」からです。

共用SDサーバーでは「https://mndangler.net/wp/」だったものが、VPSで「http://mndangle.net」に変わることで、保存してある既存の画像などへの「パス」が変わってしまうのでアクセスできなくなってしまいます。

引越し直後に起こりがちなトラブルとして「画像が表示されない」ことが多いそうですが、ドキュメントルートの違いにより画像までのパスが変わっているのが原因ではないでしょうか。

私の場合だと下のように「パス」が変わるのでデータベースをそのままインポートすると、存在しない「wp」フォルダに画像を探しに行こうとして「404エラー」となります。

S D https://mndangler.net/wp/wp-content/uploads/2014/07/○○.png
VPS https://mndangler.net/wp-content/uploads/2014/07/○○.png

トラブルが起きがちなのでドキュメントルートの確認だけは必ずしておきましょう。

本体の引越し

いよいよ「WordPress」を丸ごと移動させます。

今回の場合、「お名前.comのVPS(KVM)テンプレート」から「Nginx+WordPress CentOS」をインストールして使っていますので引越し先にはすでに「WordPress」が存在しています。しかし設定などを1からやり直すのは面倒なので引越し元のデータで乗っ取るような形で進めていきます。注意点と手段は以下の通りです。

■ 引越し元……共用SDサーバーにある<WordPressデータ>
■ 引越し先……VPSの<WordPressデータ>

1. SDサーバーの<WordPressデータ>をVPSに丸ごとコピーして移動しておく
2. VPSの<WordPress用データベース>を、SDサーバーの<WordPress用データベース>で上書きする
3. VPSの「wp-config.php」ファイルをSDサーバーの「wp-config.php」へ上書きして設定を奪う
4. VPSとSDサーバーの<WordPressの入ったフォルダ名>を入れ替えることで接続先を変える

※ SDサーバーは「Apache」で動いていたので、「nginx」で最適に動くように「wp-config.php」だけはVPSのものを使用します。
※ パスが変わって画像が表示されないので、プラグインでURLを一括変換して対応します。

データの移動には様々な方法がありますのでやりやすい方法で行って下さい。
私は若干強引な方法を取りましたので、あくまで一例として御覧ください。
1. WordPressデータの移動

<引っ越し元>のバックアップから始めましょう。
まず、キャッシュ系プラグインは予期せぬエラーの原因になりそうなので一旦停止しておきます。

その上で「BackWPup」を使いバックアップを取ります。
使い方はリンク先よりお確かめ下さい。

私は「キャッシュ系以外の全てのフォルダ・ファイル + SQLデータ」をバックアップしています。
バックアップは「.tar.gz」で固めてあるので、これを一度デスクトップにコピーして解凍します。
「ジョブ」からダウンロードをクリックすると「最後のバックアップ」が簡単にダウンロードできます。

解凍したフォルダを開いてすぐの中にある「○○.sql」もしくは「○○.sql.gz」となっている「SQLデータ」だけをフォルダから取り出して、再びフォルダを圧縮します。私の場合は「rar形式」に圧縮しましたが、「zip」でもなんでも構いません。むしろ「rar」だとサーバ上で解凍する際に一手間かかります。

名前をわかりやすいように「backup.rar」に変更しておきました。
それを「FTPクライアント」などで引越し先のVPSの「/var/www/vhosts」の中にアップロードします。
「WordPress本体」の1つ上の階層です。

var ─  www ─  vhosts ─  default ┬  wp-admin
 └  backup.rar ├  wp-content
 ├  wp-includes
 └  index.php 他

このような状態です。
説明の都合上「backup.rar」としていますがこの名前は後に変更するのでなんでも構いません。

コンソールでコマンドを打って<SDサーバー内>のデータを直接VPSへダウンロードできれば早いのですが、アクセス制限などで上手くいかなかったためローカル(自分のPC)経由でデータを移しました。

アップロードした「backup.rar」を解凍します。

unrar で解凍

「rar」で圧縮しましたので、サーバ上で解凍する方法を載せておきます。
「unrar」というソフトをインストールします。

sudo yum --enablerepo=remi install unrar 

インストール完了後、「backup.rar」を置いてある「vhosts」フォルダに移動します。

cd /var/www/vhosts

「backup.rar」を解凍します。

unrar x backup.rar

解凍完了です。これで本体を丸ごと移動しました。
不要になった「backup.rar」は削除します。

sudo rm backup.rar

消していいか確認されますので「y」で実行してください。

unzip で解凍

「zip」形式で圧縮してアップロードした際は下記コマンドで解凍します。

unzip backup.zip

こちらも解凍完了後は「backup.zip」は不要なので削除しておきましょう。

sudo rm backup.zip
2. データベースを上書きにて引っ越す

次に「phpMyAdmin」を使ってデータベースをインポートします。
VPSにテンプレートで作られている「WordPress用データベース」を「SDサーバーで使っていたWordPress用データベース」で上書きしてしまいます。

以下の内容ではデータベース名が<wordpress>になっていますが、これは<お名前.comのVPS(KVM)テンプレート>から「Nginx+WordPress CentOS」を選択した際に作られるデータベース名です。名前が異なる場合もありますので各自ご確認下さい。また、可能であればセキュリティ的には複雑な名前の新しいデータベースを作成して使用することもおすすめします。

ブラウザを使って「phpMyAdmin」にログイン後、画面左側のデータベース一覧から「wordpress」を選択しインポートをクリックします。

admin

■ <データベース”wordpress”へのインポート>となっていることを確認。
■ 文字セットが「utf-8」になっていることを確認。
■ 「ファイルを選択」でローカルに置いてある「○○.sql」ファイルを選択します。

「sqlファイル」は「gz圧縮」されたものでも(多分)そのまま使えます。
一番下の「実行」をクリックし、データベースをインポートします。
一瞬でインポートされると思います。

3. wp-config.php を編集する

SDサーバーで使っていた「WordPress」は「SDサーバーにあるWordPress用データベース」に接続して読み込む設定になっています。これを「VPSに上書きしたWordPress用データベース」に接続するために「wp-config.php」の情報を書き換えます。

この「wp-config.php」だけはテンプレートで元から用意されていた「wp-config.php」を使います

注意点でも言いましたが、今回の引越しは「Apache」から「nginx」への乗り換えでもあります。
「Apache」で動いていたSDサーバーから、「nginx」で動かすVPSへの引っ越しです。

VPSのテンプレートでインストールされた「WordPress」に用意されている「wp-config.php」には「nginxのキャッシュコントロールに関する記述」や「セキュリティ用の記述」がすでに書かかれています。

これを「SDサーバーで使っていたwp-config.php」に上書きしてしまいます。
ごっそりそのまま設定を頂いてしまうというわけです。

その上で、データベースへの接続情報をVPS用に書き換えます。

まず、テンプレートの「wp-config.php」が置いてあるディレクトリに移動します。
私の場合ですと「defaultディレクトリ」内です。

sudo cd /var/www/vhosts/default

「wp-config.php」をコピーして移動・上書きします。コマンドの内訳は以下のとおりです。
[cp] コピー
[-a] ファイルの構成・属性を保持する
[wp-config.php] コピー元
[/var/www/vhosts/backup/wp-config.php] コピー先

sudo cp -a wp-config.php /var/www/vhosts/backup/wp-config.php

「backup」の部分(フォルダ名)は自分の環境に合わせて書き換えて下さい。
「backup.rar」を解凍してできた「backup」というフォルダ名に過ぎません。
上書き確認をされますので「y」で上書きを行います。



続いて、上書きされた「backup」フォルダ内の「wp-config.php」を開いて必要な部分を編集します。

sudo vi /var/www/vhosts/backup/wp-config.php

17行目あたりからの「データベース接続に関する内容」を自分用に書き換えます。

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress'); ← 例のままでいうとデータベース名はこうなります

/** MySQL database username */
define('DB_USER', '○○○○○○○○'); ← 必要なら変更する

/** MySQL database password */
define('DB_PASSWORD', '○○○○○○○○'); ← 必要なら変更する

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

「The name of the database for WordPress」や「MySQL database username」や「MySQL database password」の部分は、自分でデータベースを用意した場合は合わせて変更して下さい。

テンプレートの<WordPress用データベース>を上書きした場合は、<username><password>ともにそのままで繋がりますので変更の必要はありません。
4. フォルダ名を変える

現在、「/var/www/vhosts」には「default」と「backup」の2つのフォルダがある状態です。
ドキュメントルートは「var/www/vhosts/default」なので、「backup」の名前を「default」に変えてしまえばその中身がドキュメントルートになるというのが今回の作戦です。

元からあった「default」はいざという時のために残しておきたいので、名前を「escape.default」などに変更して残しておきます。後で見てわかるなら「defauli00」でも「aiueo」でもなんでもOKです。

あとは「backup」のフォルダ名を「default」に変更すれば乗っ取りは完了なのですが、この状態では「default」フォルダ以下のオーナーがSDサーバー時の「Apache」のままなので、先に「nginx」に所有権を渡しておきましょう。

sudo chown -R nginx:nginx /var/www/vhosts/default

「chown」というコマンドで所有権を渡すことができます。
「-R」のオプションで指定したフォルダ以下全てに一括で適用されます。


まだ「mndangler.net」のドメインは使えないので、ブラウザを使って「VPSのIPアドレス」へアクセスします。
このブログの場合、「http://157.7.221.139」となります。
無事に自分のブログが表示されたら一段落です。

本来はセキュリティ面なども考慮してドキュメントルートを任意の名前、「例) /var/www/vhosts/mywordpress」などに変えるべきなのですが、そうした場合「nginx」の設定ファイルのみを書き変えれば良いのかどうかわかりませんでした。VPSの他の箇所にも変更が必要だった場合、正常に動かなくなるのが怖かったため初期の「default」フォルダをそのまま流用する方法で引越しました。

取り急ぎやったこと

まずは動作確認をしました。ページをいくつか巡ります。
意外と問題無く動いています。そしてさすがVPS、動作がとても軽い。

「WordPress」のダッシュボードにログインしてみると、プラグインがいくつかトラブっていました。

「MO Cache」と「WP File Cache」はエラー表示の上、ファイルごと消え去っていました。
キャッシュ系は今後「nginx」が面倒を見てくれるのでここは気にせず無視です。

代わりに「Nginx Cache Controller」という「nginx」用のキャッシュプラグインを入れました。

画像を適切に圧縮してくれる「EWWW Image Optimizer」というプラグインもエラーを吐いています。
「optipng」「gifsicle」あたりをどうにかしろと言われているのですが何のことやらさっぱりわかりません。調べてみたところ「この2つをインストールしろ」と言われているようです。

「設定」→「EWWW Image Optimizer」を見てみると「Missing」となっています。
2つ入れろと言われましたが、下記の3つをコンソールでインストールしたら全て「OK」になりました。

sudo yum install optipng
sudo yum install gifsicle
sudo yum install ImageMagick

所有者権限を nginx に渡す
「フォルダ名変更時」に所有権を渡してあれば以下は不要です。
私はこの時点でやっと気が付いたのでそのまま記録として残しておきます。

「EWWW Image Optimizer」で悩んでいた時に一度プラグインをアンインストールしてみようとしたところ「要求されたアクションを実行するには、WordPress が Web サーバーにアクセスする必要があります」と言われ、なんだこれは……と頭を抱えました。

調べた結果、スクリプトの実行者が「フォルダのオーナーと異なる」時に起きる現象とのことです。
丸ごと本体をアップロードしたのでフォルダのオーナーがSDサーバー時の「Apache」のままだったのです。

「default」フォルダ以下のオーナーを「nginx」に変更します。

sudo chown -R nginx:nginx /var/www/vhosts/default

これで以降は聞かれることはなくなりました。

画像のパスを一括変更

ブログ内を確認しているうちに、画像が読み込めていないことに気が付きました。
そうです、「画像へのパスもSDサーバー時とは異なっている」のです。

S D https://mndangler.net/wp/wp-content/uploads/2014/07/○○.png

VPS https://mndangler.net/wp-content/uploads/2014/07/○○.png

たいした記事の量ではないのですが1つずつURLを変更するのはキツイなーと思っていると、ドンピシャなプラグインがありました。

WordPress › Search Regex « WordPress Plugins

Serch Regex」というプラグインは全ての投稿内の文字列を検索し、指定したものへ置換してくれます。

インストール後は「ツール」→「Search Regex」から使います。

初期設定のままでいいので「Search pattern」へ「https://mndangler.net/wp/」と入れ「Serch」を押します。
このURLは自身の環境に合わせて変えて下さい。

ser

結果の一覧が出てくるので確認しつつ「Replace pattern」へ「https://mndangler.net/」と入れ

ser2

「Replace」を押し置換後のURLが変えたいものになっているかを確認します。
最後に「セーブ」するまでは変更決定にはなりませんので気楽に試しましょう。

置換後のURLに問題が無いことを確認したら「Replace & Save」で実行・保存します。

投稿内のURLが置換され、無事に画像が表示されるようになりました。
ただし、このプラグインの検索範囲は投稿文章内のみなので、テーマのテンプレートに使っている画像などは直接編集して直しました。

これにて「WordPressの引越し」は完了です。


<その8>ではこれまで使っていたドメインをVPSでも使用できるように設定します。
とりあえず次で最終回です。

その8 … DNS設定の変更へ

コメント

 DISQUSコメントシステムとは?
DISQUSコメントシステムFacebook Twitter Google などのアカウントを使用してコメントを残すことができます。
また、それらを使いたくない場合でも メールアドレスのみ でコメントが可能で、その際のアドレスはもちろん非公開です。
YouTubeTweet などはURLを貼ると自動で埋め込み表示されますし、画像をアップすることもできます。
お気軽にコメント頂けると嬉しいです。

New Post



Random


CLOSE