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