WordPressを運営しているサーバを、とあるクラウドサーバからAmazonのAWS、EC2に引っ越しし、その際にサーバの構成をnginxとApacheという構成に変えたので、備忘録的にメモ。 詳細は参考にさせて頂いたサイトを記載するとして、次回引越し時に忘れないように。。 基本的には、初心者の方(私もですが)ってWordPress利用のサーバの引越し(移設)って何からやればいいかわからない。。という人向けです。
WordPress引越し(移設)の目的と感想
とあるクラウドサーバが微妙に不安定だったというのが理由。またレスポンスも悪かったので、これを機にEC2を使ってみようかと。 そしてせっかく引越す(サーバ移設する)のであれば、Apacheで再構成するのでなくnginxとApacheという構成にチャレンジしてみました。 Apacheというのは一般的なWebサーバで、WordPressのほとんどはApacheというサーバで動いているかと思います。nginxというは注目されているWebサーバで軽量で強力なキャッシュ機能を持ったWebサーバです。 WordPressは簡単にブログやWebサービスを構築できるのですが、動的にページを生成するがゆえの重さがあるので、それをキャッシュを使って改善してみようかと。 nginxもWebサーバなので、nginxだけでもWordPressは動きますが、nginxとApacheという構成は、nginxをリバースプロクシとして利用し、アクセスをnginxが受けてキャッシュがあればそのままレスポンス、なければApacheが処理するという流れです。 nginx(リバースプロクシ)とnginx(Webサーバ)という構成もあるようで、さらに早いらしいのですが、WordPressがApacheに最適化されている(URLの変更などで対応しやすい)ので、面倒くさがり屋の私は面倒でないnginx×Apacheの構成にしました。 結果は、すったもんだがあったものの大成功でした。
WordPress引越し(移設)の流れ
簡単に流れを記載して、簡単に詳細を説明します。詳細はググってくださいまし。
- WordPress(旧サイト)の記事データエクスポート
- WordPress(旧サイト)のデータエクスポート(FTP)
- 新サーバ(EC2)契約
- セキュリティ設定(ポート開放)
- SSHでアクセスできるようにする
- FTPを設定
- PHP&MySQLインストール&DB作成
- Apacheインストール&設定
- WordPressインストール
- WordPress旧データインポート&設定
- nginxインストール&設定
- サーバ監視ツールMuninインストール
- DNS変更(サーバ移動)
- MySQLチューニング
- Apacheチューニング
これくらいでしょうか。結構ありますね。。簡単な詳細は以下に。
WordPress(旧サイト)の記事データエクスポート
旧記事データを移す方法は大きく2つ、WordPressの管理画面ツール>エクスポートを利用するか、MySQLのデータをphpMyAdminやコマンドからdumpするかです。 双方メリット、デメリットがあるのですが、簡単なのはエクスポートを利用する方法です。その場合、リンクは別途引越しする必要があります。いちおう簡単に引越しする方法はあるので(カテゴリは手動で再設定が必要)、ググってください。 そして、これは記事データを移すだけなので、画像データなどは別途作業が必要なので、後述します。URLを変更する場合は、バックアップしたデータをエディタなどで置換する必要があります。
WordPress(旧サイト)のデータエクスポート(FTP)
WordPressのデータというか、旧サイトからWordPressのフォルダごと引越ししちゃいます。プラグインや画像データ、テーマが引越しされます。 FTPからフォルダ(ディレクトリごと)ダウンロードすればOKです。 データが多いと時間がかかるので、余裕のあるタイミングで・・
新サーバ(EC2)契約
今回はAmazonのEC2を借りました。マイクロインスタンスであれば一年無料(ただしスペックは著しく低い・・・)であったり、いろいろ無料プランがあります。 ちなみに、EC2は国内のVPSなどよりは高いと思います。ただ、利用できるサービスが豊富で、サービスの規模が大きくなってきたときに、再構築しやすいので。 方法は適当にググって貰えればと思いますが、WordPressが構築されたパッケージもあるらしいのですが、使っていません。 検討するポイントは、リージョンというサーバの場所とOS、プラン。東京というのもありますが値段が若干高いです。プランも豊富なので適当に。OSはLinux。普通のブログであれば、マイクロかスモールで良いかと。 英語が多いので、英語が苦手な人は詰まりそうですが、ググればいっぱい情報がでてきます。 現在はひとつのインスタンス(サーバ)で構築しましたが、負荷があがればロードバランサー×Webサーバ(複数台)×RDS(データベース・サーバ)という構成にする予定です。
セキュリティ設定(ポート開放)
EC2を借りて、インスタンス(サーバみたいなもの)を作成したら、セキュリティ設定をして、使用するポートを開放します。とりあえずはWebサーバで利用するポート(80番)と、SSHとFTPで20、21、22あたりでしょうか。
SSHでアクセスできるようにする
SSHってのは自分のパソコンのコマンドプロンプトやターミナルのような黒い文字だけの画面を使ってアクセスするものです。苦手でしたが、適当に触っていれば慣れてきます。いろいろ使えると便利です。というか、いろいろインストールしたりするのに、SSHを利用する方法しかネットに載っていないので、徐々に覚える感じですね。 linux、コマンドとかで検索すると使い方が書いています。いっぱい出てきますが、よく使うコマンドは一部です。
FTPを設定
なんだかんだいって、ファイルアップロードしたり、フォルダを俯瞰して確認したくなるので、FTPを設定します。 このあたりの記事が参考になりました。 FTPサーバー構築(vsftpd)
MySQLインストール&DB作成
WordPressはPHPという言語で動くので、SSHでPHPと関連するもの、MySQLをインストール。方法は適当にググってください。yumってのが便利です。MySQLをインストールしたら、設定しますがユーザとDBの名前、パスワードを旧サーバと同じにしていると、wp-configを書き換えないで使えるので便利です。
Apacheインストール&設定
これも適当にググってください。とりいそぎポート80番に設定しておくと良いです。いろいろテストするので、サーバネームはIPアドレスで。 Apacheの設定はhttpd.confというファイルで設定します。その他、〜.confというファイルが設定ファイルです。 項目は多いですが#で書かれているのはコメントなので、意外と少ないです。Apacheの中身の設定と、アクセスされたときの挙動の設定があります。 ブラウザからIPアドレスでアクセスしたときに、Apacheの画面が表示されればOK。
WordPressインストール
IPアドレスでWordPressにアクセスできるようにする。 FTPでApacheの公開ディレクトリに旧サーバのWordPressデータをアップロードします。wp-configは現在のMySQLの情報に合わせ、IPアドレスにアクセスすると、WordPress構築画面に遷移します。 データベース接続エラーが出たらwp-configの間違いの可能性、もしくはMySQLが立ち上がっていない可能性、それアクセスできなければディレクトリの設定間違いの可能性が高いです。ディレクトリ間違いはApacheで設定&修正すればいけるけど。
WordPress旧データインポート&設定
WordPressにログインしたら、ツール>インポートを使って旧データをインストール。テーマやプラグインも旧データのものを使えるので、再設定する。 とりいそぎはURLはIPアドレスで。 公開できる状態になればOK。
nginxインストール&設定
この記事が丁寧でわかりやすいです。 nginxベースの高速なWordPress環境をお名前.comのVPSで構築 適当にググってやってしまったのですが、nginxをFast-CGIで動かす。Apacheのlistenを8080にする。listenというのは、このポートにきたらオイラが受けますよというルールで、WebサーバのApacheやnginxはデフォルトで80番に設定されています。 今回の構成ではnginxに80番を設定し受ける、キャッシュを返すのですが、キャッシュで対応しない、できないものを8080番ポートのApacheで処理して貰うという流れです。 注意点として(ハマった)、ネット上にはnginxのみでWordPressを動かしているものと、Apacheをかませるもの、nginxをFast-CGIで動かすものと、そうでないものがあるので統一しないとぐちゃぐちゃになります。 また、WordPressでWPTouchやK-taiStyleを使っている場合には、キャッシュの方法を変えないと、スマホやガラケーにもPC用のサイトが表示されたりするので注意です。 そして、nginx.confなどにexpiresという設定があるのですが、これがキャッシュの期間を指定するもので、静的ファイルは長くても良いですがネット上の情報ではexpiresが30d(30日)とかになっているものがあり、トップページがそんなことになっていると、記事をアップしても全然更新されないということになっちゃいます。 ちなみに、ApacheもnginxもMySQLもそうですが、confファイルを変更したら再起動しないと設定が反映しないので、注意です。 IPアドレスでWordPressが表示されればOKです。
サーバ監視ツールMuninインストール
これは入れたい人のみで。あとから入れることも可能です。 Muninというのは5分に一度、サーバの状態をチェックして、グラフにしてくれるツールです。インストールも結構簡単です。 これを入れておくと、サーバの負荷状態がわかるので、サーバのプラン変更やチューニングに役立ちますので、入れるのをオススメします。 インストールはこの記事がめっちゃわかりやすいです。 サーバ監視ツール「munin」の使い方 ~ その1 ~ 私は基本的なものの他にMySQLとApacheの監視を入れました。 muninでWordPressにApacheの監視を入れるには、htaccessファイルに追記する必要があるので注意です。
DNS変更(サーバ移動)
DNSを変更する前に、nginxやApacheのIPアドレス部分を自分の使用するドメインに変更(hogehoge.jpなど)します。 変更したら、DNSの設定を変更します。DNSの変更はお名前.comのようなドメインを購入したところで設定します。 DNSサーバというのは、ユーザがブラウザでアクセししたときにまず、DNSサーバ、仮にお名前.comだとすると、そこに見に行きます。そこにいくと、hogehoge.jpさんのIPアドレスは233.162.☓☓☓ですよ〜と教えてくれて、ブラウザはそこにアクセスしにいきます。 そしてIPアドレス先にアクセスしたときの挙動をnginxやApacheで設定し、このフォルダを見てねと指定するという流れです。 DNSの設定を変更すると、0時間〜72時間くらいかけてアクセスが旧サーバ→新サーバに移動します。 個人的には、新サーバのWordPressの一部を変更しておくと、いま繋がっているのが新サーバなのか旧サーバなのかがわかりやすくて便利です。
MySQLチューニング
MySQLのチューニングをします。WordPressは動的にページを生成するので、MySQLの負荷が高いです。アクセスが少なければ大して問題になりませんが、チューニングすることで表示速度が上がる、サーバの負荷が下がるというメリットがあります。 MySQLをチューニングするには、まず現状を知って、改善、様子を見て、また改善するという流れになります。チューニングにはMySQLTunerが便利です。 MySQLTunerでMySQLのチューニングを診断する方法 QueryCacheはやったほうがいいとか、設定しないほうがいいという両論ありますが、WordPressに関しては設定したほうが良いと思います。
Apacheチューニング
まだやっていないのですが、必要に応じてという感じでしょうか。。
詰まったポイント
nginxの設定がネット上の情報では結構バラバラで苦労しました。そして、nginxのデフォルト設定ではCacheを消すことができないらしいので、Cacheの保持期限に注意するのと、もしくはインストール時にモジュールを入れる必要があります。 モジュールを入れると、WordPressのnginxのプラグインを入れることができ、記事更新時にCacheを削除したりできるようです。 nginxできちんと設定すると、WordPressにログインしている人にはキャッシュしないという設定になるので、公開後はきちんと更新した記事が閲覧できるかとログインしていないPCやスマホで確認することをオススメします。 あとはディレクトリの権限など。linuxに慣れていないのもありますが、linuxにはユーザとグループというのがあり、各ディレクトリ(フォルダ)、ファイルごとにユーザとグループというのが設定されています。そして、ディレクトリごとに、ユーザ、グループ、全員みたいな感じで、読める、書ける、読み書きOKみたいな設定されています。 そして、ユーザは各アプリケーションごとに分かれています。 Apacheユーザが、nginxユーザしかアクセスできないフォルダにアクセスしようとしてもエラーになっちゃいます。その場合、そのフォルダのグループにApacheユーザを登録し、そのフォルダのアクセス権限をグループOKみたいな設定にするなどの対応が必要です。 FTPでも同じで、FTPでアクセスしたユーザがそのフォルダの権限がないと、ファイルをアップロードも修正もできません。 このあたりも慣れが必要ですね。。。 SSHでアクセスしてviで修正とか言われても???となりますが、viもすぐに慣れます。iを押してインサートモードにし、修正し、escして:wqで保存です。これだけ覚えていれば、SSHでコマンドプロンプトから修正できます。 Linuxのコマンドも、よく使うのは限られてくるので、使っていれば慣れるかと。私は全く覚えていませんが。。。 という感じで、無事引っ越ししました。ちなみにnginxとApacheのWordPressは超早いです。負荷もかなり下がったので、コストも落ちそうです。 苦労しましたが。。。