WordPressの表示高速化によく利用されるHHVMですが、安定稼働させるにはある程度のメモリ容量が必要になります。使いたいのはやまやまですが、このブログのようにあんまりPVが多くない場合、メモリが多いサーバを使うのはもったいない気がします。
というわけで、さくらのVPSの512MプランでHHVMを利用するために試行錯誤してみました。
この記事は「WordPress Advent Calendar 2015に参加したかった人達の Advent Calendar 2015」の12/12のエントリーです。
まずはHHVMとNginxをインストール
CentOS7にHHVMとNginxをインストールします。インストールの方法は割愛。いろんなブログエントリーがあると思うので検索してみてください。yumでインストールできるようにするサードパーティのレポジトリもあるので、それを利用するのが楽かなー。
ここで、NginxとHHVMで動かしてみたわけですが、メモリ周りの調整がシビアでよく落ちる(´・ω・`)
いろいろ試したら、管理画面での操作の処理で落ちることが多い感じでした。
代替策を考える
動くことは確認できたので、安定性を確保したい。せめて月1メンテくらいで済むようにできれば使えるかなと。
管理画面での処理をなんとかすれば、表示閲覧はHHVMの恩恵を受けられるわけなので代替策を考えました。
で、思いついたのが管理画面をphp-fpmで処理させ、サイト表示部分だけをHHVMで処理するという方法。というわけで、試してみました。
設定してみる
設定ファイルの一部を掲載しますが、これだけじゃ動かないのでいろいろやってみてくださいね(ΦωΦ)
user nginx nginx; pid /run/nginx.pid; worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 1024; multi_accept on; use epoll; } http { server_tokens off; sendfile off; # tcp_nopush on; # tcp_nodelay on; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; keepalive_timeout 300; client_header_timeout 300; client_body_timeout 300; reset_timedout_connection on; send_timeout 300; client_max_body_size 64m; default_type text/html; charset UTF-8; index index.php index.html index.htm; include mime.types; include proxy.conf; include sites-enabled/*; upstream hhvm { server 127.0.0.1:9000; } upstream backend { server 127.0.0.1:8000; } upstream php { server 127.0.0.1:9001; } upstream admin { server 127.0.0.1:8001; } }
server { listen 80; server_name example.com; root /var/www; include conf.d/wp-proxy.conf; } server { listen 8000; server_name example.com; root /var/www; include conf.d/restrictions.conf; include conf.d/wp-hhvm.conf; } server { listen 8001; server_name example.com; root /var/www; include conf.d/restrictions.conf; include conf.d/wp-php.conf; }
まず、プロキシで/wp-adminへのアクセスをポート8001に、それ以外をポート8000に流すように設定。
hhvmはfastcgiモードで動かし、ポート8000の方のアクセスの場合に利用するように設定。
php-fpmはポート8001のアクセスの場合に利用するように設定。
あとは、それぞれがNginxで安定して動くようにメモリ周りの設定を適宜変更すればOK。とりあえず動くようになりました。記事公開時はこの構成で動いてますよ(・∀・)
まとめ
まぁはっきり言っておすすめはしません。
これでもたまに落ちるので、安定稼働させたい場合はメモリ多いサーバにするか、別の構成を考えましょう。最近PHP7もリリースされましたしー。
データベースの方の最適化も行えばもっと早くなるかなとは思うので、もうちっと手を入れてみようかなと思います。先にPHP7にしてしまうかもしれませんがー( ˘ω˘)
こんなこともできるという一例として記憶の片隅にでもおいておいていただければいいかなーと思います。
では、ヾ(・д・。)マタネー♪