一、環境說明
本文中使用本地VM虛機部署測試。
OS:centos linux release 7.8.2003 (Core)
虛機配置:2核CPU、4G內存
①系統為CentOS 7.8 x64最小化安裝,部署前已完成系統初始化、內核及安全優化。
②oniguruma5php依賴包:開啟mbstring擴展,需要的正則處理庫。
http://rpms.remirepo.net/enterprise/7/remi/x86_64/
二、基礎依賴環境
1.基礎編譯工具
## autoconf——一個用于生成shell腳本的工具,可以自動配置軟件源代碼以適應多種類似POSIX的系統。讓軟件包在所有的不同系統上都可以進行編譯。
cd /data/tools
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.gz
tar xf autoconf-2.71.tar.gz
cd autoconf-2.71
./configure --prefix=/usr/
make
make install
## automake——一種用于從名為Makefile.am的文件中自動生成Makefile.ins的工具。每個Makefile.am基本上都是一系列的make變量定義1,有時會拋出規則。使生成的Makefile.ins符合GNU Makefile標準。
cd /data/tools
wget http://ftp.gnu.org/gnu/automake/automake-1.16.3.tar.gz
tar xf automake-1.16.3.tar.gz
cd automake-1.16.3
./configure --prefix=/usr/
make
make install
## libtool——一個通用庫支持腳本,將使用動態庫的復雜性隱藏在統一、可移植的接口中。主要的一個作用是在編譯大型軟件的過程中解決了庫的依賴問題。
cd /data/tools
wget ftp://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.gz
tar xf libtool-2.4.6.tar.gz
cd libtool-2.4.6
./configure --prefix=/usr/
make
make install
2.安裝依賴
## 基礎依賴
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install bzip2 bzip2-devel curl curl-devel fontconfig fontconfig-devel
freetype freetype-devel gd gd-devel gmp gmp-devel icu libicu libicu-devel
libxslt libxslt-devel libmcrypt libmcrypt-devel libevent libevent-devel libjpeg libjpeg-devel
libpng libpng-devel libwebp libwebp-devel libXpm libXpm-devel libxml2 libxml2-devel
openssl openssl-devel pcre-devel perl readline readline-devel zlib zlib-devel sqlite-devel
## oniguruma5php依賴
rpm -ivh https://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-6.9.7.1-1.el7.remi.x86_64.rpm
rpm -ivh https://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-devel-6.9.7.1-1.el7.remi.x86_64.rpm
## 升級libzip(https://libzip.org/)
YUM安裝的libzip版本為0.10,達不到要求,需升級,卸載掉yum安裝的libzip然后手動安裝新版。另1.4.0版本后的libzip需要用cmake編譯,而且cmake版本需3.0.2以上。
yum -y remove libzip libzip-devel
cd /data/tools
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
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
ldconfig /usr/local/lib
三、PHP安裝及配置
1.添加組及用戶
groupadd -g 1000 www
useradd -s /bin/bash -u 1000 -g www www
2.安裝PHP
cd /data/tools/
wget https://www.php.net/distributions/php-8.0.7.tar.gz
tar xf php-8.0.7.tar.gz
cd php-8.0.7
./configure --prefix=/usr/local/php8 --with-config-file-path=/etc
--enable-fpm --with-fpm-user=www --with-fpm-group=www
--disable-debug --disable-rpath --enable-bcmath --enable-mbstring
--enable-shared --enable-soap --enable-session --enable-shmop --enable-simplexml
--enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm
--enable-mbregex --enable-pdo --enable-calendar --enable-dom --enable-exif
--enable-fileinfo --enable-filter --enable-ftp --enable-gd --enable-intl
--enable-MySQLnd --enable-opcache --enable-pcntl --enable-fast-install
--with-curl --with-cdb --with-jpeg --with-freetype --with-webp --with-xpm
--with-gettext --with-gmp --with-mhash --with-openssl --with-iconv
--with-bz2 --with-zlib --with-zip --with-pear --with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support
--with-readline --with-libxml --with-xsl --without-gdbm
make -j 2
//make -j 這里指定的是CPU內核數量,加快編譯速度(根據實際情況修改)
make install
## 說明:相較于7.4版本,有些配置項發生了變化,不支持“
--enable-inline-optimization、--enable-json、--with-xmlrpc、--with-mcrypt、--enable-wddx”等配置項參數。
## configure配置參數說明
--prefix=/usr/local/php8:指定 php8 安裝目錄
--with-config-file-path=/etc:指定php.ini目錄位置
--enable-fpm:開啟php-fpm功能,此參數適合Nginx平臺
--with-fpm-user=www:設置FPM運行的用戶
--with-fpm-group=www:設置FPM運行的用戶組
--disable-debug:禁用調試模式
--disable-rpath:禁用在搜索路徑中傳遞其他運行庫。
--enable-bcmath:精度計算,解決數字運算精度問題(支持用字符串的形式表示任意大小和精度的數字)
--enable-mbstring:開啟多字節、字符串的支持(國際化與字符編碼支持)
--enable-shared:編譯共享庫
--enable-soap:該擴展可用于編寫 SOAP 服務器和客戶端
--enable-session:開啟會話支持。該模塊在PHP中是在并發訪問時由一個方法來保存某些數據.從而使你能夠構建更多的定制程序,從而提高你的 web 網站的吸引力
--enable-shmop:允許PHP讀取、寫入、創建和刪除Unix共享內存段的函數集
--enable-simplexml:該擴展提供了一個非常簡單和易于使用的工具集,能將XML轉換成一個帶有一般屬性選擇器和數組迭代器的對象。此擴展依賴libxml
--enable-sockets:開啟sockets支持。該擴展實現了和socket通訊功能的底層接口,它可以和客戶端一樣當做一個socket服務器
--enable-sysvmsg:該擴展用于完成進程間通信的消息隊列
--enable-sysvsem:使用 SysV 的信號 (semaphores) 機制,該擴展用于實現進程間信號量的操作
--enable-sysvshm:該擴展用于完成進程間通信共享內存的操作
--enable-mbregex:開啟正則表達式函數中多字節字符的支持
--enable-pdo:為PHP訪問數據庫定義了一個輕量級的一致接口。該擴展實現PDO接口的每個數據庫驅動可以公開具體數據庫的特性作為標準擴展功能。注意利用PDO擴展自身并不能實現任何數據庫功能;必須使用一個 具體數據庫的PDO驅動來訪問數據庫服務
--enable-calendar:開啟日歷擴展功能,用于在不同歷法間進行轉換
--enable-dom:允許通過DOM API對XML文檔進行操作
--enable-exif:開啟對圖片的元數據支持(通常JPEG和TIFF格式的圖像文件都包含元數據)
--enable-fileinfo:該模塊中的函數通過在文件的特定位置查找特定的魔術字節序列來猜測文件的內容類型以及編碼。雖然不是百分百的精確,但是通常情況下能夠很好的工作
--enable-filter:該模塊通過驗證或清理數據來過濾數據。當數據源包含未知(或外部)數據(如用戶提供的輸入)時,這尤其有用。例如,此數據可能來自html表單
--enable-ftp:開啟ftp的支持,實現通過FTP協議訪問文件服務器的客戶端
--enable-gd:開啟gd庫的支持,用于創建和處理各種不同圖像格式的圖像文件,包括 GIF、PNG、JPEG、WBMP 和 XPM
--enable-intl:啟用國際化支持
--enable-mysqlnd:啟用mysqlnd來支持連接MySQL
--enable-opcache:啟用 opcache,默認為 ZendOptimizer+(ZendOpcache)。OPcache通過將PHP腳本預編譯的字節碼存儲到共享內存中來提升PHP的性能,存儲預編譯字節碼的好處就是省去了每次加載和解析PHP 腳本的開銷。
--enable-pcntl:實現Unix方式的進程創建、程序執行、信號處理以及進程的中斷。進程控制不能被應用在Web服務器環境,當其被用于Web服務環境時可能會帶來意外的結果
--enable-fast-install:為快速安裝優化
--with-curl:開啟curl模塊,連接通訊各種服務器、使用各種協議
--with-cdb:一個用于創建和讀取常量數據庫的快速、可靠、輕量級的包。
--with-jpeg:開啟對jpeg圖像的支持,Debian/Ubuntu系統下下需安裝libjpeg-dev依賴包;Redhat/CentOS系統下需安裝libjpeg、libjpeg-devel依賴包
--with-freetype:開啟對freetype字體庫的支持,Debian/Ubuntu系統下需安裝libfreetype6-dev依賴包;Redhat/CentOS系統下需安裝freetype、freetype-devel依賴包
--with-webp: 開啟對webp圖像的支持,Debian/Ubuntu系統下需安裝libwebp-dev依賴包;Redhat/CentOS系統下需安裝libwebp、libwebp-devel依賴包。
--with-xpm:開啟對xpm圖像的支持,Debian/Ubuntu系統下需安裝libxpm-dev依賴包;Redhat/CentOS系統下需安裝libXpm、libXpm-devel依賴包。
--with-gettext:實現一個NLS(本機語言支持)API,用于將PHP應用程序國際化
--with-gmp:允許使用GNU MP庫處理任意長度的整數
--with-mhash:用于創建校驗和、消息摘要、消息驗證代碼等。Mhash 支持多種散列算法,例如 MD5、SHA1、GOST 等。自PHP 7.0.0起,Mash擴展已完全集成到Hash擴展中。因此,不再可能使用extension_loaded()檢測 Mhash 支持;改用function_exists()。
--with-openssl:開啟openssl的支持,加密傳輸時用到的,需要openssl庫
--with-iconv:此模塊包含了iconv字符集轉換功能的接口。使用此模塊,可以將一個本地字符集表達的字符串轉換成另一種字符集
--with-bz2:用于透明地讀取和寫入 bzip2 (.bz2) 壓縮文件
--with-zlib:開啟zlib庫的支持,該模塊使您能夠通過大多數文件系統函數的版本透明地讀取和寫入gzip (.gz)壓縮文件,這些文件系統函數適用于gzip壓縮文件(也包括未壓縮文件,但不適用于套接字)
--with-zip:開啟zip的支持,此擴展可以讓你透明地讀寫ZIP壓縮文檔以及它們里面的文件
--with-pear:安裝pear及pecl。PEAR是一個可重用的PHP組件的框架和分發系統。;PECL(PHP 擴展社區庫)是 PHP 擴展的存儲庫,提供所有已知擴展的目錄和用于下載和開發 PHP 擴展的托管設施
--with-mysqli=mysqlnd:由PHP源碼提供的mysql驅動連接代碼,它的目的是代替舊的libmysql驅動
--with-pdo-mysql=mysqlnd:由PHP源碼提供的mysql驅動連接代碼,它的目的是代替舊的libmysql驅動
--enable-mysqlnd-compression-support:在 mysqlnd 中啟用對 MySQL 壓縮協議的支持
--with-readline:實現訪問GNU Readline庫的接口。Debian/Ubuntu系統下需安裝libreadline-dev依賴包;Redhat/CentOS系統下需安裝readline、readline-devel依賴包。readline擴展并非線程安全的!因此,在任何真線程安全的SAPI(例如Apache的mod_winnt)中使用這個擴展是非常不推薦的!
--with-libxml:某些核心擴展的依賴,如:DOM、libxml、SimpleXML、SOAP、WDDX、XSL、XML、XMLReader、XMLRPC和XMLWriter
--with-xsl:該擴展實現了XSL標準,使用libxslt庫執行XSLT轉換
--without-gdbm:禁用GNU 數據庫管理器
3.設置全局的php命令
## 編輯/etc/profile文件,添加環境變量
vi /etc/profile
//在文件最后添加如下內容
######PHP
PATH=$PATH:/usr/local/php8/bin
## 在當前終端生效環境變量
source /etc/profile
## 查看PHP版本
php -v
4.配置php-fpm.conf文件
## 創建php-fpm.conf配置文件
vi /usr/local/php8/etc/php-fpm.conf
//輸入以下內容
[global]
pid = /usr/local/php8/var/run/php-fpm.pid
error_log = /usr/local/php8/var/log/php-fpm.log
log_level = notice
[www]
listen = 127.0.0.1:9000
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = nginx
group = nginx
pm = dynamic
pm.max_children = 20
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 15
pm.max_requests = 100
request_terminate_timeout = 50
request_slowlog_timeout = 15
slowlog = var/log/slow.log
注:①配置文件中所有參數的設置可根據實際環境需求進行修改,此處配置僅供參考。pm.max_spare_servers選項的值要小于或等于pm.max_children選項的值;
②pm.max_requests:指的是每個子進程在處理了多少個請求數量之后就重啟。
5.配置服務管理腳本
## 創建服務管理腳本
vi /usr/lib/systemd/system/php-fpm.service
//輸入以下內容
[Unit]
Description=The PHP FastCGI Process Manager
Documentation=http://php-fpm.org/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFILE=/usr/local/php8/var/run/php-fpm.pid
ExecStart=/usr/local/php8/sbin/php-fpm -y /usr/local/php8/etc/php-fpm.conf -c /etc/php.ini
ExecRestart=/bin/kill -USR2 $MAINPID
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
注:腳本中的 "-c /etc/php.ini" 參數是為了解決某些第三方擴展已安裝無法加載的問題,即在phpinfo頁面中查看不到的情況。
## 添加執行權限
chmod a+x /usr/lib/systemd/system/php-fpm.service
## 重新加載服務配置文件
systemctl daemon-reload
6.配置php.ini文件
注:本文中的參數配置僅供參考,實際使用環境中請根據需求進行修改。
## 創建php.ini配置文件
cd /data/tools/php-8.0.7
cp php.ini-production /etc/php.ini
## 基礎配置
sed -i 's/post_max_size = 8M/post_max_size = 20M/g' /etc/php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 20M/g' /etc/php.ini
sed -i 's/;date.timezone =/date.timezone = Asia/Shanghai/g' /etc/php.ini
sed -i 's/short_open_tag = Off/short_open_tag = On/g' /etc/php.ini
sed -i 's/max_execution_time = 30/max_execution_time = 300/g' /etc/php.ini
sed -i 's/disable_functions =.*/disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g' /etc/php.ini
## 開啟opcache 和 JIT
vi /etc/php.ini
//在配置文件中找到 [opcache]位置,添加如下參數配置:
zend_extension=/usr/local/php8/lib/php/extensions/no-debug-non-zts-20200930/opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=5000
opcache.save_comments=1
opcache.file_cache=/tmp
;jit配置
opcache.jit=1235
opcache.jit_buffer_size=64M
說明:JIT是在Opcache優化的基礎上結合Runtime信息將字節碼編譯為機器碼緩存起來?,F有的Opcache優化不受任何影響,并且PHP的JIT是在Opcache中提供的。JIT不是對Opcache替代,而是增強,在啟用JIT的情況下,如果Zend底層發現特定字節碼已經編譯為機器碼,則可以繞過Zend VM直接讓CPU執行機器碼,從而提高代碼性能。
## 確認opcache默認是否啟用成功
php -m | grep OPcache
四、服務管理
啟動:systemctl start php-fpm.service
關閉:systemctl stop php-fpm.service
重啟:systemctl restart php-fpm.service
查看狀態:systemctl status php-fpm.service
開機啟動:systemctl enable php-fpm.service
關閉開機啟動:systemctl disable php-fpm.service