CenterOS 源码编译安装 PHP 8.3.1及性能优化配置以及 Laravel 10.3.1 部署

   本文将介绍如何在 CenterOS 上源码编译并安装 PHP 8.3.1,源码编译更便于 PHP 版本和扩展的管理。 然后我们快速搭建一个 Laravel 10.3.1 框架应用。通过这篇教程,您可以轻松掌握 PHP 8.3.1 的编译和 Laravel 10.3.1 的使用,快速构建您的 PHP Web 应用。

一、PHP 8.3.1 源码编译安装流程

# 1、下载地址:
https://www.php.net/downloads.php

# 2、下载
cd /Software && wget https://www.php.net/distributions/php-8.3.1.tar.gz
# 3、解压
tar -zxvf php-8.3.1.tar.gz

# 4、安装依赖包
yum install -y \
      freetype \
      gd  \
      libpng \
      libpng-devel \
      libjpeg  \
      libxml2 \
      libxml2-devel \
      zlib \
      curl  \
      curl-devel  \
      net-snmp-devel  \
      libjpeg-devel \
      php-ldap  \
      openldap-devel \
      openldap-clients \
      freetype-devel \
      gmp-devel libzip \
      libzip-devel  \
      sqlite-devel \
      autoconf  \
      bzip2-devel  \
      curl-devel \
      db4-devel  \
      libjpeg-devel  \
      libpng-devel   \
      libXpm-devel   \
      gmp-devel  \
      libc-client-devel  \
      openldap-devel  \
      unixODBC-devel \
      postgresql-devel  \
      sqlite-devel   \
      aspell-devel  \
      net-snmp-devel   \
      libxslt-devel  \
      libxml2-devel  \
      pcre-devel  \
      mysql-devel  \
      unixODBC-devel  \
      postgresql-devel \
      pspell-devel   \
      net-snmp-devel \
      libxslt-devel 

# 5、安装依赖包 oniguruma
     oniguruma 是一个处理正则表达式的库, 
     mbstring 的正则功能需要oniguruma的支持,我们需要用到。

# 安装 oniguruma-6.9.4
     cd /Software && wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz
     tar -xvf  oniguruma-6.9.4.tar.gz
     cd oniguruma-6.9.4/
     ./autogen.sh && ./configure --prefix=/usr --libdir=/lib64  # 64 位的系统一定要标识
     make && make install

# 配置动态库的路径(加载so库):
   ()、方式一
     vim  /etc/ld.so.conf
     在最后面添加路径:/usr/local/lib
     保存退出执行命令:ldconfig 

  (二)、方式二
     执行配置命令:export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"

# 6、安装依赖包 libzip
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xf libzip-1.3.2.tar.gz
cd libzip-1.3.2/
./configure &&make && make install && echo $?
如果最后输出了0,如果最后输出了0,表示安装完成,如果是1,根据提示信息排查,继续重复,一般不会报错。

如果在 "5、安装依赖包 oniguruma" 时候未配置配置动态库的路径,此时需要配置动态库路径。

# 7、编译(大部分常用扩展)
./configure \
--prefix=/usr/local/php   \
--with-config-file-path=/usr/local/php/etc   \
--enable-fpm    \
--with-fpm-user=nginx   \
 --with-fpm-group=nginx   \
 --enable-mysqlnd    \
 --with-mysqli    \
--with-pdo-mysql    \
--enable-opcache    \
--with-pcre-jit   \
 --enable-gd    \
--with-jpeg    \
--with-freetype    \
--with-gettext    \
--with-curl    \
--with-openssl    \
--enable-sockets   \
 --enable-mbstring    \
--enable-xml    \
--with-zip   \
--with-zlib    \
--with-snmp   \
 --with-mhash   \
 --enable-ftp    \
--enable-bcmath    \
--enable-soap   \
 --enable-shmop    \
--enable-sysvsem   \
 --enable-pcntl    \
--with-gmp  \
--enable-calendar \
--with-zlib \
--enable-gd \
--disable-rpath \
--with-bz2 \
--enable-sysvshm \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mysql-sock=/var/run/mysqld/mysqld.sock \
--with-libdir=/lib/x86_64-linux-gnu \
--with-kerberos \
--with-xsl \
--enable-opcache \
--enable-intl \
--with-pear

编译成功如下:

安装:
make && make install

安装成功如下:

二、PHP 8.3.1 环境配置

1.配置文件
   cp /Software/php-8.3.1/php.ini-development /usr/local/php/etc/php.ini
   cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
   cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf

2.配置文件语法检测
    fpm 启动用户配置的是 nginx(--with-fpm-user=nginx) ,所以先创建 nginx 用户。
    useradd -M -s /sbin/nologin nginx
    -M 没有家目录,没有登录。
    -s 不能用来登录。

   /usr/local/php8/sbin/php-fpm -t

3.服务管理
(1)启动
   /usr/local/php/sbin/php-fpm

(2)关闭
   pkill php-fpm

(3)重载
  pkill -USR2 php-fpm

4.开机启动
vim /etc/rc.local
/usr/local/php/sbin/php-fpm

5.查看 php-fpm 启动情况

6.软连接 php.ini 配置文件

  删除原有的 php.ini
  rm /etc/php.ini

  连接安装的 php.ini
  ln -s /usr/local/php/etc/php.ini /etc

7.配置环境变量
   vim /etc/profile
   在最后添加:export PATH=/usr/local/php/bin:/usr/local/php/sbin:$PATH
   保存退出后重新加载配置:source /etc/profile 

现在已全局生效:

8. PHP3.1 性能优化
一、PHP-FPM进程和线程特点:
   1.PHP-FPM是阻塞的单线程模型,PHP-FPM的每个进程只开启一个线程,一个线程同时只能服务一个请求。
   2.服务进程内存使用统计:
   ps aux |grep php-fpm|awk '{mem+=$6}END{print mem}'

.进程池:
查看进程池:
ps aux | grep php-fpm

显示php-fpm: pool www 的代表 work 子进程(实际处理请求)
显示php-fpm: process master 的代 master 主进程(负责管理 work 子进程)
查看进程数量:
ps aux | grep php-fpm | wc -l

9.时区配置
vim /usr/local/php/etc/php.ini
date.timezone = Asia/Shangha
.进程守护者:
user = nginx
group = nginx
# 建议与nginx进程守护者保持一致

四.监听端口:
listen = 127.0.0.1:9000.进程管理器核心优化:
vim /usr/local/php/etc/php-fpm.d/www.conf

1.动态创建子进程:
pm = dynamic

2.最大子进程数:
pm.max_children = 100 (默认5)
#每开启一个php-fpm进程要占用近20M左右的内存,假设服务器内存为2G

3.初始进程数:
pm.start_servers = 40 (默认2)

4.最小空闲进程数:
pm.min_spare_servers = 20 (默认1)                                                                                                                                           
5.最大空闲进程数:
pm.max_spare_servers = 60 (默认3)

6.最大多少次请求后子进程重生:
pm.max_requests = 10240
#有效降低内存消耗

六.进程状态监控:
1.php 配置:
    vim /usr/local/php/etc/php-fpm.d/www.conf
    pm.status_path = /status

重载配置:pkill -USR2 php-fpm

2.nginx设置方法:
nginx 安装配置请看《高性能 HTTP 和反向代理 web 服务器 Nginx》篇章。

准备工作:
     cd /usr/local/nginx/conf && cp  nginx.conf nginx.conf.bak
   mkdir vhosts

   vim nginx.conf
   在最后添加以下配置:include vhosts/*.conf;

cd vhosts && vim status.conf
配置如下:
server{

  listen 8081;
  server_name 192.168.130.5;

  location /status {
     fastcgi_pass   127.0.0.1:9000;
     fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include        fastcgi_params;
  }
}


重载 nginx 配置:pkill -USR2 nginx

打开 status 页面:
http://192.168.130.5:8081/status

进程状态信息解读:
pool: www                       # 进程池名称
process manager: dynamic        # 进程管理方式
start time: 22/Jan/2016:15:49:00 +0800 # 启动时间
start since: 375                # 运行时长
accepted conn: 7                # 当前进程池接受的请求数
listen queue: 0                    # 请求等待队列,如果不为 0 ,意味着 FPM 进程不足,需要增加
max listen queue: 0              # 最大等待队列数量
listen queue len: 1024             # SOCKET 等待队列长度
idle processes: 4               # 空闲进程数
active processes: 1              # 活跃的进程数
total processes: 5               # 总进程数
max active processes: 1            # 最大活跃进程数
max children reached: 0            # 达到最大进程数的次数,如果不为 0 ,意味着最大进程数不足,需要增加
slow requests: 0                # 慢请求数量,需要设置 slow log
max listen queue: 0、max active processes: 1  、max children reached: 0 决定
是否需要增加硬件。

三、安装 Laravel 10.3.1

1、安装 composer
cd /Software
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
sudo mv composer.phar /usr/local/bin/composer

版本查看: composer -v

2、设置阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
取消:
composer config -g --unset repos.packagist

3、安装 laravel 项目:
mkdir /var/www/ && cd /var/www/
composer create-project laravel/laravel test
安装完成:

给项目目录设置权限:
chmod -R 777 ./storage*
chmod -R 777 ./bootstrap/cache*

配置 .env APP_URL:
APP_URL=http://192.168.130.5:8082

配置nginx:
cd /usr/local/nginx/conf/vhosts

vim test.conf:
server {
    listen 8082;
    server_name 192.168.130.5;
    root /var/www/test/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

   charset utf-8;

   location / { 
       try_files $uri $uri/ /index.php?$query_string;
   }   

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

     error_page 404 /index.php;

     location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
       include fastcgi_params;
     }   

     location ~ /\.(?!well-known).* {
         deny all;
   }   
 }

 检查配置是否正确:

重载 nginx 配置:pkill -HUP nginx

访问 Laravel 项目:
192.168.130.5:8082/

  至此,在 CenterOS 上源码编译并安装 PHP 8.3.1,源码编译和性能优化配置,以及 Laravel 10.3.1 的使用已全部讲解完

本作品采用《CC 协议》,转载必须注明作者和本文链接
ThinkQ
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!