[LNMP] Centos8 编译安装 PHP 8.0 并启用 JIT

PHP 8.0 于 2020 年 11 月 26 日正式发布,包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。

更多特性可以在 PHP: PHP8.0 Release 中查看

相关文章

更新系统

更新系统软件包至最新版本

yum update

下载 PHP 源码包

PHP:Downloads 下载最新 PHP 源码包

wget https://www.php.net/distributions/php-8.0.0.tar.gz
tar -xvzf php-8.0.0.tar.gz
cd php-8.0.0

安装编译组件

安装编译组件 makegccg++

yum install gcc gcc-c++ make

安装依赖组件

yum install libxml2 libxml2-devel openssl openssl-devel freetype freetype-devel libzip libzip-devel sqlite sqlite-devel gd gd-devel libcurl-devel libicu libicu-devel libxslt libxslt-devel

oniguruma 安装可以参照此前的博文 编译安装 php 7.4 no package ‘oniguruma’ found

yum install https://rpms.remirepo.net/enterprise/8/remi/x86_64/oniguruma5php-6.9.6-1.el8.remi.x86_64.rpm
yum install https://rpms.remirepo.net/enterprise/8/remi/x86_64/oniguruma5php-devel-6.9.6-1.el8.remi.x86_64.rpm

编译

使用 configure 自动配置

./configure \
--prefix=/usr/local/php \
--with-zlib-dir \
--enable-mbstring \
--enable-soap \
--enable-calendar \
--with-curl \
--disable-rpath \
--enable-gd \
--enable-gd-jis-conv \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--with-pdo-mysql \
--with-mysqli \
--with-openssl \
--with-fpm-user=www \
--with-fpm-group=www \
--with-libdir=/lib/x86_64-linux-gnu/ \
--enable-ftp \
--with-gettext \
--with-xsl \
--enable-opcache \
--enable-fpm \
--with-iconv \
--with-zip \
--with-pear \
--with-freetype \
--enable-intl

使用 make 编译

make -j4

-j4 表示四线程编译,推荐设置为 CPU 核心数

使用 make 安装

make install
cp php.ini-production /usr/local/php/lib/php.ini

配置 PHP

PHP 安装位置在 /usr/local/php 目录下

创建 www 用户

useradd www

修改 php-fpm.conf

cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d
cp www.conf.default www.conf

编辑 www.conf,根据服务器性能和需求配置进程数量

pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 4
pm.max_spare_servers = 7

并将下列代码前分号去除

;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

修改 php.ini

cd /usr/local/php/lib
vim php.ini

编辑内存大小

memory_limit = 512M

编辑 POST 和文件上传大小

post_max_size = 512M
upload_max_filesize = 512M

启用 OPcache 和 JIT

去除下列代码前分号

;zend_extension=opcache

[opcache]
;opcache.enable=1
;opcache.memory_consumption=128
;opcache.interned_strings_buffer=8
;opcache.max_accelerated_files=10000
;opcache.validate_timestamps=1

并输入

opcache.jit_buffer_size=128

注册 php-fpm 为系统服务

vim /usr/lib/systemd/system/php-fpm.service

填入

[Unit]
Description=The PHP FastCGI Process Manager
After=network.target

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

[Install]
WantedBy=multi-user.target

设置开机自动启动

systemctl enable php-fpm
systemctl start php-fpm

查看服务运行状态

systemctl status php-fpm