ぼっちサーファーのブログ

一人海外サーフトリップの記録と雑記

複数のWordPressをKUSANAGI for さくらのVPSに移行する手順 まとめ

2018/6/6〜25までバリ島一人サーフトリップの記録

リアルタイム更新の記事はこちら

さくらのVPSにKUSANAGI環境の複数ドメイン型WordPressを構築し「さくらのレンタルサーバー」と「MixHost」で運用している計6サイトを移行した。
f:id:Apps:20180910100653j:plain

ssl → ssl:3サイト
非ssl → 非sslで移行 → 後にSSL化:3サイト


さくらのVPS 2Gプランで検証。


OSのインストールを3回。
KUSANAGI環境下でのWordPressの構築はテストなどを含め15回以上行った。


4サイト移行した時点で2Gプランではメモリが不足しそうだったので4Gプランで再構築。


日本語ドメインでも問題なく移行できた。
SSL化も複数のパターンで実施し、色々知識がついたので記しておく。




【関連記事】
www.lonely-surfer.com







移行前後のPageSpeed

サイトA http → https

1万PV/月程度
最適化も何もしてなかったサイトだったので改善効果は大きい。

さくらのレンタルサーバ(スタンダード)
f:id:Apps:20180917064136j:plain

さくらのVPS(4G)
f:id:Apps:20180917064140j:plain

サイトB https → https

10万PV/月程度。
MixHost(512MB)からさくらのVPS(4G)へ移行。
もともとできる限り高速化していたので大きな変化はなかった。
f:id:Apps:20180917104542j:plain

ただ体感速度はかなりアップしている。
GTmetrixで比較すれば差が出たのかもしれない。


サイトC https → https

1000PV/月程度。
知り合いの中小企業サイト。
もともとあったサイトの管理だけを受託している。
パソコン「2」ってwww

さくらのレンタルサーバ(スタンダード)
f:id:Apps:20180917105135j:plain

さくらのVPS(4G)
f:id:Apps:20180917105227j:plain


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コマンド」も含まれる。

KUSANAGIコマンド – 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の初期設定」
f:id:Apps:20180913231136p:plain
この時にWordPressで使用するWEBサーバ、PHPのバージョン、データベースも選択する(後から変更も可能)

プロビジョニングとは

KUSANAGIの上で動作するWordPressを構築するのが「KUSANAGIのプロビジョニング」。一つのKUSANAGIの上にドメインごとに複数のWordPressを構築することができる。
f:id:Apps:20180913232122p:plain

WordPressはKUSANAGIの上で動作するのでPHP、WEBサーバ、データベースは共通となる。
例えばAAA.comはPHP5.6,BBBはHHVM などという運用はできない。





「さくらのVPS」を契約

vps.sakura.ad.jp

  • 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インストール→有効化→エクスポート
f:id:Apps:20180916152827p:plain
f:id:Apps:20180916153156p:plain

エクスポートしたデータが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のパスワードを追記
f:id:Apps:20180916152800p:plain


3.All-in-One WP Migrationインストール
f:id:Apps:20180916152827p:plain



4.所有権とパーミッションの一時的な変更
以降のコマンドは各プロファイルのディレクトリから実行するものとする。

cd /home/kusanagi/[プロファイル名]

chmod 777 -R DocumentRoot
chown httpd.www -R DocumentRoot

5.インポート
All-in-One WP Migration無料版では512MBまでしかインポートできない。
f:id:Apps:20180916162940p:plain
その場合は無制限版を購入するか、メディア以外のデータをエクスポート→インポートし、メディアは手動で移動させる。


インポート完了後、「Permalinks Settings」をクリックするとパーマリンク設定画面に遷移するので「保存」を2回押す。
f:id:Apps:20180916153235p:plain

再ログインは旧サイトのユーザーとパスワードでOK。



6.所有権とパーミッションをKUSANAGI推奨設定へ
ダッシュボードでセキュリティ警告が確認できる。
f:id:Apps:20180916154839p:plain

  • 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


ダッシュボードをリロードすると警告が消えているはず。
f:id:Apps:20180916154827p:plain



一連のコマンドを連続で実行するなら下記。

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 (自分のメールアドレス) (プロファイル名)

PHPファイル等のHTTP → HTTPSを修正

find ../ -name '*.php' | xargs grep 'http://ドメイン名'

見つかった箇所のリンクを修正する。

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

f:id:Apps:20180917164241j:plain

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」にコピーしてから編集する。
www.lonely-surfer.com

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による死活管理&通知

column.prime-strategy.co.jp

イメージバックアップ

OSの全体をISOイメージとして外部にバックアップする。

参考
qiita.com

ただMondo Rescueを使ったイメージバックアップ→リストアに激ハマりしたので諦めた。
別のバックアップ方法を検討中

まとめ

VPSなので環境構築に時間がかかる。
それでもKUSNAGIコマンドがあるのでかなり楽。

全体的に高速化し、管理画面も激速になったので大満足。
これでMFI対策もバッチリ。

といいたいところだけどメインサイトのモバイルファーストインデックス有効通知が来ない。。。

メイン以外は有効化されてるんだけどなぜ?


【関連記事】
www.lonely-surfer.com