雖然很久沒有寫php了,但是php這個語言還是不能丟。php7發布以后運行速度有大幅的提升,改進也很快,php的開源項目也很多。所以在服務器安裝一份,讓自己隨時能用。說不定哪天就用上了。
一、准備php的第三方源
因為ubuntu默認的php是7.2的版本,看很多大神介紹7.3比7.2有提高不少,所以考慮用php的第三方源
(最新的7.4是2019年11月發布的,還在快速迭代,更新bug,暫時不考慮。)
- 第三方源ppa:ondrej/php 是一個比較知名的PHP源。
作者Ondřej Surý 是 Debian PHP 軟件源的官方維護者之一,所以說穩定性和安全性基本上不是問題。 - 用【ppa:ondrej/php】還是同時安裝多個版本的php在同一台服務器,可以非常方便的切換版本,可以支持php5.6/7.1/7.2/7.3/7.4
- 先安裝相關依賴包(以下都是以root用戶進行操作)
apt -y install software-properties-common apt-transport-https lsb-release ca-certificates
#-y是省去提示yes/no時,輸入y的麻煩
- 添加第三方源,會有個warning提示
add-apt-repository ppa:ondrej/php
#WARNING: add-apt-repository is broken with non-UTF-8 locales
#試了,這個命令 LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php,提示也一樣
apt update
- 安裝php7.3和相關拓展
apt install php7.3 php7.3-fpm php7.3-mysql php7.3-curl php7.3-gd php7.3-mbstring php7.3-xml php7.3-xmlrpc php7.3-zip php7.3-opcache php7.3-json php7.3-pgsql
#有點多,都是常用的
apt instal php-redis php-mongodb
#這兩個擴展沒有針對7.3的,redis和mongodb現在使用都非常多
- 可根據需要安裝的擴展
apt-cache search php7.3
二、配置PHP7.3
- php-fpm的啟動和管理
- 安裝完Php7.3后,會自動啟動php-fpm
- /etc/init.d/php7.3-fpm start/stop/restart 可以啟動、停止、重啟php-fpm
- 默認讀取/ect/php/7.3/fpm/php-fpm.conf
- php的配置文件說明
- 配置文件/etc/php/7.3/fpm/目錄下
- php-fpm.conf 是【global】
- 中小應用這里修改的不多,如果需要深入定制可以參考以下文章
- php-fpm線程池/etc/php/7.3/fpm/pool.d/www.conf
pm = dynamic 如何控制子進程,選項有static和dynamic
pm.max_children:靜態方式下開啟的php-fpm進程數量
pm.max_requests:php-fpm子進程能處理的最大請求數
pm.start_servers:動態方式下的起始php-fpm進程數量
pm.min_spare_servers:動態方式下的最小php-fpm進程數
pm.max_spare_servers:動態方式下的最大php-fpm進程數量
區別:
如果dm設置為 static,那么其實只有pm.max_children這個參數生效。系統會開啟設置數量的php-fpm進程。
如果dm設置為 dynamic,那么pm.max_children參數失效,后面3個參數生效。
1G的內存
pm = dynamic
pm.start_servers = 6
pm.min_spare_servers = 3
pm.max_spare_servers = 20
+ [參考文檔](https://www.cnblogs.com/jonsea/p/5522018.html),
[php-fpm配置優化](https://blog.csdn.net/Derek_Yam/article/details/89474827),
[優化2](https://www.cnblogs.com/52fhy/p/5051722.html),
[參考3](https://www.php.cn/php-weizijiaocheng-391985.html)
+ pool.d/www.conf 是進程池的相關配置,是用tcp,還是用unix socket,可以參考這篇文章
+ [tcp Or unix](https://blog.csdn.net/qq624202120/article/details/60957634)
+ [參考2](https://www.cnblogs.com/mzhaox/p/11215113.html)[參考3](https://blog.csdn.net/lifushan123/article/details/45704471)
+ 改用TCP socket ,vim pool.d/www.conf ,修改listion = 127.0.0.1:9000
+ 默認啟動的是unixsocket,/run/php/php7.3-fpm.sock
- 修改nginx的配置,新增一個phpdev.conf ,放在/etc/nginx/conf.d/phpdev.conf
erver {
listen 80;
server_name php.qumogu.com;
#charset koi8-r;
access_log /var/log/nginx/phpdev.access.log main;
location / {
root /data/www/phpdev;
index index.html index.htm index.php;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /data/www/phpdev;
#fastcgi_pass unix:/dev/shm/php-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
在配置nginx的時候,一直報,no input file specified,無法正常顯示php
需要,指定root ,然后,參考
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 改為:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- php-fpm的常用命令
systemctl restart php7.3-fpm #重啟
systemctl start php7.3-fpm #啟動
systemctl stop php7.3-fpm #關閉
systemctl status php7.3-fpm #檢查狀態
#也可以用
/etc/init.d/php7.3-fpm start/stop/restart
- 查看網絡端口
netstat -lnt | grep 9000
netstat -lnt #查看所有端口占用
- 添加www-data用戶合組
useradd www-data
groupadd www-data