phpをソースからコンパイル

lsphp

前回はlsphpのコンパイルでしたが今回はphp-fpmです。

今の最新バージョンはphp8.2.0なのでそれをコンパイルします。

ダウンロード

wget https://www.php.net/distributions/php-8.2.0.tar.gz
//wgetが使えないなら
curl -OL https://www.php.net/distributions/php-8.2.0.tar.gz

解凍、コンパイルのための設定、コンパイル

解凍

tar xvzf php-8.2.0.tar.gz
rm -f php-8.2.0.tar.gz

コンパイルのための設定

cd php-8.2.0
./configure '-prefix=/usr/local/php8.2' '--with-mysqli' '--with-zlib' '--enable-gd' '--enable-gd-jis-conv' '--enable-shmop' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-mbstring' '--with-iconv' '--with-pdo-mysql' '--enable-ftp' '--with-curl' '--enable-soap' '--enable-xml' '--with-openssl' '--enable-bcmath' '--enable-exif' '--with-jpeg' '--with-freetype' '--with-gettext' '--with-bz2'  '--enable-opcache' '--with-zip' '--with-xpm' '--with-ldap' '--enable-intl' '--enable-fpm' '--with-mysql-sock=/var/lib/mysql/mysql.sock'

コンパイル

make
//makeで全然進まない場合は (make -j コア数なので4コアの場合は"make -j 4")
make -j 2
//make testはしてもしなくてもいいです。
make install

php-fpmの設定,php.ini

cd /usr/local/php8.2/etc
cp -p php-fpm.conf.default php-fpm.conf
vim php-fpm.conf

;pid = run/php-fpm.pid
↓
pid = run/php-fpm.pid

;error_log = log/php-fpm.log
↓
error_log = log/php-fpm.log
cd php-fpm.d
cp -p www.conf.default www.conf
vim www.conf

;user = nobody
;group = nobody
↓
user = apache
group = apache

listen = 127.0.0.1:9000
↓
listen = /run/php-fpm/php8.2.sock

;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
↓
listen.owner = apache
listen.group = apache
listen.mode = 0660

pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.max_requests = 500
↓
//目安だと思ってください。
//サーバー環境によるのでサーバー環境で合わせてください。
pm.max_children = 25
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 15
pm.max_requests = 500

php.iniは

// /etc/php.iniがある場合はコピー
cd /usr/local/php8.2/lib
cp /etc/php.ini .
//ない場合は
expose_php = Off
post_max_size = 10M
upload_max_filesize = 10M
date.timezone = Asia/Tokyo
mbstring.language = Japanese

systemctlによる起動設定

vim /etc/systemd/system/php-fpm8.2.service
[Unit]
Description=The PHP 7 FastCGI Process Manager
After=network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php8.2/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php8.2/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start php-fpm8.2
systemctl enable php-fpm8.2

apacheと連動

vim /etc/httpd/conf.d/php.conf
<FilesMatch \.(php|phar)$>
  SetHandler "proxy:unix:/run/php-fpm/php8.2.sock|fcgi://localhost"
</FilesMatch>

systemctl reload httpd

これで完了です。

自分か使ってるスペックだとmake -jでやらないと永遠にコンパイルが完了しませんでした。

この記事が良かったら、シェアしてね!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です