さくらのVPSにKUSANAGI環境の複数ドメイン型WordPressを構築し「さくらのレンタルサーバー」と「MixHost」で運用している計6サイトを移行した。
ssl → ssl:3サイト
非ssl → 非sslで移行 → 後にSSL化:3サイト
さくらのVPS 2Gプランで検証。
OSのインストールを3回。
KUSANAGI環境下でのWordPressの構築はテストなどを含め15回以上行った。
4サイト移行した時点で2Gプランではメモリが不足しそうだったので4Gプランで再構築。
日本語ドメインでも問題なく移行できた。
SSL化も複数のパターンで実施し、色々知識がついたので記しておく。
【関連記事】
>>>【最強のWordPress高速化】KUSANAGI for さくらのVPS にMixHostから移行する
もくじ
移行前後のPageSpeed
サイトA http → https
1万PV/月程度
最適化も何もしてなかったサイトだったので改善効果は大きい。
さくらのレンタルサーバ(スタンダード)
さくらのVPS(4G)
サイトB https → https
10万PV/月程度。
MixHost(512MB)からさくらのVPS(4G)へ移行。
もともとできる限り高速化していたので大きな変化はなかった。
ただ体感速度はかなりアップしている。
GTmetrixで比較すれば差が出たのかもしれない。
サイトC https → https
1000PV/月程度。
知り合いの中小企業サイト。
もともとあったサイトの管理だけを受託している。
パソコン「2」ってwww
さくらのレンタルサーバ(スタンダード)
さくらのVPS(4G)
KUSANAGIの画像圧縮コマンドを使った効果も大きいと思われる。
というかKUSANAGI云々の前にやることがいっぱいあった感じ。
KUSANAGIとは
仮想マシンイメージ
仮想マシンイメージとして無償で配布されており複数のクラウド、VPSにインストールできる。
イメージには下記が含まれる。
OS | CentOS7 | Linuxディストリビューションの一種 |
Webサーバ | nginx | 大量アクセスに強い |
Apache | 歴史長い | |
PHP | HHVM | PHPの上位互換(早いがテーマにより問題が出る) |
PHP7 | 新しいPHP(早い) | |
PHP5 | 古いPHP(遅い) | |
データベース | MariaDB | MySQLから派生した |
PostgreSQL | MariaDBとどっちが早いのか? | |
pgpool-II | PostgreSQLのユーティリティ | |
その他 | WordPress 最新版 | KUSANAGI 専用プラグイン同梱 |
Ruby | ||
Ruby on Rails |
WordPressを動かすにはOS,Webサーバ,PHP,データベースが必要だが、KUSANAGIのイメージで構築すると上記の環境を手間なく構築することができる。
例えばWebサーバなら2種類入っているので好みのWebサーバを選択できる。
また次の「KUSANAGIコマンド」で簡単に切り替えることができる。
KUSANAGIコマンド
KUSANAGIにはWordPress環境を構築するのに便利な「KUSANAGIコマンド」も含まれる。
このコマンド群が非常に便利。
例えば、WordPressをSSL化するなら下記コマンドを使用する。
kusanagi ssl –email john@example.com saya
証明書発行、証明書適用、証明書自動更新、WordPressのURL変更などをこのコマンドだけで行ってくれる。
KUSANAGI for さくらのVPS でマルチサイトを構築
大まかな流れ
「さくらのVPS」を契約
↓
「KUSANAGI for さくらのVPS」のインストール
↓
KUSANAGIの初期設定
ーーーー↑ココまでは1回だけ実行ーーーー
ーーーー↓ココからはドメインごとに複数回実行ーーーー
旧WordPressからエクスポート
↓
KUSANAGIのプロビジョニング
↓
新WordPressにインポート
↓
ネームサーバ変更
↓
SSL化
KUSANAGIの初期設定とプロビジョニングについて
公式ドキュメントだけではわかりにくいが図にするとこんな感じ。
初期設定とは
VPS(仮想サーバ)にOSをインストールし、WordPressに必要な環境を構築するのが「KUSANAGIの初期設定」
この時にWordPressで使用するWEBサーバ、PHPのバージョン、データベースも選択する(後から変更も可能)
プロビジョニングとは
KUSANAGIの上で動作するWordPressを構築するのが「KUSANAGIのプロビジョニング」。一つのKUSANAGIの上にドメインごとに複数のWordPressを構築することができる。
WordPressはKUSANAGIの上で動作するのでPHP、WEBサーバ、データベースは共通となる。
例えばAAA.comはPHP5.6,BBBはHHVM などという運用はできない。
「さくらのVPS」を契約
- 1サイトなら1GプランでOK。
- 〜2サイトなら2Gプラン。
- 3サイト〜なら4Gプラン以上がオススメ
「KUSANAGI for さくらのVPS」のインストール
とっても簡単。3分で終わる。
kusanagi.tokyo
【事前に決めておくこと】
- rootユーザーのパスワード
半角英数、半角記号の=+/.,-_の組み合わせで8〜32文字で設定してください。
KUSANAGIの初期設定
こちらも公式サイトの手順通りでOK
kusanagi.tokyo
サーバにはSSHで接続する。
【事前に決めておくこと】
- kusanagiユーザーのパスワード
- MySQL(MariaDB)のrootパスワード
なおMroongaはインストールしなくてもOK
旧WordPressからエクスポート
データの移行はWordPressプラグイン「All-in-One WP Migration」を使用する。
旧WordPressにAll-in-One WP Migrationインストール→有効化→エクスポート
エクスポートしたデータが512MBを超えるようであればメディアを除外して再エクスポートしておく。
KUSANAGIのプロビジョニング
KUSANAGIのプロビジョニング とは WordPressのインストール のこと。
複数ドメイン型のマルチサイトであればプロビジョニングをドメインごとに行う。
【確認・決めておくこと】
- 旧WowdPress実行環境のPHPバージョン
- 仮データベース名
- 仮データベースのユーザー名
- 仮データベースユーザーのパスワード
- 仮WordPressユーザー名
- 仮WordPressユーザーのパスワード
- 仮WordPressサイト名
- ドメイン名
- プロビジョニングのプロファイル名 ←なんでもOK。ドメインの「.com」などを除いたドメイン名でOK
「仮」はインストール用。
移行後は旧WordPressの設定が復元される。
PHPバージョン変更
旧WowdPress実行環境にPHPのバージョンを合わせる
使用するコマンドは下記のいずれか。
- kusanagi hhvm
- kusanagi php7
- kusanagi php-fpm ←PHP5
WordPressインストール
下記の手順でOK
kusanagi.tokyo
コマンドは下記
kusanagi provision [プロファイル名]
オプション無しで実行すると対話式でインストールされる。
移行の場合、WooCommerceは不要。
インストール後はWordPressにログインして作業するためHostsファイルを書き換えてWordPressの初期設定を行う。
hosts – Wikipedia
WordpPressの初期設定が終わったら下記を行う。
2.wp-config.phpにFTPパスワードを記載
SFTPアプリなどを使いwp-config.phpにFTPパスワードを設定する。
/home/kusanagi/[プロファイル名]/DocumentRoot/wp-config.php
84行目。コメントアウトを外しKUSANAGIのパスワードを追記
3.All-in-One WP Migrationインストール
4.所有権とパーミッションの一時的な変更
以降のコマンドは各プロファイルのディレクトリから実行するものとする。
cd /home/kusanagi/[プロファイル名]
chmod 777 -R DocumentRoot
chown httpd.www -R DocumentRoot
5.インポート
All-in-One WP Migration無料版では512MBまでしかインポートできない。
その場合は無制限版を購入するか、メディア以外のデータをエクスポート→インポートし、メディアは手動で移動させる。
インポート完了後、「Permalinks Settings」をクリックするとパーマリンク設定画面に遷移するので「保存」を2回押す。
再ログインは旧サイトのユーザーとパスワードでOK。
6.所有権とパーミッションをKUSANAGI推奨設定へ
ダッシュボードでセキュリティ警告が確認できる。
- DocumentRoot以下をkusanagi.kusanagi
chown kusanagi.kusanagi -R DocumentRoot
- wp-content/uploads以下をhttpd.www
chown httpd.www -R DocumentRoot/wp-content/uploads
- ファイル:0644、ディレクトリ:0755に変更
find DocumentRoot -type d -exec chmod 755 {} \;
find DocumentRoot -type f -exec chmod 644 {} \;
- その他 KUSANAGI推奨設定
chown kusanagi:kusanagi DocumentRoot/wp-content/uploads/.htaccess
chown kusanagi:kusanagi DocumentRoot/wp-content/mu-plugins
chown httpd:www DocumentRoot/wp-content/replace-class.php
chown httpd:www DocumentRoot/wp-content/translate-accelerator
chown httpd:www DocumentRoot/wp-content/advanced-cache.php
- 公開ディレクトリにwp-config.phpが存在しています。wp-config.phpをDocumentRootディレクトリの上に移動させて安全性を向上させてください。→ 一つ上に移動
mv DocumentRoot/wp-config.php wp-config.php
- wp-config.php ファイルの権限は 777 です、推奨ファイル権限は 440 です。
chmod 440 wp-config.php
- wp-config.php ファイルのオーナーは httpd.www です、推奨ファイルオーナーは kusanagi.www です。
chown kusanagi.www wp-config.php
ダッシュボードをリロードすると警告が消えているはず。
一連のコマンドを連続で実行するなら下記。
chown kusanagi.kusanagi -R DocumentRoot && chown httpd.www -R DocumentRoot/wp-content/uploads && find DocumentRoot -type d -exec chmod 755 {} \; && find DocumentRoot -type f -exec chmod 644 {} \; && chown kusanagi:kusanagi DocumentRoot/wp-content/uploads/.htaccess && chown kusanagi:kusanagi DocumentRoot/wp-content/mu-plugins && chown httpd:www DocumentRoot/wp-content/replace-class.php && chown httpd:www DocumentRoot/wp-content/translate-accelerator && chown httpd:www DocumentRoot/wp-content/advanced-cache.php && mv DocumentRoot/wp-config.php wp-config.php && chmod 440 wp-config.php && chown kusanagi.www wp-config.php
またbcacheを有効にする場合は下記のコマンドを実行
kusanagi bcache on
7.All-in-One WP Migrationを削除
ネームサーバを変更
Hosts環境で十分にテストを行う。
問題なければ旧サーバに向いているネームサーバを新サーバに向ける。
SSL化
SSL化が不要であればスキップ。
下記のコマンドでSSL証明書の発行+WordPressの設定+DB内のリンク書き換え+証明書の自動更新を一度に行う。
kusanagi ssl –email (自分のメールアドレス) (プロファイル名)
DB内の文字を修正
wp search-replace –path=/home/kusanagi/{プロファイル名}/DocumentRoot ‘http://example.com’ ‘https://example.com’ –dry-run
dry-runで調査。置換実行時はdry-runを外す。
http,httpsの統一
デフォルトではhttp,httpsそれぞれのWebページが表示されてしまう。
httpでアクセスが来たらhttpsにリダイレクトするようにするKUSANAGIコマンドが用意されている
kusanagi ssl –https redirect
HSTSの設定
リダイレクトでは次にアクセスがあった場合もhttpでのアクセスになる。
HSTSを設定していると次回以降HTTPの代わりにHTTPSを使うようにWebブラウザに通知する。
kusanagi ssl –hsts on
ただし公式ドキュメントでは[off,weak.mid,high]となっているがoff以外はエラーになる。
ソース(/usr/lib/kusanagi/lib/ssl.sh)を見ると[on,off]しかない。バグか?
onにするとレスポンスヘッダに下記が追記される。
Strict-Transport-Security ‘max-age=31536000; includeSubDomains;preload;’ always;
公式ドキュメントのhighに当たる設定と思われる。
wwwあり・なしの統一
wwwあり・なしの統一はサーバーの設定ファイルを直接編集する。
今回はnginx使用時の変更方法で解説。
/etc/nginx/conf.d/[プロビジョニング名]_ssl.conf を編集
#=======================================
# [プロビジョニング名] SSL
#—————————————↑このすぐ下に↓を追記する
server {
listen 443 ssl http2;
server_name www.[ドメイン名];
rewrite ^ https://[ドメイン名]$request_uri?;
}
下記コマンドで設定を反映する。
kusanagi nginx
httpへのアクセスが有るとhstsによりhttpsにリダイレクトされる。
リダイレクトされたら上記の設定によりwww付きはwwwなしに再リダイレクトされる。
リダイレクト状況は下記で確認できる。
リダイレクトチェック|SEOツール【ohotuku.jp】
正しく設定されていればhttp://www.ドメインでアクセスするとhttps://ドメインが開かれる
その他注意事項
HHVM+bcache onで不具合発生
ページが真っ白になる不具合が発生したのでPHP7で運用している。
原因わからず。
「HHVM+bcache off」ならOK。
「PHP7+bcache on」でもOK。
HHVMとWordPressは今後問題が頻発しそうなのでPHP7で運用していく。
[KUSANAGI(WordPress)関連] 高速化のためにHHVMを使い続けるのは危険!今すぐPHP7を使うべき理由!
さくらのVPSお試し期間中の制限
その他やっておいたほうが良い設定
hhvmのログファイル制限
hhvmのログファイルが肥大化しディスクを圧迫することがある。
52日保存から7日変更
/etc/logrotate.d/hhvmd
1 /var/log/hhvmd/*log {
2 daily
3 rotate 7 #ココを52から7に変更
4 missingok
5 notifempty
6 compress
7 delaycompress
8 sharedscripts
9 copytruncate
10 }
設定反映
logrotate /etc/logrotate.conf
PHPの互換確認
KUSANAGIの効果を享受するにはHHVMかPHP7を選択する必要がある。
ただ今回移行した1サイトに使っていたテーマがPHP5でしか動作なかった。
事前に互換性チェックをしておくほうが良い。
こちらのプラグインを使うと確認できる。
ja.wordpress.org
セキュリティ設定
kusanagiユーザーによる鍵認証のみにする。
SSH設定
設定ファイル:/etc/ssh/sshd_config
反映:systemctl restart sshd.service
- SSHポートの変更 → Port [任意のポート番号]
- SSHプロトコル変更 → Protocol 2
- rootでのログイン拒否 → PermitRootLogin no
- 公開鍵認証の許可 → PubkeyAuthentication yes
- パスワード認証の拒否 → PasswordAuthentication no
Firewall設定変更
SSHポートが22に設定されているのでに[任意のポート番号]に変更する。
設定ファイル:/usr/lib/firewalld/services/ssh.xml
コレは変更しちゃダメ。モジュールアップデートで上書きされてしまう。
「/etc/firewalld/services」にコピーしてから編集する。
>>>Kusanagiをyum updateしたらSSHログインできなくなったときの対処法
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml
設定ファイル:/etc/firewalld/services/ssh.xml
反映:firewall-cmd –reload
確認:firewall-cmd –list-all –permanent
鍵認証でSSH接続する
MACの場合
- 秘密鍵をダウンロードする:/root/kusanagi.pem
- pemファイルを「~/.ssh」に置く
- アクセス権変更:chmod 400 ~/.ssh/kusanagi.pem
- SSHで接続する:ssh -i “~/.ssh/kusanagi.pem” -p [任意のポート番号] kusanagi@[VPSのIPアドレス]
monitによる死活管理&通知
イメージバックアップ
OSの全体をISOイメージとして外部にバックアップする。
ただMondo Rescueを使ったイメージバックアップ→リストアに激ハマりしたので諦めた。
別のバックアップ方法を検討中
まとめ
VPSなので環境構築に時間がかかる。
それでもKUSNAGIコマンドがあるのでかなり楽。
全体的に高速化し、管理画面も激速になったので大満足。
これでMFI対策もバッチリ。
といいたいところだけどメインサイトのモバイルファーストインデックス有効通知が来ない。。。
メイン以外は有効化されてるんだけどなぜ?
【関連記事】
>>>【最強のWordPress高速化】KUSANAGI for さくらのVPS にMixHostから移行する