超高速WordPress仮想マシンKUSANAGI
『KUSANAGI』とは、標準のLAMP環境に比べておよそ10倍~15倍の実行速度でWordPressを動作させることが可能という高速WordPress実行環境です。
高速化の為の各種チューニングが施された状態でパッケージされています。高速化の為の各種施策については以下を参照ください。
今回、EC2のLAMP環境(Amazon Linux)で稼働しているWordpressサイトをKUSANAGI環境へ移設するため、KUSANAGI for AWS にて環境構築を行います。
KUSANAGI for AWS AMI からインスタンス作成
AWSのEC2コンソール画面で「インスタンスの作成」ボタンを押して、Amazonマシンイメージ(AMI)の選択画面を開きます。
AWS Marketplace で「KUSANAGI」で検索すると以下のKUSANAGIのAMIがでてきます。
こちらを選択してインスタンスを作成します。これ以降は通常のEC2インスタンス作成と同様の手順でインスタンス「起動」まで行います。
「インスタンスの表示」を押してインスタンス一覧が表示されたら、作成したインスタンスの「ステータスチェック」が合格になるまで待ちます。
ステータスチェックが合格になりインスタンスが起動したら、SSHでログインします。KUSANAGIインスタンスをプライベートサブネットに設置した場合は踏み台サーバを経由してアクセスします。
ログイン後、以下のコマンドでサーバ名を適宜変更します。
$ sudo hostnamectl set-hostname xxx01.xxx.com
KUSANAGIの初期設定を行う前に、まずCentOSやKUSANAGIシステムのアップデートを 以下のように yum を利用して行います。
$ sudo yum --enablerepo=remi,remi-php56 update -y
アップデートが終了したら、以下のコマンドで(1分後に)サーバを再起動します。(踏み台サーバ経由で接続しているので、再起動される前にKUSANAGIサーバからログアウトします)
$ sudo shutdown -r +1
KUSANAGIの初期設定
再度、ログインして root ユーザーに切替え、以下の手順でKUSANAGI環境の初期設定を行ないます。
初期設定の開始
以下のように入力してKUSANAGI仮想環境でのLinuxやデータベースなどの設定を行います。
# kusanagi init
上記コマンドの引数を省略すると、対話的に設定を進められます。
サーバのタイムゾーン設定
タイムゾーンの一覧が表示されるので、Asia/Tokyo を選択します。
Search or select timezone:
Asia/Tokyo
Applying Location: Asia/Tokyo.
ロケール設定
使用言語を設定します。日本語を選択します。
Select your using language.
1 : English 2 : 日本語
q : quit
Which are you using?: 2
キーボードタイプの設定
Select your keyboard layout.
1 : English 2 : Japanese
q : quit
Which are you using?: 2
ユーザーパスワードの設定
kusanagiユーザーのパスワードを設定します。
このユーザーは、Wordpress のアップデート、テーマアップデート、プラグインアップデートのユーザーとなります。KUSANAGIではセキュリティの為、Wordpress本体・テーマ・プラグインのオーナーをWebサーバでなくkusanagi ユーザーとして悪意あるファイルの書き換えを防いでいます。
そのため、Wordpress の管理画面でテーマのソースを編集できなくなりますが、安全のためには多少の不便は我慢しましょう。
kusanagi user password using in software update.
Changing password for user kusanagi. New password:
鍵認証の設定
ユーザーkusanagi のSSHユーザ鍵の作成を行います。
Generating public/private rsa key pair. Enter passphrase (empty for no passphrase):
公開鍵と秘密鍵は、/root に kusanagi.pem と kusanagi.pem.pub として生成されます。
MySQL rootパスワードの設定
Enter MySQL root password. Use [a-zA-Z0-9.!#%+_-] 8 characters minimum.
Webサーバの選択
起動するWebサーバをNGINX、httpd(Apache2) から選択します。
KUSANAGI can choose middlewares. Please tell me your web server option. 1) NGINX(Default) 2) Apache
Which you using?(1):
アプリケーションサーバの選択
起動するアプリケーションサーバをHHVM、PHP7、PHP-FPM(PHP5)から選択します。
※ HHVMだとどうも遅かったり、502 Bad Gateway が多発するので、php7 にしたらかなり高速で安定するようになりました。
Then, Please tell me your application server option.
1) HHVM(Default)
2) PHP7
3) PHP5
Which you using?(1):
以下のメッセージが表示されたら初期設定完了になります。
innodb_buffer_pool_size = ***M
query_cache_size = ***M
monit is already on. Nothing to do.
KUSANAGI initialization completed
Done.
innodb_buffer_pool_size と query_cache_size はインスタンスのメモリ容量により変動します。
今回はEc2内にDBを立てず、RDSを使いますのでRDSにこのパラメータを設定しますが、このままの値でなく、少し大き目の以下の値を設定して様子を見ます。
innodb_buffer_pool_size = 768M
query_cache_size = 192M
追記:
KUSANAGI環境をELB配下に配置する場合、nginx の keepalive_timeout をELB推奨の 120 に変更しておきます。
KUSANAGIのデフォルト設定では、keepalive_timeout が 5秒 になっているので、ELBとnginxの間でタイムアウトが発生してしまう可能性があります。
/etc/nginx/nginx.conf
http { ・ ・ #keepalive_timeout 5; keepalive_timeout 120; ・ ・
詳細は以下
続いてWordPressのプロビジョニングへ進みますが、プロビジョニング以降については以下の記事にて記載しておりますのでご参照ください。