PHP運(yùn)行環(huán)境說明
Serverless 應(yīng)用引擎 SAE(Serverless App Engine)支持多種PHP運(yùn)行時(shí)環(huán)境,您可以根據(jù)實(shí)際需求選擇。
運(yùn)行時(shí)簡(jiǎn)介
在線應(yīng)用:Nginx結(jié)合PHP-FPM
SAE針對(duì)PHP Web應(yīng)用,默認(rèn)提供LNMP(Linux+Nginx+MySQL+PHP)的運(yùn)行時(shí)環(huán)境,包含如下內(nèi)容:
使用官方PHP-FPM基礎(chǔ)鏡像。
內(nèi)置官方Nginx。
內(nèi)置常見PHP擴(kuò)展。
若您的應(yīng)用依賴其他資源,可使用如下阿里云其他產(chǎn)品:
應(yīng)用監(jiān)控:ARMS
針對(duì)PHP 5.4~7.3版本的SAE應(yīng)用,您可以通過開啟應(yīng)用監(jiān)控,獲得應(yīng)用間調(diào)用鏈Tracing、云數(shù)據(jù)庫 RDS MySQL和云數(shù)據(jù)庫 Tair(兼容 Redis)資源訪問延遲等更詳細(xì)的監(jiān)控信息。更多信息,請(qǐng)參見以下文檔:
PHP運(yùn)行時(shí)說明
軟件版本
當(dāng)前公開可用的PHP環(huán)境說明如下。如果您需要更高版本的PHP環(huán)境,請(qǐng)加入釘群(釘群號(hào):32874633),聯(lián)系產(chǎn)品技術(shù)專家進(jìn)行咨詢。
運(yùn)行環(huán)境 | 更新時(shí)間 | PHP版本 | Nginx版本 | 操作系統(tǒng)版本 | 說明 |
PHP-FPM 7.3 | 2021-12-27 | 7.3.32 | 1.18.0 | Debian 11.0 |
|
PHP-FPM 7.2 | 2021-09-17 | 7.2.34 | 1.18.0 | Debian 10.7 | 無 |
PHP-FPM 7.1 | 2021-09-17 | 7.1.33 | 1.18.0 | Debian 10.2 | 無 |
PHP-FPM 7.0 | 2021-09-17 | 7.0.33 | 1.18.0 | Debian 9.6 | 無 |
PHP-FPM 5.6 | 2021-09-17 | 5.6.40 | 1.18.0 | Debian 9.6 | 無 |
PHP-FPM 5.5 | 2021-09-17 | 5.5.38 | 1.18.0 | Debian 8.5 | 無 |
PHP-FPM 5.4 | 2021-09-17 | 5.4.45 | 1.18.0 | Debian 8.2 | 無 |
系統(tǒng)目錄
SAE PHP環(huán)境默認(rèn)使用如下目錄,提供軟件包部署:
類型 | 路徑 | 說明 |
目錄 | /home/admin/app/ | 軟件包部署默認(rèn)目錄。 |
目錄 | /home/admin/app/nginx/ |
|
目錄 | /home/admin/app/php/ | PHP應(yīng)用程序默認(rèn)目錄,默認(rèn)對(duì)應(yīng)Demo包中./php/。 |
文件 | /usr/local/etc/php.ini | SAE推薦php.ini配置路徑。具體信息,請(qǐng)參見設(shè)置PHP應(yīng)用配置文件。 |
官方PHP-FPM默認(rèn)配置如下:
類型 | 路徑 | 說明 |
目錄 | /usr/local/etc/php |
|
目錄 | /usr/local/etc/php/conf.d/ | PHP內(nèi)置擴(kuò)展配置目錄,存放擴(kuò)展默認(rèn)ini文件。 |
文件 | /usr/local/etc/php-fpm.conf | PHP-FPM默認(rèn)配置文件。具體信息,請(qǐng)參見FastCGI進(jìn)程管理器(FPM)。如何修改,請(qǐng)參見管理和使用配置項(xiàng)。 |
官方Nginx默認(rèn)配置如下:
類型 | 路徑 | 說明 |
文件 | /usr/sbin/nginx | Nginx官方程序。 |
目錄 | /etc/nginx/ | Nginx默認(rèn)配置目錄。 |
文件 | /etc/nginx/nginx.conf | Nginx默認(rèn)配置文件nginx.conf,包含 |
內(nèi)置擴(kuò)展
SAE提供的PHP環(huán)境支持以下擴(kuò)展:
PHP官方擴(kuò)展:隨PHP版本更新發(fā)布。
PHP PECL社區(qū)擴(kuò)展:獨(dú)立發(fā)布,由社區(qū)維護(hù)。
相關(guān)權(quán)限
官方PHP-FPM與Nginx默認(rèn)使用www-data用戶運(yùn)行應(yīng)用。權(quán)限相關(guān)說明如下:
服務(wù) | 權(quán)限USER GROUP | 說明 |
PHP-FPM | 進(jìn)程
| PHP默認(rèn),配置文件路徑為/usr/local/etc/php-fpm.conf。 |
Nginx | 進(jìn)程
| Nginx默認(rèn),配置文件路徑為/etc/nginx/nginx.conf。 |
文件目錄 | 目錄
| 代碼包部署目錄,配置目錄為/home/admin/app/。示例如下:
|
建議您不要修改用戶,否則可能會(huì)出現(xiàn)應(yīng)用運(yùn)行失敗的情況。
PHP擴(kuò)展支持
官方與PECL擴(kuò)展
您可以在部署應(yīng)用時(shí)配置php.ini文件來擴(kuò)展內(nèi)置,包括官方與PECL擴(kuò)展。具體操作,請(qǐng)參見設(shè)置PHP應(yīng)用配置文件。
在Webshell內(nèi)執(zhí)行以下命令,獲取具體的內(nèi)置擴(kuò)展。關(guān)于如何打開Webshell,請(qǐng)參見查看Webshell。
php -m
不同運(yùn)行環(huán)境的擴(kuò)展內(nèi)置支持,輸出示例如下:
PECL 7.3
[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
mcrypt
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Xdebug
Zend OPcache
PECL 7.2
[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
mcrypt
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Xdebug
Zend OPcache
PECL 7.1
[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
mcrypt
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Xdebug
Zend OPcache
PECL 7.0
[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Xdebug
Zend OPcache
PECL 5.6
[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Xdebug
Zend OPcache
PECL 5.5
[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis
Reflection
session
shmop
SimpleXML
soap
sockets
sodium
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
Zend OPcache
zip
zlib
[Zend Modules]
Xdebug
Zend OPcache
PECL 5.4
[PHP Modules]
amqp
ARMS
bcmath
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gettext
gmp
hash
iconv
igbinary
imagick
json
libxml
mbstring
memcached
mongodb
msgpack
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
recode
redis
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
swoole
sysvmsg
sysvsem
sysvshm
timezonedb
tokenizer
xdebug
xml
xmlreader
xmlrpc
xmlwriter
yaml
zip
zlib
[Zend Modules]
Xdebug
通過控制臺(tái)與API安裝擴(kuò)展
通過SAE控制臺(tái)或API,可以開啟PHP官方擴(kuò)展,或安裝制定版本PECL擴(kuò)展。具體操作,請(qǐng)參見在SAE控制臺(tái)使用ZIP包部署PHP應(yīng)用。
安裝第三方擴(kuò)展
本文以PHP-FPM 7.3環(huán)境,源碼編譯安裝YAML擴(kuò)展為例,演示如何安裝第三方擴(kuò)展。
創(chuàng)建一個(gè)運(yùn)行環(huán)境為PHP 7.3的SAE應(yīng)用。
開通公網(wǎng)訪問。具體操作,請(qǐng)參見配置NAT網(wǎng)關(guān)使SAE應(yīng)用能訪問公網(wǎng)。
通過Webshell登錄實(shí)例,執(zhí)行以下命令安裝并編譯擴(kuò)展。
# 獲取源碼 wget https://pecl.php.net/get/yaml-2.2.2.tgz tar -zxvf yaml-2.2.2.tgz # 編譯安裝 cd yaml-2.2.2 && \ phpize && \ ./configure && \ make && make install
將擴(kuò)展下載到本地。具體操作,請(qǐng)參見通過日志上傳下載診斷應(yīng)用。
擴(kuò)展地址如下:
/home/admin/yaml-2.2.2/modules/yaml.so
將擴(kuò)展打包到ZIP包中。ZIP包結(jié)構(gòu)如下:
. ├── nginx │ ├── default.conf │ ├── fastcgi_params │ ├── global │ └── root.dir ├── php │ ├── index.php └── extensions └── yaml.so
部署應(yīng)用,上傳新ZIP包,并添加php.ini配置啟用擴(kuò)展。
extension=/home/admin/app/extensions/yaml.so
通過Webshell登錄實(shí)例,確認(rèn)擴(kuò)展加載成功。
# php -m | grep yaml yaml
擴(kuò)展增強(qiáng)
默認(rèn)開啟WebP、JPEG、PNG、zlib、XPM和FreeType支持。具體信息,請(qǐng)參見GD和圖像處理函數(shù)。
常見配置說明
默認(rèn)服務(wù)端口
SAE配置的Nginx、PHP-FPM程序默認(rèn)的服務(wù)端口值如下:
程序 | 端口 |
Nginx |
|
PHP-FPM |
|
PHP-FPM日志:標(biāo)準(zhǔn)輸出
PHP-FPM日志,默認(rèn)輸出到實(shí)時(shí)日志。配置如下,配置文件路徑為/usr/local/etc/php-fpm.d/docker.conf:
[global] error_log = /proc/self/fd/2 log_limit = 8192 [www] access.log = /proc/self/fd/2
PHP錯(cuò)誤日志,默認(rèn)未配置展示。配置如下,來源php.ini文件:
error_log => no value => no value log_errors => Off => Off log_errors_max_len => 1024 => 1024
如需開啟錯(cuò)誤日志輸出到實(shí)時(shí)日志,請(qǐng)?jiān)趧?chuàng)建或部署應(yīng)用時(shí)配置php.ini配置,并指向如下路徑:
log_errors = on error_log = /proc/self/fd/2
Nginx日志:標(biāo)準(zhǔn)輸出
Nginx日志,默認(rèn)輸出到實(shí)時(shí)日志。配置如下,配置文件路徑為./nginx/default.conf:
#access_log /dev/stdout; error_log stderr;
可開啟
access_log
,默認(rèn)輸出到實(shí)時(shí)日志。
文件緩存:靜態(tài)文件、圖片、媒體
針對(duì)PHP代碼,您可以配置php.ini開啟或關(guān)閉OPcache。SAE默認(rèn)開啟OPcache。具體配置,請(qǐng)參考OPcache運(yùn)行時(shí)配置。
開啟OPcache:適用于在線網(wǎng)站,提升代碼執(zhí)行速度,降低磁盤IO。
關(guān)閉OPcache:適用于調(diào)試場(chǎng)景,代碼變更可實(shí)時(shí)生效。
php.ini
配置如下:
; 開啟 OPcache
opcache.enable=1
; 關(guān)閉 OPcache
;opcache.enable=0
文件緩存:PHP代碼
針對(duì)大量靜態(tài)文件,例如圖片、視頻、CSS和JS文件等,您可以開啟或關(guān)閉Nginx靜態(tài)文件緩存。具體配置,請(qǐng)參見Demo和Module ngx_http_headers_module。
開啟靜態(tài)資源緩存:適用于在線服務(wù)、大量媒體文件站點(diǎn)等場(chǎng)景,提升帶寬吞吐能力、降低IOPS讀取壓力。
關(guān)閉靜態(tài)資源緩存:適用于遠(yuǎn)程調(diào)試、上傳下載等場(chǎng)景,可實(shí)時(shí)訪問文件。
./nginx/default.conf配置如下:
# 靜態(tài)資源緩存
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
# 關(guān)閉緩存
#expires off;
# 開啟緩存
expires 1s;
}
增強(qiáng)說明
熱重啟服務(wù)
通過ConfigMap,可以動(dòng)態(tài)配置和修改文件內(nèi)容。
通過Webshell,可以動(dòng)態(tài)重啟服務(wù)。
熱重啟Nginx(不停服)
# 測(cè)試配置文件有效性 nginx -t # 動(dòng)態(tài)重啟 nginx -s reload
熱重啟php-fpm(有一定概率斷流,需要檢查php.ini配置)
ps uax | grep 'php-fpm: master' | grep -v grep | awk '{print $2}' | xargs kill -USR2
上傳下載
SAE支持多種上傳下載文件的方式,您可以按需選擇:
控制臺(tái):小文件調(diào)試上傳下載(文件大小不超過10 MB)。
上傳下載:SAE控制臺(tái)。具體操作,請(qǐng)參見使用Webshell實(shí)現(xiàn)文件上傳下載。
控制臺(tái):遠(yuǎn)程調(diào)試。
持久化存儲(chǔ):NAS或OSS。
部署應(yīng)用時(shí),可掛載NAS或OSS ,共享文件目錄。
上傳下載NAS:Serverless Devs工具。
上傳下載OSS:OSS控制臺(tái)。
上傳下載OSS:ossutil工具。