はじめに
前回、CentOS環境にNginXをインストールしましたが、その環境にPHP環境を構築したいと思います。
インストールはすごく簡単にできます。
本環境はローカル環境で動作することを前提で作成しています。
NginX環境もほぼデフォルト状態となっています。
NginX構築に関しては下記を参考にしてください。
PHP7のインストール
本環境にインストールするPHPのバージョンは7.3とします。
remiリポジトリを追加する
PHPのパッケージをインストールする前に、remiリポジトリを追加します。
上記サイトでremiリポジトリが管理されています。
$ yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
上記実行すると、リポジトリが追加されます。
読み込んだプラグイン:fastestmirror, langpacks
remi-release-7.rpm | 20 kB 00:00:00
/var/tmp/yum-root-KkvSOF/remi-release-7.rpm を調べています: remi-release-7.7-2.el7.remi.noarch
/var/tmp/yum-root-KkvSOF/remi-release-7.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ remi-release.noarch 0:7.7-2.el7.remi を インストール
--> 依存性の処理をしています: epel-release = 7 のパッケージ: remi-release-7.7-2.el7.remi.noarch
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
nginx | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-11 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
===================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
===================================================================================================================================
インストール中:
remi-release noarch 7.7-2.el7.remi /remi-release-7 26 k
依存性関連でのインストールをします:
epel-release noarch 7-11 extras 15 k
トランザクションの要約
===================================================================================================================================
インストール 1 パッケージ (+1 個の依存関係のパッケージ)
合計容量: 41 k
総ダウンロード容量: 15 k
インストール容量: 51 k
Downloading packages:
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : epel-release-7-11.noarch 1/2
インストール中 : remi-release-7.7-2.el7.remi.noarch 2/2
検証中 : remi-release-7.7-2.el7.remi.noarch 1/2
検証中 : epel-release-7-11.noarch 2/2
インストール:
remi-release.noarch 0:7.7-2.el7.remi
依存性関連をインストールしました:
epel-release.noarch 0:7-11
完了しました!
以下のコマンドを実行して、リポジトリが追加されているかどうかを確認します。
$ ls -la /etc/yum.repos.d/ | grep remi*
下記の様な結果が得られればOKです。
-rw-r--r--. 1 root root 446 2月 18 01:07 remi-glpi91.repo
-rw-r--r--. 1 root root 446 2月 18 01:07 remi-glpi92.repo
-rw-r--r--. 1 root root 446 2月 18 01:07 remi-glpi93.repo
-rw-r--r--. 1 root root 446 2月 18 01:07 remi-glpi94.repo
-rw-r--r--. 1 root root 855 2月 18 01:07 remi-modular.repo
-rw-r--r--. 1 root root 456 2月 18 01:07 remi-php54.repo
-rw-r--r--. 1 root root 1314 2月 18 01:07 remi-php70.repo
-rw-r--r--. 1 root root 1314 2月 18 01:07 remi-php71.repo
-rw-r--r--. 1 root root 1314 2月 18 01:07 remi-php72.repo
-rw-r--r--. 1 root root 1314 2月 18 01:07 remi-php73.repo
-rw-r--r--. 1 root root 1314 2月 18 01:07 remi-php74.repo
-rw-r--r--. 1 root root 750 2月 18 01:07 remi-safe.repo
-rw-r--r--. 1 root root 2605 2月 18 01:07 remi.repo
ただ、リポジトリを追加しただけだと、有効化されていないため、以下のコマンドを実行して有効化します。
$ yum info --enablerepo=remi,remi-php73 php
これで有効化されました。
phpパッケージのインストール
では早速インストールしていきましょう。
普通にインストールのコマンドを実行しても、下記の様なエラーがでるため、パッケージの一覧を引数に付与する必要があります。
$ yum -y install --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-pecl-mcrypt php-mysqlnd php-pecl-mysql
これで、phpのパッケージのインストール完了です。
php.iniの設定
インストールが完了したらphp.iniファイルの設定を行います。
今回は最低限必要な設定を行います。
まず。本ファイルのバックアップファイルをとっておきます。
$ cp -p /etc/php.ini /etc/php.ini.org
$ vi /etc/php.ini
最低限設定する内容
# PHPのバージョンを非表示設定
expose_php = Off
# アップロードサイズ(ここでは100MBに設定
post_max_size = 100M
# タイムゾーンの設定
date.timezone = "Asia/Tokyo"
# マルチバイトの設定(日本語)
mbstring.language = Japanese
# エンコード設定
mbstring.internal_encoding = UTF-8
# HTTP出力字の文字コード設定
mbstring.http_input = UTF-8
# 文字コード自動検出を設定
mbstring.detect_order = auto
その他、環境に合わせて設定してください。
php-fpmパッケージインストール
$ yum -y install --enablerepo=remi,remi-php73 php-fpm
インストールが完了したら、自動起動設定を行います。
$ systemctl enable php-fpm
NginXの設定変更
phpを動作させるために、NginXの設定ファイルの変更を行います。
もともとのdefault.confファイルのバックアップをとり、修正します。
$ cp -p /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
$ vi /etc/nginx/conf.d/default.conf
Locationに「index.php」を追加します。
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
また、phpをfastCGIで動作する様に設定します。
(コメントを外します)
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
設定が正しいかどうか確認します。
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
successfulとなれば、NginXを」再起動します。
$ systemctl restart nginx
動作確認
インストールが正常に完了しているかどうか、確認してみます。
「/usr/share/nginx/html」に「index.php」を作成します。
vi /usr/share/nginx/html/index.php
上記ファイルに「<?php phpinfo(); ?>」を記載し保存します。
対象のサーバURLにアクセスし、下記が表示されることを確認してください
index.phpを指定して、File Not Foundと表示される場合
原因としては、下記が考えられます。
- nginxの設定が正しく設定されていない。
- php-fpmの設定が正しくない。
NginXの設定確認
確認する観点は下記です。
- default.confファイルの locationに「index.php」が記載されているかどうか
- default.confファイルの「root」のパスが正しいかどうか
- default.confに記載した、拡張子「.php」の設定において、「root」が正しいかどうか、または、index.phpが存在するかどうか
- default.confの「fastcgi_param」のパスが間違っている
上記が問題ない場合は php-fpmの設定が正しくない可能性が高いです。
筆者は、4つめの設定パスが間違っていたため、エラーとなりました。
$ vi /etc/nginx/conf.d/default.conf
/script を $document_root に変更します。
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /$document_root$fastcgi_script_name;
NginXを再起動します。
systemctl restart nginx
php-fpmの設定確認
- 実行ユーザ名が「apache」のままになっている。
$ ps aux | grep php-fpm
root 18670 0.0 0.7 354364 13692 ? Ss 17:56 0:00 php-fpm: master process (/etc/php-fpm.conf)
apache 18674 0.0 0.4 356448 8184 ? S 17:56 0:00 php-fpm: pool www
apache 18675 0.0 0.4 356448 8184 ? S 17:56 0:00 php-fpm: pool www
apache 18676 0.0 0.4 356448 8184 ? S 17:56 0:00 php-fpm: pool www
apache 18677 0.0 0.4 356448 8184 ? S 17:56 0:00 php-fpm: pool www
apache 18678 0.0 0.4 356448 8192 ? S 17:56 0:00 php-fpm: pool www
root 22730 0.0 0.0 112720 980 pts/1 S+ 18:16 0:00 grep --color=auto php-fpm
apacheとなっています。
php-fpmの設定ファイルを修正します。
実行ユーザはデフォルトでは「nginx」なのでその様に設定
$ vi /etc/php-fpm.d/www.conf
下記のように設定し、保存します。
user = nginx
group = nginx
php-fpmを再起動します。
systemctl restart php-fpm
最後に
phpinfoが表示されない原因を見つけるのに時間がかかりましたが、問題なく表示できました。
最短でPHP環境を構築したい場合(テスト環境は開発環境)は参考にしてみてください。