真っ新なCentOS 7.5の環境にPHP7.3をインストールし、New Relicでアプリケーション監視の設定をした際に、躓くポイントがいくつかありました。
構築手順をこちらに残します。
CentOS 7.5 環境構築
vagrantでローカルマシンに作成します。
vagrant init centos/7
vagrant up
Nginxのセットアップ
EPELリポジトリ追加とインストール
nginxはEPELリポジトリのものを使用します。
sudo yum -y install epel-release
sudo yum -y install nginx
Nginxからphp-fpmを実行する設定
phpのファイルが呼ばれた際にphp-fpmで実行する設定を、設定ファイルのserverディレクティブ内に記述します。
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
起動設定
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
php-fpmの導入
Remiリポジトリの追加とインストール
CentOS標準のリポジトリにはPHP5系のパッケージしか用意されていません。
php-fpmはRemiリポジトリのものを使用します。
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo yum -y install php73-php.x86_64 php73-php-fpm.x86_64
起動設定
sudo systemctl start php73-php-fpm.service
sudo systemctl enable php73-php-fpm.service
New Relic PHP拡張とAgentの導入
New Relicリポジトリの追加とインストール
sudo rpm -Uvh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
sudo yum install newrelic-php5
php-fpmでnewrelic拡張を使用する設定
New Relicを使用する設定は通常 newrelic-install
を用います。コマンドを実行するだけでほとんどの設定が完了します。
しかし、この環境ではRemiのphp-fpmを使用している都合により newrelic-install
コマンドを使用できません。
なので必要な設定を手動で行います。
newrelic-php 設定ファイルの作成
sudo cp /usr/lib/newrelic-php5/scripts/newrelic.ini.template /etc/opt/remi/php73/php.d/newrelic.ini
sudo chmod u+w /etc/opt/remi/php73/php.d/newrelic.ini
php-fpmの設定ディレクトリにテンプレートをコピーし、書き込み権限を付与します。
newrelic-php 設定ファイルの編集
extension = "/usr/lib/newrelic-php5/agent/x64/newrelic-20180731.so"
newrelic.license = "REPLACE_WITH_REAL_KEY"
newrelic.appname = "アプリケーション名"
newrelic.daemon.port = "/var/run/.newrelic.sock"
※上記は変更箇所のみ記述しています。
extension
で拡張ライブラリを絶対パスで指定します。(あるいはここの記述は変更せず、ライブラリファイルを適切な場所へコピーしても良いです)
newrelic.licence
とnewrelic.appname
は自身の環境に合わせて変更します。
newrelic.daemon.port
の初期値は/tmp/.newrelic.sock
ですが、CentOS 7系で動くサービスはPrivateTmpが有効となっているため、/tmp直下のファイルにアクセスできません。
ソケットファイルを/var/runに置くことで利用できるようになります。(あるいは通信にTCPを使用するか、php-fpmではPrivateTmpを無効にすることでも可能です)
php-fpmの再起動
sudo systemctl restart php73-php-fpm.service
newrelic-daemon 設定ファイルの作成
sudo cp /etc/newrelic/newrelic.cfg.template /etc/newrelic/newrelic.cfg
sudo chmod u+w /etc/newrelic/newrelic.cfg
newrelic-daemon 設定ファイルの編集
port="/var/run/.newrelic.sock"
※上記は変更箇所のみ記述しています。
port
の値が、newrelic.iniのnewrelic.daemon.port
と一致するようにします。
newrelic-daemonの起動設定
sudo service newrelic-daemon start
sudo chkconfig newrelic-daemon on
動作確認
phpinfoを出力するファイルを作成
<?php
phpinfo();
Webアクセス
watch -n 1 curl localhost/index.php
New Relicの管理画面で確認
数分待ち、Webトランザクションの情報が入ってくれば成功です。まとめ
CentOS 7はPrivateTmpやSELinuxが有効になっていたり、php7のパッケージが標準で用意されていなかったりと、ハマりどころが多いです。
意外とハマりどころが多いです。
何かうまくいかないことがあったら、各サービスのログを見ながら対応を行いましょう。