サーバーエンジニアを行っているinamuuと言います。夏頃にお声がけをいただいてから、ご報告までしばし時間を要してしまいました。
この記事では、最近放置気味となっていた、専用サーバーからメンテナンス性、コスパの良いVPSサーバーへ移行、アップデート過程の作業ログとしてまとめています。
今回実施したことは、大きく分けて以下の3つです。
- サーバーの引っ越しとアーキテクチャの簡略化
- サイトのSSL暗号化
- テスト環境の構築
サーバーの引っ越し
もともと専用サーバーを使っており、メモリも大量に積んでいましたが、あまり使用されていなかったことから、VPSサーバーへの移行を実施しました。
スペックについては割愛しますが、専用サーバーへsysstatを導入し、しばらく様子を見て見積もりを実施しました。
次に、アーキテクチャーについては、下記ではnginx+Apache(mod_php)を採用されていましたが、構成をシンプルにするために新しいサーバーではnginx+php-fpmの構成としました。
nginx+php-fpmではキャッシュせずにWordPressのプラグインのキャッシュのみで対応できないか試みましたが、php-fpmのCPU使用率、および負荷が高く断念し、fastcgi_cacheを採用しました。
キャッシュとしては元の構成に近いですが、Apacheをやめたのでproxy_cacheではなく、今回はfastcgi_cacheになりました。
キャッシュ削除時には、ターミナルよりコマンドを直接入力し、SSHしていたとのことだったので、リモートから実施できる簡単なシェルスクリプトを配置して、MacのAutoMatorを利用して、SSH経由でキャッシュ削除を実施するようにカスタマイズ。
こちらもやっていることは同じではありますが、手動でやっていたところを、アイコンをクリックするだけの手軽な操作にしたイメージです。
下記がキャッシュ削除を行うだけのシェルスクリプトで、MacのAutoMatorから実行できるようにしています。
[crayon]
#!/bin/bash
/bin/rm -rf /var/cache/nginx/* && /usr/sbin/nginx -s reload
[/crayon]
WordPressのポストをフックさせることも考えましたが、メンテナンス性を考えると(別の方が見たときにすぐにキャッシュクリアをどこでやっているかわかるように)、ソースにテコ入れすることなくシンプルに実施することにしました。
サイトのSSL暗号化
SSL未対応だったため、こちらの対応を実施しました。
昔は、あまりなにも考えずにMySQL Clientで、dumpした結果を全てまるっと http:// → https:// へ置換するだけでWordPressは記事内リンクからhttps化が行えました。
dumpファイル内でvimの置換を使えば良かったのです。。
しかし、最近のWordPressはテーマを修正した場合、wp_optionsにPHPのシリアライズが施された値がレコードとして保存されています。
そのためhttpからhttpsへ変更すると、1byteずれてしまいテーマが読み込めなくなるという問題があります。
そこで、all-in-one-wp-migrationプラグインをつかってでエクスポートをすることで、エクスポート時に置換を一緒に行いました。
https://ja.wordpress.org/plugins/all-in-one-wp-migration/
このプラグインであれば一緒にシリアライズも考慮して置換を行ってくれます。こちらでSSL暗号化対応は行うことができました。
メンテナンス時にはスムーズに移行できるように画像ファイルはrsyncで同期を取りつつ、事前に不要なプラグインやテーブルなどの削除を、PhotoshopVIPさんと調整しながら実施。
これらの作業によって、データベースも軽くしながら、パラメータチューニングのmysqltune.plをつかった調整も並行して行いました。
テスト環境の構築
もともと稼働していたテスト環境を移行して、記事を本サイトからインポートすることになり、こちらはいくつか試行錯誤した結果、下記の方法で実施することで解消することができました。
- 元データをソースとDBのdumpデータを新環境へ移行
- demomentSomTres Exportを使って、固定ページだけエクスポート
- MySQL Clinetで当サイトの投稿テーブルだけdumpし、テスト環境へインポート
- 最後に固定ページをエクスポートしたXMLをインポート
https://ja.wordpress.org/plugins/demomentsomtres-wp-export/
固定ページのエクスポートにdemomentSomTres Exportを使用した背景としては、記事はすでに投入されたデータがあるものの、固定ページはテスト環境独自のデータが作成されていました。
また、固定ページは投稿ページと同じテーブルに格納されていることから、MySQL Clientでレコードを抽出するよりもXMLで吐き出したほうが構造の差分がでないと判断したためです。
これで結果問題なく環境を作成することができました。
移行を終えて
今までWordPressはかなりの数のサイトの移転とSSL化を行ってきましたが、アクセス数も多いことからトップクラスの難易度でした。
しかし、SSL化とアーキテクチャの単純化が行えたことは、特に良かったかと思います。
訪問者の方には安全に、そして当サイトがSSL化でより今まで以上の多くの方に訪問されることを願っています。