Skip to content

PHP8-部署

安装支持依赖

安装基础依赖

bash
dnf -y install gcc gcc-c++ libxml2 libxml2-devel bzip2 bzip2-devel libjpeg-turbo  libjpeg-turbo-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel libcurl libcurl-devel libjpeg libjpeg-devel curl curl-devel openssl openssl-devel sqlite-devel libwebp libwebp-devel oniguruma-devel oniguruma

安装libzip依赖

bash
# 卸载旧版
dnf -y remove libzip

# 下载源码包
wget --no-check-certificate  https://libzip.org/download/libzip-1.3.2.tar.gz
# 解压
tar xf libzip-1.3.2.tar.gz -C /usr/src
# 编译安装
cd /usr/src/libzip-1.3.2/
./configure && make -j$(nproc) && make install
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
ldconfig

安装freetype依赖

bash
# 下载源码包
wget --no-check-certificate https://download.savannah.gnu.org/releases/freetype/freetype-2.10.4.tar.gz
# 解压
tar xf freetype-2.10.4.tar.gz -C /usr/src
# 编译安装
cd /usr/src/freetype-2.10.4
./configure --prefix=/usr/local/freetype
make -j$(nproc) && make install

编译libiconv依赖

bash
# 安装libiconv依赖
dnf install libjpeg libjpeg-devel libxslt-devel  libxml2 libxml2-devel openssl-devel openssl-perl curl curl-devel libpng libpng-devel freetype freetype-devel libicu-devel -y

# 下载源码包
wget --no-check-certificate https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.17.tar.gz
# 解压
tar xf libiconv-1.17.tar.gz -C /usr/src
# 编译安装
cd /usr/src/libiconv-1.17
./configure --prefix=/usr/local/libiconv
make -j$(nproc) && make install

编译PHP

下载源码包

bash
wget --no-check-certificate https://www.php.net/distributions/php-8.1.18.tar.gz
tar xf php-8.1.18.tar.gz -C /usr/src

编译安装

bash
cd /usr/src/php-8.1.18
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-config-file-scan-dir=/usr/local/php/conf.d \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-iconv \
--with-freetype=/usr/local/freetype \
--with-jpeg \
--with-zlib \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--enable-ftp \
--enable-gd \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-zip \
--enable-soap \
--with-gettext \
--enable-opcache \
--with-xsl \
--with-pear \
--with-webp 

# 编译安装
make -j$(nproc) && make install

修改php.ini配置

bash
# 创软连接
ln -s /usr/local/php/bin/* /usr/bin/
ln -s /usr/local/php/sbin/* /usr/bin/

# 复制模板配置文件
cp /usr/local/php/etc/php.ini-production /usr/local/php/etc/php.ini
mkdir -p /usr/local/php/{etc,conf.d}

# 修改php配置优化项
sed -i 's/post_max_size =.*/post_max_size = 50M/g' /usr/local/php/etc/php.ini
sed -i 's/upload_max_filesize =.*/upload_max_filesize = 50M/g' /usr/local/php/etc/php.ini
sed -i 's/;date.timezone =.*/date.timezone = PRC/g' /usr/local/php/etc/php.ini
sed -i 's/short_open_tag =.*/short_open_tag = On/g' /usr/local/php/etc/php.ini
sed -i 's/;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/g' /usr/local/php/etc/php.ini
sed -i 's/max_execution_time =.*/max_execution_time = 300/g' /usr/local/php/etc/php.ini
sed -i 's/disable_functions =.*/disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g' /usr/local/php/etc/php.ini

# 检测配置文件
pear config-set php_ini /usr/local/php/etc/php.ini
pecl config-set php_ini /usr/local/php/etc/php.ini

修改PHP-FPM配置

bash
# 复制模板文件
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


vim /usr/local/php/etc/php-fpm.d/www.conf
[www]
;同主机尽量使用同用户,不能使用root用户
user = www
group = www
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 30
listen.owner = www
listen.group = www
listen.mode = 0666
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log

启动php-fpm

bash
php-fpm

系统服务文件

bash
cat > /usr/lib/systemd/system/php-fpm.service << EOF
[Unit]
Description=PHP-FPM FastCGI Process
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/php/sbin/php-fpm
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -SIGINT $MAINPID

[Install]
WantedBy=multi-user.target
EOF

# 重新加载systemd配置
sudo systemctl daemon-reload

# 启动服务(匹配图中的php-fpm进程)
sudo systemctl start php-fpm

# 设置开机自启
sudo systemctl enable php-fpm

# 检查状态(确认进程数匹配pm.max_children)
sudo systemctl status php-fpm -l

# 查看与Nginx的连接(匹配图中的fastcgi_pass)
ss -xlp | grep php-fpm

配置Nginx解析PHP

Nginx配置文件

nginx
worker_processes  2;
user www;
events {
    worker_connections  20240;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   /data/wwwroot/www;
            index  index.php index.html index.htm;
        }

        location ~ \.(php|php5)?$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            #这里是存放php的目录,如果是在同一主机,只需要指定到nginx的html目录就行 如果不在同一主机,需要做共享目录或者把php文件放到这个目录
            fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}

检查并启动Nginx

bash
nginx -t
nginx -s reload

测试PHP解析是否成功

bash
mkdir -p /data/wwwroot/www
echo "<?php phpinfo(); ?>" >/data/wwwroot/www/info.php
chown -R www:www /data/wwwroot/www

#在浏览器内输入IP地址访问info.php
http://ip/info.php