【CentOS】PHP5.6 → PHP7.0へアップデートする

Drupal7 では PHP 5.6 を使っていましたが、Drupal8 では 高速動作が期待できる PHP7を使いたいですね。
今回は、Vagrantで管理している CentOS6.7 の PHP をバージョンアップを行ったときのメモです。

##作業環境

- MAC OS X El Capitan
- Vagrant 1.7.4
- CentOS release 6.7 (Final)
- PHP 5.6.17（yum管理）  → PHP 7.0.11（ソースからインストール）
- Apache 2.4.23（yum管理）  → Apache 2.4.23（ソースからインストール）
- MySQL  5.6.33
- Drupal7/8

以上の CentOS6.7 環境下で、Apache 2.4、PHP5.6 はyumでパッケージ管理をしていましたが、新たにインストールする PHP7 はソースからインストールします。
合わせて mod_php と依存関係にある Apache 2.4 もソースからインストールし直しました。


##各種ライブラリをインストールする

PHP7 のコンパイルに必要なライブラリをあらかじめyumコマンドでインストールしておきます。

```
# yum install pcre-devel
# yum install libxml2-devel
# yum install openssl-devel
# yum install bzip2
# yum install bzip2-devel
# yum install libbz2
# yum install libbz2-dev
# yum install lbzip2-utils
# yum install lbzip2-devel
# yum install libssl-dev
# yum install curl-devel
# yum install db4-devel
# yum install libXpm-devel
# yum install gmp-devel
# yum install libc-client-devel
# yum install openldap-devel
# yum install postgresql-devel
# yum install aspell-devel
# yum install libxslt-devel
# yum install libxml2-devel
# yum install pcre-devel
# yum install t1lib-devel.x86_64
# yum install libmcrypt-devel.x86_64
# yum install libpng-devel
# yum install libjpeg-devel
# yum install libfreetype-dev
# yum install freetype-devel.x86_64
```

##Apache2.4をセットアップする

インストール済みのApacheをいったん削除して、新たにソースからインストールします。

まず、ソースファイルをダウンロードします。

Apache HTTP Server 2.4
http://httpd.apache.org/download.cgi#apache24

Apache2.4 では APR と APR-util が必要なのでこちらもダウンロードします。
http://apr.apache.org/download.cgi

ダウンロードファイルは、Vagrantマシン上の /vagrant に保存します。
（環境に合わせて任意の場所に保存して構いません）


##yumで管理されている Apache2.4 を削除する

```
# yum remove httpd24*
# rm -rf /opt/rh/httpd24/root/etc/httpd
# rm -rf /etc/httpd
```


##Apache2.4をソースからインストールする

```
# cd /vagrant
# tar -xjvf httpd-2.4.18.tar.bz2
# tar -xzvf apr-1.5.2.tar.gz
# cp -r apr-1.5.2 httpd-2.4.18/srclib/apr
# tar -xzvf apr-util-1.5.4.tar.gz
# cp -r apr-util-1.5.4 httpd-2.4.18/srclib/apr-util
# cd httpd-2.4.18
# ./configure
# make
# make install
```

###http.confファイルを編集する

```
# vim /usr/local/apache2/conf/httpd.conf
```

mod_rewriteのコメントアウトを外してロードできるようにします。

```
LoadModule rewrite_module modules/mod_rewrite.so
```

DirectoryIndexの設定行を見つけたら index.php を追加します。

```
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>
```


http.conf の最終行に SetHandler を追加します。

```
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>
```

http.conf の構文テストを行います。

"Syntax OK"と表示されれば編集完了です。

```
# /usr/local/apache2/bin/httpd -t
Syntax OK
```

###PHP7が動作することを確認する

PHPが動作することを確認するために phpinfo() の結果を表示します。

phpinfo.php ファイルを作成します。

```
# cd /usr/local/apache2/htdocs
# vim phpinfo.php
<?php phpinfo(); ?>
```

Apache2.4を起動します。

```
# /usr/local/apache2/bin/apachectl start
```

ブラウザから表示できることを確認します。
http://[サーバのIPアドレス]/phpinfo.php


###Apacheの自動起動を設定する

```
# cp /vagrant/httpd-2.4.23/build/rpm/httpd.init /etc/init.d/httpd
# vim /etc/init.d/httpd

前） httpd=${HTTPD-/usr/sbin/httpd}
後） httpd=${HTTPD-/usr/local/apache2/bin/httpd}

前） pidfile=${PIDFILE-/var/run/${prog}.pid}
後） pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}

前） CONFFILE=/etc/httpd/conf/httpd.conf
後） CONFFILE=/usr/local/apache2/conf/httpd.conf
```

###Apacheをサービスに登録する

chkconfigコマンドを使ってサービス登録します。

```
$ chkconfig --add httpd
```

サービス一覧に登録されたことを確認します。

```
$ chkconfig --list httpd
httpd           0:off   1:off   2:off   3:off   4:off   5:off   6:off
```

サービスをオンにします。

```
$ chkconfig httpd on
```

サービスが自動起動されることを確認します。

```
$ chkconfig --list httpd
httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
```


以上でApache2.4の設定は完了ですが、その他、必要に応じてバーチャルホストを設定してください。


##PHP7をセットアップする

PHP7のソースファイルをダウンロードします。

Current Stable PHP
http://www.php.net/downloads.php

ダウンロードファイルは、Vagrantマシン上の /vagrant に保存します。
（環境に合わせて任意の場所に保存して構いません）


###古いPHPを削除する

インストール済みのPHP5.6をいったん削除して、新たにソースからインストールします。

まず、作業前に Apache をいったん停止します。

```
# /usr/local/apache2/bin/apachectl stop
```

では、yumで管理されている PHP5.6 を削除します。

```
$ sudo yum remove php*
```

PHP5.6が削除されたことを確認します。

```
$ yum list installed | grep php
```

###PHP7をソースからインストールする

```
# tar -xjvf php-7.0.2.tar.bz2
# cd php-7.0.2
# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --libdir=/usr/lib64 --with-libdir=lib64 --with-curl --disable-debug --with-pic --disable-rpath --without-pear --with-bz2 --with-freetype-dir --with-png-dir --with-xpm-dir --enable-gd-native-ttf --without-gdbm --with-gettext --with-iconv --with-jpeg-dir --with-openssl --with-pcre-regex --with-zlib --enable-exif --enable-ftp --enable-sockets --enable-calendar --with-libxml-dir --enable-xml --with-mhash --enable-mbstring --enable-mbregex --with-gd --enable-bcmath --with-xmlrpc --with-mysqli --with-pdo-mysql --with-curl --with-pdo-mysql --enable-json --enable-zip --without-readline --with-mcrypt

# make
# make install
# cp php.ini-development /usr/local/php7/lib/php.ini
```


php.iniファイルを編集します。

```
# vim /usr/local/php7/lib/php.ini
```

DrupalはMySQLへの接続にPDOを利用するので MysqL PDO の接続設定をします。

```
pdo_mysql.default_socket=/var/lib/mysql/mysql.sock
```


大規模サイトにも耐えられるようにパラメーターをチューニングします。

```
memory_limit = 256M
realpath_cache_size = 256k
realpath_cache_ttl = 3600
upload_max_filesize = 20M
post_max_size = 64M

```


Apacheを起動します。

```
# /usr/local/apache2/bin/apachectl start
```


##環境変数を設定する

Apache2.4、PHP7 の実行ファイルへのパスを通します。

```
# export PATH=$PATH:/usr/local/apache2/bin:/usr/local/php7/bin
```

通したパスを全ユーザーへ反映されるように /etc/profile の最終行にも追加します。

```
# vim /etc/profile
export PATH=$PATH:/usr/local/apache2/bin:/usr/local/php7/bin
```

以上です。 これでDrupal7/8が動作できる環境が整いました。