WordPressをHTTP/2+HHVMで動かす環境をdocker-composeで構築してみた

TL;DR

このリポジトリclone して docker-compose up -d して下さい (要 バージョン 1.6.0 以上 )。 その後 open "https://$(docker-machine ip default)" すると、ブラウザでWordPressが立ち上がります。

デモ

動機

WordPressをHHVMで動かしたら超速くなった!やったぜ!!という記事はをよく見るのだけれど、 具体的にどうやって構築しているのか解説している記事があんまり無かったので、実際にやってみることにしました。

ついでに、HTTP/2で提供出来るとイケてる気がしたので、併せて対応してみることにします。

HHVM

HHVM

HHVM は、Facebookがオープンソースとして開発している仮想実行環境で、 PHPHack を動かすための環境らしいです。

まぁ、個人的にはHackもHHVMも すごいPHP ぐらいの認識しかありませんが…。 Hackは言語的にすごくて、HHVMは実行環境がすごい。今回用があるのはHHVMだけです。

HTTP/2

HTTP/2 は… すごいHTTP です。

HTTP/1.xとの互換性を保ちつつ、効率化したもののようです。ヘッダの圧縮とか、リクエストの多重化とか。 RFC7540 日本語訳日本語のFAQ もあります。 自分は全然見てないけれど…必要になったら読みます。

とにかく、このプロトコルで配信するだけでより効率的でより早くなる、ということです。

HTTP/2 の実装

nginx の1.9.5からHTTP/2をサポートしているようです1公式Dockerリポジトリ で配信されている最新イメージでもちゃんとサポートされていました。

他にも Apache HTTP Server 2.4.17+DeNAH2O など 色々ある ようです。

今回はApacheよりは速かろうというのと、WordPress稼動の実例も多いことから、nginxを選択しました。適当。

構成

リライトルールとか複雑なリクエスト制御が不要なら、 HHVMに組込みのWebサーバーがあるのでそれを使うのが簡単だし、速度面でも問題なさそうです。

ただ、WordPressでパーマリンクを利用する場合はURLのリライトが必須です。

HHVMでもバーチャルホスト切ってリライトの設定するとか出来るみたいですが、 iniファイルに設定書いていくのは何だかしんどそうです。

他にもSSLとか静的ファイルの配信とか諸々考えると、餅は餅屋ということでリバースプロキシを立てた方がよさそうですね。

というわけで、リバースプロキシとして nginx を立てて、HHVMをFastCGIモードで起動してバックエンドとします。

今回はとにかくお手軽に手元で動かしてみたかったので、諸々Dockerで動かすことにしました。 雑に図解すると以下のような感じです:

構成図

FrontとかBackはDockerの ユーザー定義ネットワーク です。 Docker 1.10.0 で link に代わるものとして導入されたような気がします。 /etc/hosts じゃなくてDNSで名前解決出来るようになってて最高にハッピーですね。

FastCGIはUnixソケットで通信した方が速いと思うんですが、 今回は nginx と HHVM を別々のコンテナで動かすので、TCPで通信するようにしました。 同一システム上にFastCGIサーバとプロセスが稼動するって、実環境でもあんまり無いような気がするけど、どうなんだろう?

コンテナひとつひとつ立てていくのは辛いので、常套手段の docker-compose を使って作ります。

動かす

このリポジトリ に実際に稼動するものが置いてあります。 clone して docker-compose up -d すれば、HTTP/2でWordPressが動いている様子が確認出来ます。

nginxやHHVMの設定はほぼデフォルトのままいじってないので、本気で動かすなら細かいチューニングは必要です。 が、全体の構成は実環境でもこのようになると思います。

デモ

終わりに

以上で、お手軽に手元でHTTP/2+HHVMなWordPressを試すことが出来るようになりました。

あとは実環境へのデプロイだけなんですが、さてどうしたものか。 docker-compose.yml からいい感じにデプロイしてくれるような何か、ありませんかねぇ。


  1. HTTP/2 Supported with NGINX Open Source 1.9.5 | NGINX ↩︎

yewton
ソフトウェアエンジニア

父親兼エンジニア

comments powered by Disqus

関連項目