『Apache httpd 2.4.39 ・PHP 7.3.6 設置』編
※ 2019/10/15 追記
WordPress 5.2.4 でも正常動作します。
「最新のローカル LAMP 環境で WordPress を構築する」は、4編に分けてあります。他の記事は ▼ をご参照ください。
いよいよ Apache httpd 2.4.39 と PHP 7.3.6 バージョンをインストールします。
Apache httpd 2.4 最新版を設置
Apache httpd 2.4 の 最新版 を確認します。(2019/06/19現在)
Apache httpd 2.4 の最新版に HTTP/2、SSL/TLS、Brotli モジュールなどを有効化してインストールします。
cd /usr/local/src/ wget http://ftp.kddilabs.jp/infosystems/apache//httpd/httpd-2.4.39.tar.gz tar xvzf httpd-2.4.39.tar.gz cd httpd-2.4.39/ ./configure \ --enable-http2 \ --enable-brotli \ --with-brotli=/usr/local/lib \ --enable-ssl \ --with-ssl=/usr/local/openssl-1.1.1b \ --with-apr=/usr/local/apr \ --with-apr-util=/usr/local/apr \ --enable-so \ --enable-mods-shared=all \ --enable-mpms-shared=all \ make make install
設置されたバージョンを確認します。(選択)
[root@centos7 ~]# /usr/local/apache2/bin/httpd -v Server version: Apache/2.4.39 (Unix) ...
Apache httpd 2.4.39 が /usr/local/apache2/ 以下にインストールされます。
[root@centos7 ~]# ls /usr/local/apache2/ bin build cgi-bin conf error htdocs htdocs_org icons include logs man manual modules
PHP 7.3.6 設置
PHP 7.3 は Remi レポジトリから設置できます。Remi レポジトリが依存する EPEL レポジトリを先に追加します。
yum -y install epel-release yum -y update
Remi レポジトリを追加
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
Remi レポジトリを有効化します。
remi.repo
[root@centos7 ~]# vi /etc/yum.repos.d/remi.repo [remi] ... enabled=0 ↓↓↓ enabled=1
remi-php73.repo
[root@centos7 ~]# vi /etc/yum.repos.d/remi-php73.repo [remi-php73] ... enabled=0 ↓↓↓ enabled=1
古いバージョンの PHP がインストールされている場合(PHP 5.6.x)Apache httpd との連動ができない問題が発生する可能性があります。インストールされている既存のバージョンを確認した上で、削除してインストールします。
# 設置されたパッケージを確認 [root@centos7 ~]# yum list installed | cut -d " " -f 1 | grep php # 古い PHP パッケージを削除します。 [root@centos7 ~]# yum remove -y `yum list installed | cut -d " " -f 1 | grep php`
PHP 7.3.6 をインストールします。
設置される PHP モジュールは Apache httpd 2.4 にも設置されます。
Apache では HTTP/2 ( mod_http2 ) が動作するためには、prefork MPM は使用できない。
HTTP/2 の下で PHP を利用するためには、FastCGI で PHP を設定する必要があります。
したがって、Apache と PHP は event MPM + PHP-FPM の組み合わせで構築します。
yum -y install php yum -y install php-devel yum -y install php-pdo yum -y install php-mysqlnd yum -y install php-mbstring yum -y install php-gd yum -y install php-pear yum -y install php-pecl-apc-devel yum -y install php-fpm
設置された PHP パッケージを確認します。
[root@centos7 ~]# yum list installed |grep php php.x86_64 7.3.6-3.el7.remi @remi-php73 php-cli.x86_64 7.3.6-3.el7.remi @remi-php73 php-common.x86_64 7.3.6-3.el7.remi @remi-php73 php-devel.x86_64 7.3.6-3.el7.remi @remi-php73 php-fedora-autoloader.noarch 1.0.0-1.el7.remi @remi php-fpm.x86_64 7.3.6-3.el7.remi @remi-php73 php-gd.x86_64 7.3.6-3.el7.remi @remi-php73 php-json.x86_64 7.3.6-3.el7.remi @remi-php73 php-mbstring.x86_64 7.3.6-3.el7.remi @remi-php73 php-mysqlnd.x86_64 7.3.6-3.el7.remi @remi-php73 php-pdo.x86_64 7.3.6-3.el7.remi @remi-php73 php-pear.noarch 1:1.10.9-3.el7.remi @remi php-pecl-apcu.x86_64 5.1.17-2.el7.remi.7.3 @remi-php73 php-pecl-apcu-devel.x86_64 5.1.17-2.el7.remi.7.3 @remi-php73 php-process.x86_64 7.3.6-3.el7.remi @remi-php73 php-xml.x86_64 7.3.6-3.el7.remi @remi-php73
PHP バージョンを確認
[root@centos7 ~]# php -v PHP 7.3.6 (cli) (built: May 28 2019 09:32:59) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.6, Copyright (c) 1998-2018 Zend Technologies
【 2019/07/26 追記 】
よりスマートな画像サイズ変更 ( 小さい画像用 ) および PDF サムネイルのサポートするためのImagick / ImageMagick の設定を追加しました!
Apacheと PHP 設定
PHP 7.3.6 を設定します。
[root@centos7 ~]# vi /etc/php.ini expose_php = On ↓↓↓ expose_php = Off ;date.timezone = ↓↓↓ date.timezone = 'Asia/Tokyo' error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ↓↓↓ error_reporting = E_ALL & ~E_NOTICE
PHP-FPM を設定します。
[root@centos7 ~]# vi /etc/php-fpm.d/www.conf user = apache group = apache ↓↓↓ user = daemon group = daemon
Apache httpd 2.4 と PHP-FPM が同じサーバー上で実行されている場合は、TCP/IP 通信より速度が速い UNIX ドメインソケットを経由するように設定します。
listen = 127.0.0.1:9000 ↓↓↓ listen = /var/run/php-fpm/php-fpm.sock ;listen.owner = nobody ;listen.group = nobody ;listen.mode = 0660 ↓↓↓ listen.owner = daemon listen.group = daemon listen.mode = 0660
PHP-FPM のログファイルディレクトリの権限も daemon に変更します。
chown daemon /var/log/php-fpm
PHP-FPM を起動して、サービス自動起動を有効にします。
systemctl start php-fpm systemctl enable php-fpm
SSL 証明書を作成
HTTP/2 と Brotli は、HTTPS が必須であるため、Apache httpd を設定する前に、SSL 証明書 を作成しておきます。
Let’s encryptを利用して作成するには、Let’s Encrypt ワイルドカード証明書を取得・自動更新を完結する|DNS-RFC2136 をご参照ください。
Apache httpd 2.4.39 設定
元の設定ファイルをバックアップしておきます。
mv -i /usr/local/apache2/conf/httpd.conf /usr/local/apache2/conf/httpd.conf.org mv -i /usr/local/apache2/conf/extra/httpd-ssl.conf /usr/local/apache2/conf/extra/httpd-ssl.conf.org
設定ファイルを作成します。
最初に元の設定ファイルを修正しながら作成したが、500 エラーが発生してデバッグしても問題が解消されず、結局は新しい httpd.conf ファイルを作成して設定しました。
元の設定ファイルの場所:/usr/local/apache2/conf/httpd.conf.org または、/usr/local/apache2/conf/original/httpd.conf
元の設定ファイルを修正するか、下記の設定ファイルを使用するかは、ご自身が選択してください。
httpd.conf
httpd.conf ファイルを /usr/local/apache2/conf/httpd.conf にコピベーしてください。
# 下記の項目を含め、適宜変更してください。 [root@centos7 conf]# vi /usr/local/apache2/conf/httpd.conf ... ServerAdmin admin@example.com ServerName www.example.com:80 ... Include conf/extra/httpd-ssl.conf Include conf/extra/httpd-vhosts-10-service.conf ... # 設定を確認 [root@centos7 conf]# /usr/local/apache2/bin/httpd -t Syntax OK
httpd-ssl.conf
httpd-ssl.conf ファイルを /usr/local/apache2/conf/extra/httpd-ssl.conf にコピペしてください。
mainhost.com と example.com が設定された conf ファイルです。ドメイン名、SSL 証明書の位置などを適宜変更して使ってください。
# 設定を確認してhttpdデーモンを再起動 [root@centos7 conf]# /usr/local/apache2/bin/httpd -t Syntax OK [root@centos7 conf]# systemctl restart httpd
httpd-vhosts-10-service.conf
httpd-vhosts-10-service.conf を /usr/local/apache2/conf/extra/httpd-vhosts-10-service.conf にコピペしてください。
mainhost.com と example.com が設定された conf ファイルです。ドメイン名など適宜変更して使ってください。なお、このファイルには 301リダイレクト の設定 も含まれています。
設定したバーチャルホストの内容を確認してください。( 任意 )
[root@centos7 extra]# /usr/local/apache2/bin/httpd -S
Apache httpd 2.4.39 用 Systemd サービスファイル作成
Apache httpd 2.4.39 と PHP-FPM サービスファイルには、それぞれの依存関係を追加して作成します。
ここでは Apache 2.4.6 バージョンが存在するので、httpd2.service で登録します。
httpd2.service
[root@centos7 ~]# vi /etc/systemd/system/httpd2.service [Unit] Description=The Apache HTTP/2 Server After=network.target remote-fs.target nss-lookup.target Requires=php-fpm.service # << 依存関係設定(php-fpm) Documentation=man:httpd(8) Documentation=man:apachectl(8) [Service] Type=forking ExecStart=/usr/local/apache2/bin/apachectl start ExecReload=/usr/local/apache2/bin/apachectl graceful ExecStop=/usr/local/apache2/bin/apachectl stop [Install] WantedBy=multi-user.target
PHP-FPM にも依存関係を設定します。
php-fpm.service
[root@centos7 conf]# vi /etc/systemd/system/multi-user.target.wants/php-fpm.service [Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target Requires=httpd2.service # << 依存関係設定(httpd2) ...
作成したサービスファイルを Systemd へ登録します。
Systemd へ登録
systemctl daemon-reload
Systemd へ反映されたか確認します。
[root@centos7 ~]# systemctl list-unit-files | grep httpd httpd.service enabled httpd2.service disabled
httpd が起動中であれば stop!して、
[root@centos7 ~]# systemctl stop httpd
httpd2 サービスを開始 ( start ) して異常がなければ ( status ) 、有効 ( enable ) にします。
[root@centos7 ~]# systemctl start httpd2 [root@centos7 ~]# systemctl status httpd2 ● httpd2.service - The Apache HTTP/2 Server Loaded: loaded (/etc/systemd/system/httpd2.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2019-05-23 17:15:21 JST; 7s ago Process: 18744 ExecStart=/usr/local/apache2/bin/apachectl start (code=exited, status=0/SUCCESS) Main PID: 18747 (httpd) CGroup: /system.slice/httpd2.service ├─18747 /usr/local/apache2/bin/httpd -k start ├─18748 /usr/local/apache2/bin/httpd -k start ├─18749 /usr/local/apache2/bin/httpd -k start └─18750 /usr/local/apache2/bin/httpd -k start May 23 17:15:21 centos7 systemd[1]: Starting The Apache HTTP/2 Server... May 23 17:15:21 centos7 systemd[1]: Started The Apache HTTP/2 Server. [root@centos7 ~]# [root@centos7 ~]# systemctl enable httpd2
httpd を無効 ( disable ) にしておきます。
[root@centos7 ~]# systemctl disable httpd
Firewall 設定
80/TCP、443/TCPポートをオープンしてファイアウォールを再起動して反映します。
firewall-cmd --add-port=80/tcp --permanent firewall-cmd --add-port=443/tcp --permanent firewall-cmd --reload
確認します。
# 環境によって内容は異なります。 [root@centos7 conf]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: p1p1 sources: services: samba http dns smtp smtps ssh https imaps # << ここに http https が表示されれば OK! ports: 1999/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks:
以上で、設定が完了しました。
次回 は MySQL 8.0.6 をインストールおよび設定します。
参考文献
Migrating from PHP5.6.x to PHP7.0.x
PHP-FPM – A simple and robust FastCGI Process Manager for PHP
コメント