CentOS6.9 + Apache2.4 + PHP7.1 の環境構築


問題

CentOS7はデフォルトApache2.4なのですんなりいくのだが、CentOS6はそうも行かない。

bash
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum install -y --enablerepo=remi,remi-php71 php

とすると

================================================================================
 Package            Arch   Version                             Repository  Size
================================================================================
Installing:
 php                x86_64 7.1.17-1.el6.remi                   remi-php71 2.8 M
Installing for dependencies:
 httpd              x86_64 2.2.15-60.el6.centos.6              updates    836 k
 httpd-tools        x86_64 2.2.15-60.el6.centos.6              updates     80 k

apache2.2が依存関係でインストールされる。
2.2はEOLでupdateしなきゃならないので邪魔なんだけど。。。

解決方法

bash
# php7.1をインストール。7.2にするなら全部読み替えること。
yum install -y --enablerepo=remi,remi-php71 \
  php \
  php-devel

# 依存関係で入ったapache2.2を削除
rpm -e --nodeps httpd
rpm -e --nodeps httpd-tools
rm -fr /etc/httpd
rm -fr /etc/init.d/httpd

# apache2.4をインストール
wget https://repos.fedorapeople.org/repos/jkaluza/httpd24/epel-httpd24.repo
mv epel-httpd24.repo /etc/yum.repos.d/
yum -y install --enablerepo=epel-httpd24 httpd24-httpd httpd24-httpd-devel httpd24-mod_proxy_html httpd24-mod_session httpd24-mod_ssl

# httpd24関連はパスが長いので2.2に合わせてリンクも作っている
ln -s /opt/rh/httpd24/root/etc/httpd /etc/httpd
ln -s /etc/init.d/httpd24-httpd /etc/init.d/httpd
chkconfig httpd on

# PHP7.1をコンパイルしてapache2.4 向けのPHPライブラリ(libphp7.so)を作成する
yum -y install \
  bison \
  libxml2-devel

# .configureの失敗回避
ln -s /opt/rh/httpd24/root/usr/lib64/pkgconfig/apr-1.pc /usr/lib64/pkgconfig/apr-1.pc

# PHP7.1のコンパイルする。副産物(libphp7.so)が目的なので出来上がるphpは使わない
wget https://github.com/php/php-src/archive/php-7.1.17.tar.gz
tar xvf php-7.1.17.tar.gz
cd php-src-php-7.1.17
./buildconf --force
./configure \
    --with-config-file-path=/etc/ \
    --with-config-file-scan-dir=/etc/php.d \
    --with-apxs2=/opt/rh/httpd24/root/usr/bin/apxs
make

cp /home/vagrant/php-src-php-7.1.17/libs/libphp7.so /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so

# ライブラリを読み込ませる設定を追記
echo "LoadModule php7_module /opt/rh/httpd24/root/usr/lib64/httpd/modules/libphp7.so" >> /etc/httpd/conf/httpd.conf

service httpd start

makeしたPHP7.1をmake installしないのは、yum installで各種PHPライブラリを取得するとPHP Warning: Module 'apc' already loaded in Unknown on lineという警告が大量に出たから。
phpの./configureで上のようにほぼ何もつけなくてもjson等のライブラリをyumが取ってきてしまうので、/etc/php.d/xxxx.confが勝手に作られて多重ロードの警告を出してしまう。
まあ多重ロードの定義を消せばいいのだが、以降も追加でPHPライブラリが欲しくなる可能性があるので、導入が簡単なyumを使えるようにmakeしたphpを使わない方式にした。