サーバの構成をCentOS7+H2O+php-fpm(PHP7)にしてみた
最近H2Oというnginxよりも早いと言われているらしいWebサーバを知ったので、取り敢えず入れてみました。
またコレを機に、HHVMよりも早くなったらしいPHP7も気になっていたので、そちらも入れてみました。今のところWordPressは動いているみたいです。
ちなみにCentOS7です。
目次
H2Oの用意
H2Oのインストール
「Development Tools」をインストールしておけば、わりとサクッとインストール出来るようです。後は依存パッケージをインストール。
yum groupinstall "Development Tools"
yum install cmake
yum --enablerepo=rpmforge install libyaml-devel
H2OのソースはGitHubに公開されているので、Gitで取得。cmake, make, make installでインストールします。
git clone https://github.com/kazuho/h2o.git
cd h2o
git submodule update --init --recursive
cmake .
make h2o
make install
まだ、足りないパッケージがありました。
yum install libssl-dev
yum install openssl-devel
make installで完了です。
make install
H2Oの設定
適当な場所にH2Oの設定ファイルを記述します。
vi /path/to/h2o.conf
WordPress向けに書いた記述はこんな感じ。HTTP/2の仕様的にはSSL通信じゃなくなっても良くなったそうなのですが、まだブラウザ側で制限があるようなので、SSL向けの設定になっています。
pid-file: /path/to/h2o.pid
user: nobody
error-log: /path/to/error.log
listen: 80
listen:
port: 443
ssl:
certificate-file: /path/to/ssl.pem # SSLのサーバ証明書+中間証明書
key-file: /path/to/ssl.key # SSLの秘密鍵
# PHPの設定
file.custom-handler:
extension: .php
fastcgi.connect:
host: 127.0.0.1
port: 9000
type: tcp
# ディレクトリインデックス
file.index: [ 'index.php', 'index.html' ]
# ドメイン設定
hosts:
# HTTP/2を使いたかったのでHTTPSにリダイレクトしてSSL通信に統一
"example.net:80":
paths:
/:
redirect:
status: 301
url: https://example.net/
"example.net:443":
access-log: /path/to/access.log
paths:
/:
# 公開ディレクトリの指定
file.dir: /path/to/httpdocs
file.dirlisting: on
# file.dirに見つからなければindex.phpで受け取る
redirect:
url: /index.php/
internal: YES
status: 307
結構短く書けてますね。
また、SSLはStartSSLを利用させて頂きました。
H2Oの起動・停止
マニュアルに書いてある方法を参照させて頂きました。
# 起動(-cオプションには設定ファイルのパスを指定する)
h2o -m daemon -c /path/to/h2o.conf
# 停止(設定ファイルに記述したpid-fileのパスを指定する)
kill -TERM `cat /path/to/h2o.pid`
取り敢えずこれでH2O+PHPの環境が整いました。また、SSLで接続するとちゃんとHTTP/2で通信してくれます。(このブログもHTTP/2になっている…はず…)
PHP7をphpenv+php-buildでインストール
どうせなので、phpenvとphp-buildを使ってPHPをインストールしてみました。
phpenvのインストール
phpenvもGitHubに公開されていますので、Gitで取得します。また、インストール用のシェルスクリプトが用意されていますので、そのまま実行。
git clone https://github.com/CHH/phpenv.git
cd phpenv/bin/
sh phpenv-install.sh
パスを通して完了です。
export PATH="/root/.phpenv/bin:$PATH"
eval "$(phpenv init -)"
source ~/.bashrc
php-buildのインストール
同様に、php-buildもGitHubで公開され、インストール用のシェルスクリプトが用意されています。便利便利。
git clone https://github.com/CHH/php-build.git
cd php-build/
sh install.sh
php-buildでPHP7をインストール
php-buildでインストール出来るバージョンの一覧を見てみます。
php-build --definitions
## 略
5.6.5
5.6.6
5.6.7
5.6.8
5.6.9
5.6snapshot
7.0.0alpha1
7.0.0alpha2
master
7.0.0alphaがあるので利用させて頂きました。
php-build 7.0.0alpha2 ~/.phpenv/versions/7.0.0alpha2
が、依存パッケージがことごとく入っていないので頑張ります。
取り敢えず必要らしいパッケージを一気にインストール。
yum install libxml2-devel bison bison-devel openssl-devel curl-devel libjpeg-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel
re2cをソースからインストール。
wget http://sourceforge.net/projects/re2c/files/re2c/0.14.3/re2c-0.14.3.tar.gz
tar zxvf re2c-0.14.3.tar.gz
cd re2c-0.14.3
./configure
make make install
libmcryptも足りない。
yum install --enablerepo=epel libmcrypt libmcrypt-devel
libtidyも足りない。
yum install --enablerepo=epel libtidy libtidy-devel
ここまでインストールして入りました。
php-build 7.0.0alpha2 ~/.phpenv/versions/7.0.0alpha2
PHP7でphp-fpmを設定・起動
php-buildでインストールしたPHPの設定ファイルをいじって、実行します。(既にphp-fpmを起動している場合は停止する必要があります)
# php.iniを更新
vi ~/.phpenv/versions/7.0.0alpha2/etc/php.ini
# php-fpm.confを更新
cp ~/.phpenv/versions/7.0.0alpha2/etc/php-fpm.conf.default ~/.phpenv/versions/7.0.0alpha2/etc/php-fpm.conf
vi ~/.phpenv/versions/7.0.0alpha2/etc/php-fpm.conf
# php-fpm.d/www.confも更新
vi ~/.phpenv/versions/7.0.0alpha2/etc/php-fpm.d/www.conf
# php-fpmを実行
~/.phpenv/versions/7.0.0alpha2/sbin/php-fpm &
雑感
思っていたよりも設定内容は少なくかけることにビックリました。なにもチューニングしていなくても、それなりの速度が出るそうです。
Apacheやnginxと繋げて、リバースプロキシ部分だけをH2Oを使う、と言った方法を取っても良いそうなのですが、そこまでの知識は無いので、取り敢えずH2O単体で、リバースプロキシも無しです。(なしですよね?)
HTTP/2も名前だけ知っており、簡単には使えないんだろうなぁ、と思っていたらサクッと動いたのでビックリしました。HTTP/2らしさはあんまりまだありませんが、環境が整っただけでも取り敢えず良しとしておきます。
あと、SSLにしたので、はてブのAPI取得出来なくなりました。SSL対応してくれないかなぁ…。