ブログのサーバーをCentOS5/ApacheからCentOS7/nginxにお引っ越しした話

シェアする

このブログ、さくらVPS2G石狩リージョンで動いてまして、そりゃ何の不自由もなく、データがぶっ飛ぶことも無く過ごしているのですが、いかんせんネタが無いしOSのバージョンも2世代前なので暇のあるときにバージョンアップしてみることにしたついでにApacheもやめてnginxに変更したという話。ちょっと長め。

手順を簡単に

  • サーバーをもう1台契約してLAN接続
  • 新サーバーにOSをセットアップ
  • 新サーバーにDBやWebサーバー、Webmin、phpMyAdminをインストール
  • 旧サーバーからデータ移行
  • バーチャルホストの設定
  • 仮URLをDNSで設定して動作確認
  • 本番URLを新サーバーへ移行

てな感じ。

サーバー契約とLAN接続
商用稼働中のサーバーを止めるわけにもいかんので、2週間の無料期間を狙っておなじさくらVPSの石狩リージョンに同じ値段のVPSをもう1台契約。お互いをLAN接続します。
さくらVPSでローカルネットワーク設定 – 城好きwebプログラマーの生態メモ
1Gbps(ベストエフォート)って書いてあったから期待したけどファイル転送レートは15Mbytes/sぐらい。インターネット経由でつなぐと10Mbytes/sぐらいなんであんま速くなかった。移行するデータ量が多くなければLAN接続しなくてもいいかも。LAN接続するのにサーバー落とさないといけないし。

新サーバーにOSをセットアップ
さくらVPSのデフォルト設定はCentOS6なので、カスタムOSインストールから7をセットアップ
カスタムOSインストールガイド – CentOS 7|さくらインターネット公式サポートサイト
特に困ることは無し

新サーバーに各種アプリケーションをセットアップ
CentOS 7 でLAMP(Nginx+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Nginx編) | レンタルサーバー・自宅サーバー設定・構築のヒント
基本的にはここを見ながら設定。sshの公開鍵認証設定なんかはいつも通り。

CentOS7を入れたら色々とハマった | XYZPlus Blog
ここを見ると5との違いがわかるかも。iptableじゃなくてfirewalldでポート開放など。

webminも普通にyumで入れればOK。ポート変更は忘れずに。

phpMyAdminのインストール
php-fpmをインストール。イマイチ初めてのnginx設定ファイルに慣れなくて手間取る。無常にも出まくるBad gatewayやfile not found。まず、php-fpmで設定したlistenの値とnginxの設定ファイル内で指定するfastcgi_passの値を揃えないといけない。UNIXソケット通信にするなら
listen = /var/run/php-fpm/php-fpm.sock;
にして、nginxの設定ファイル内の
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
に合わせる。深く考えないでここの設定をずらしちゃってなかなか動かなかったけど、冷静に考えたら当たり前の話。デフォ値はこっち。
fastcgi_pass 127.0.0.1:9000

CentOS7 に nginx、phpmyadminをインストール
nginx + MySQL + phpMyAdmin の環境を構築する方法 – Linux入門 – Webkaru

旧サーバーからデータ移行
phpMyAdminが入ったら、旧サーバーから各WordpressのDBと同じDB名で作成して、ユーザーの作成、許可の設定を合わせる。まぁWebminでやってもいいんだけど。これが終わったら旧サーバーからscp使ってWordpressが入ってるディレクトリをごっそりコピー。

バーチャルホストの設定はこんな感じ

server {
listen 80;
server_name blog.seamonkey-delivery.com;
root /var/www/hoge;
index index.php index.html index.htm;
charset utf-8;

location ~wp-login.php$ {
auth_basic ‘wp-login’;
auth_basic_user_file /etc/nginx/hoge/.htpasswd;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /var/www/hoge$fastcgi_script_name;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/hoge$fastcgi_script_name;
}
try_files $uri $uri/ /index.php?q=$uri&$args;
}

wp-login.phpにベーシック認証をかけてるのと、下から2行目はカスタムパーマリンク設定している場合に必要な記述。これがないと404。
ベーシック認証は、/wp-adminにかけてもいいんだけどそれだとwp-login.phpへのアタックは発生しちゃう。phpに動いてほしくないのでwp-login.php自体にベーシック認証を設定するんだけど、単純に認証の記述だけしちゃうとphpがスルーされてソースがダウンロードされてしまうよろしくない設定に(っていうかログイン出来ない)。とりあえず上記設定でいけた。
Nginx で Basic 認証をかける手順 | EasyRamble
Nginx で wp-login.php に Basic 認証を設定する – hiratake55 の開発メモ

仮URLで動作確認
手持ちのドメインにダミーのサブドメインを設定して新サーバーへ向ける。お名前.comのクソ管理画面にイライラ。仮URLでWordpressを確認するときは一時的にDBを編集する必要がある。phpMyAdminでwp_optionsの中を開いて、siteurlとhomeに入ってるURLを仮URLへ変更する。

とこれだけでは画像のパスが旧サーバーを向いているので、エントリ内の画像パスを全部書き換える必要がある。
【WordPress】全記事から検索して一括置換出来るプラグイン「Search Regex」が素晴らしい | nori510.com
このプラグインでドメインを全置換しちゃおう。ハイリスクだけど最悪旧サーバーから再度DBをインポートすりゃいいし、新サーバーは公開されてないので気軽にやれる。

これらの設定をして新サーバーへアクセス。ウィジェットとかで絶対パスを入れて無ければ大体のリンクはつながってるはず。チェックポイントは、カテゴリリンクやカスタムパーマリンクが設定されているか。トップページだけ見て終わらないように注意。

管理画面にもアクセスしてみると、メインカラムが真っ白。原因がわからないんだけど、一瞬表示される画面にwp super cacheがどうのこうのって書いてある。どうもこいつがnginxと相性が悪いっぽいけど、いかんせんメインカラムが真っ白なんでプラグインの削除ができないw

仕方ないので旧サーバー上でwp super cacheをオフにして再度DBエクスポート、wpのディレクトリ上書きをしてアクセス。今度は無事にメインカラムが表示されたのでこれが原因で確定。突き詰めたいけどめんどいのでもうこのプラグインは使わんとこう。
WP Super Cache をアンインストールする | 愚者の紋章 -The Fool-
wp-config.phpから記述消してやーって言われるんだけど、444なんでいじれない。権限修正して記述削除して再度444に。

ここで新旧サーバーで負荷テストしてみると、高負荷時の秒間処理能力は数倍ぐらいに上がっている模様。ただし、見た目の表示速度はそんな変わらん感じ。大体そうだけどAdSenseとソーシャルボタンが足引っ張るからあんまサーバー関係ないのかな。リバースプロキシの設定しようかと思ってたけど、とりあえずもういいや。

最後に商用稼働中のURLをDNS設定で新サーバーに向ける。アクセスの少ないやつから順番に移してく。ログ見て流入が来てるのを確認。

awstatsもインストールしたんだけどその話はまた別の機会に…

centOS7/nginx/wordpress/awstatsの構成はまだまだ参考記事が少なくて大変です。

スポンサードリンク
 
シェアする