EC2でPHP7+nginx+wordpress

しばらく前に気付きながら、時間もなかったので試せていなかった、php7 on ec2環境。

確認しないままだと今後のサーバ構築で検討できないなぁ、、軽く試してみました。

 

一応確認

# yum list | grep php
php7-pear.noarch                      1:1.10.1-1.24.amzn1           amzn-updates
php70.x86_64                          7.0.14-1.20.amzn1             amzn-updates
php70-bcmath.x86_64                   7.0.14-1.20.amzn1             amzn-updates
php70-cli.x86_64                      7.0.14-1.20.amzn1             amzn-updates
php70-common.x86_64                   7.0.14-1.20.amzn1             amzn-updates
php70-dba.x86_64                      7.0.14-1.20.amzn1             amzn-updates
php70-dbg.x86_64                      7.0.14-1.20.amzn1             amzn-updates
php70-devel.x86_64                    7.0.14-1.20.amzn1             amzn-updates
php70-embedded.x86_64                 7.0.14-1.20.amzn1             amzn-updates
php70-enchant.x86_64                  7.0.14-1.20.amzn1             amzn-updates
php70-fpm.x86_64                      7.0.14-1.20.amzn1             amzn-updates
php70-gd.x86_64                       7.0.14-1.20.amzn1             amzn-updates
php70-gmp.x86_64                      7.0.14-1.20.amzn1             amzn-updates
php70-imap.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-intl.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-json.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-ldap.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-mbstring.x86_64                 7.0.14-1.20.amzn1             amzn-updates
php70-mcrypt.x86_64                   7.0.14-1.20.amzn1             amzn-updates
php70-mysqlnd.x86_64                  7.0.14-1.20.amzn1             amzn-updates
php70-odbc.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-opcache.x86_64                  7.0.14-1.20.amzn1             amzn-updates
php70-pdo.x86_64                      7.0.14-1.20.amzn1             amzn-updates
php70-pdo-dblib.x86_64                7.0.14-1.20.amzn1             amzn-updates
php70-pecl-apcu.x86_64                5.1.5-2.2.amzn1               amzn-main   
php70-pecl-apcu-devel.x86_64          5.1.5-2.2.amzn1               amzn-main   
php70-pecl-igbinary.x86_64            1.2.2-0.1.20151217git2b7c703.5.amzn1
php70-pecl-igbinary-devel.x86_64      1.2.2-0.1.20151217git2b7c703.5.amzn1
php70-pecl-imagick.x86_64             3.4.2-1.4.amzn1               amzn-main   
php70-pecl-imagick-devel.x86_64       3.4.2-1.4.amzn1               amzn-main   
php70-pecl-memcache.x86_64            3.0.9-0.4.20160311git4991c2f.8.amzn1
php70-pecl-memcached.x86_64           3.0.0-0.1.20160217git6ace07d.2.amzn1
php70-pecl-oauth.x86_64               2.0.2-1.2.amzn1               amzn-main   
php70-pecl-ssh2.x86_64                1.0-5.16.amzn1                amzn-main   
php70-pecl-uuid.x86_64                1.0.4-7.1.amzn1               amzn-main   
php70-pecl-yaml.x86_64                2.0.0-1RC8.3.amzn1            amzn-main   
php70-pgsql.x86_64                    7.0.14-1.20.amzn1             amzn-updates
php70-process.x86_64                  7.0.14-1.20.amzn1             amzn-updates
php70-pspell.x86_64                   7.0.14-1.20.amzn1             amzn-updates
php70-recode.x86_64                   7.0.14-1.20.amzn1             amzn-updates
php70-snmp.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-soap.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-tidy.x86_64                     7.0.14-1.20.amzn1             amzn-updates
php70-xml.x86_64                      7.0.14-1.20.amzn1             amzn-updates
php70-xmlrpc.x86_64                   7.0.14-1.20.amzn1             amzn-updates
php70-zip.x86_64                      7.0.14-1.20.amzn1             amzn-updates

ずらっと、、php7系のパッケージが準備されています。とりあえずいれてみます。

 

インストール

# yum install php70.x86_64 php70-xml.x86_64 php70-cli.x86_64 php70-common.x86_64 php70-fpm.x86_64 php70-mbstring.x86_64 php70-mcrypt.x86_64  php70-gd.x86_64 php70-pdo.x86_64 php70-mysqlnd.x86_64
# yum install mysql56-server.x86_64
# yum install nginx

これで一応ミドルウェアのインストールは完了です。続けて、とりあえず最低限のセットアップ

 

セットアップ

# service mysql start
# mysql
mysql > create database hoge default charset utf8;
mysql > GRANT ALL ON hoge.* TO hogeuser@'localhost' identified by 'password';
# service nginx start

AWSのmicroインスタンスでは、php-fpmのmax_childrenのデフォルトが50になっています。この状態でapache benchをかけると、いろいろ影響するため、少しだけ調整

/etc/php-fpm.d/www.confを編集
pm.max_children = 12
pm.start_servers = 7
pm.min_spare_servers = 4
pm.max_spare_servers = 10

# service php-fpm start

あとは、、コンテンツの準備ですが、今回は試しだったので、すでに動作している環境から、mysqldumpとtarを使ってデータをまるっとコピーして動作させてみました。

 

確認

準備できた段階でアクセスしてみると、、無事動作しました。大きな問題もでていないように見えます(あくまで、ざっくり)。

abをかけてみると、、あくまで参考値ですがRequests per secondが、php56+nginxだと、3.1ぐらいだったのが、php7+nginxだと3.6ぐらいでてました(両環境ともEC2インスタンスCPUについては/proc/cpuinfo上同じもので、またphp-fpmの同時動作数ぐらいしか調整していません)。

結果、、ざっくり15%ぐらい性能向上した・・・ように見えますね+すでにphp7が使えるという状況なのが今後の保守を考えると嬉しいです。
AWSでphp系を動作させる場合は7導入を考えてよい時期になってますので、ご参考まで。

(2017.03.11での情報です)