CentOS6.6でHHVMのFastCGIを使う (with Nginx)

Facebookが開発しているHHVMは既に大分有名になっているかと思いますがCentOS上でサービスとしてデーモン化することについて扱っている日本語記事が少ないようです。

インストールするところまで、単体でデーモンモードでコマンドラインから起動する方法は紹介されてましたがパッと見service(init.d)を使って起動しているものが見つかりません…Debian系だとか英語記事だとかだと結構あるみたいだけど…
とりあえず今回はHHVMのインストールからFastCGIでNginx鯖のバックエンドとして利用するまでの手順を書きます。(記憶を手さぐりに後からまとめているので抜けがあるかもしれません。もしあればコメント等から報告ください。)

yumでHHVMをインストール

これは多くの記事で紹介されてますね。

ちなみに私はImageMagick-lastを入れていたので競合してコケました。その他依存関係が色々アップデートされるかと思います。

参考:インストールログ

ServiceでHHVMを起動出来るように設定する

yumでインストールしたHHVMはデフォルトで/etc/init.d/hhvmがついてきていますが、このスクリプトは正常に動作せず、FastCGI用にはなっていないため設定ファイルを書き換えます。

今回はUnixドメインソケット/var/run/hhvm/hhvm.sockでListenするようにしています。事前に/var/run/hhvm/をnginx:nginxで作っておいてください。

まず/etc/init.d/hhvmを修正。編集例は次の通り

変更した行をハイライトしました。

次に/etc/hhvm/server.hdfをfastcgi用に修正します。

各設定についてはhttps://github.com/facebook/hhvm/wiki/INI-Settingsを参照。

また、合わせて/etc/hhvm/php.iniも設定。php-fpmで使っている設定を参考にすればいいはず。最低限

があればいいという話も。

Nginxのリバースプロクシを設定する

/etc/nginx/nginx.confのphp-fpmとかのupstreamを定義してる辺りに同様に書き足す。

あとは変更する各バーチャルホストのfastcgi_passをfastcgi_pass hhvm;にする。

※参考:Amimotoの場合バーチャルホスト毎に1か所とwp-singlesiteに1か所ある。php-fpmのWPと共存させる場合後者は複製して該当部分を変えたものを作ればいい。

アクセスしてみる

ここまでの設定がすんだら

で設定の反映、起動をする。エラーとかが出ててHHVMが起動出来ていないこともあるかと思うのでsudo service hhvm statusして起動していないようなら/var/log/hhvm/error.log辺りをチェック。

設定したバーチャルホストに実際にアクセスしてみて問題なくきどうしているようならばサービスの自動起動を設定しておく。

 問題点とか…

実際にこの手順を試したところ起動は出来るようになってPHPより早くはなったと思うんだけどMySQL辺りで文字化けが発生した。どうやら設定のMySQLの文字コードがちゃんと反映されてないっぽいけど実際にどのエンコードが使われてるかとかは未検証。後から追加するデータは問題無く表示できるように見えるがもちろんphpMyAdminとかで見てみると文字化けしていることが確認できる。

後日確認したところCentOS向けのbuildに何らかの問題があってutf8mb4との相性が悪い模様。Ubuntu,debian向け公式buildでは同問題は発生しないようです。
なお現在WordPressは対応環境ではutf8mb4を使う方向で開発されているようなので注意が必要かもしれません。utf8mb4非対応の古いバージョンのMySQLドライバでビルドされているためです。WordPress4.2ではこのような環境ではutf8mb3を使い続けるため使用に問題は無くなりました。他で配布されているHHVMについては未検証です。

「CentOS6.6でHHVMのFastCGIを使う (with Nginx)」への2件のフィードバック

コメントを残す