Serverless应用引擎SAE(Serverless App Engine)支持多种PHP运行时环境,您可以根据实际需求选择。
运行时简介
在线应用:Nginx结合PHP-FPM
- 使用官方PHP-FPM基础镜像。
- 内置官方Nginx。
- 内置常见PHP扩展。
应用监控:ARMS
针对PHP 5.4~7.3版本的SAE应用,您可以通过开启应用监控,获得应用间调用链Tracing、MySQL和Redis资源访问延迟等更详细的监控信息。更多信息,请参见以下文档:
PHP运行时说明
软件版本
当前公开可用的PHP环境说明如下。如果您需要更高版本的PHP环境,请加入钉群(钉群号:32874633),联系产品技术专家进行咨询。
运行环境 | 更新时间 | PHP版本 | Nginx版本 | 操作系统版本 | 说明 |
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 | 无 |
系统目录
SAE PHP环境默认使用如下目录,提供软件包部署:
类型 | 路径 | 说明 |
目录 | /home/admin/app/ | 软件包部署默认目录。 |
目录 | /home/admin/app/nginx/ |
|
目录 | /home/admin/app/php/ | PHP应用程序默认目录,默认对应Demo包中./php/。 |
文件 | /usr/local/etc/php.ini | SAE推荐php.ini配置路径。具体信息,请参见设置PHP应用配置文件。 |
官方PHP-FPM默认配置如下:
类型 | 路径 | 说明 |
目录 | /usr/local/etc/php | PHP_INI_DIR 。 |
目录 | /usr/local/etc/php/conf.d/ | PHP内置扩展配置目录,存放扩展默认ini文件。 |
文件 | /usr/local/etc/php-fpm.conf | PHP-FPM默认配置文件。具体信息,请参见FastCGI进程管理器(FPM)。如何修改,请参见管理和使用配置项。 |
官方Nginx默认配置如下:
类型 | 路径 | 说明 |
文件 | /usr/sbin/nginx | Nginx官方程序。 |
目录 | /etc/nginx/ | Nginx默认配置目录。 |
文件 | /etc/nginx/nginx.conf | Nginx默认配置文件nginx.conf,包含http {} 配置。其中http {} 默认引用/home/admin/app/nginx/配置。如何修改,请参见管理和使用配置项。 |
内置扩展
- PHP官方扩展:随PHP版本更新发布。
- PHP PECL社区扩展:独立发布,由社区维护。
相关权限
官方PHP-FPM与Nginx默认使用www-data用户运行应用。权限相关说明如下:
服务 | 权限USER GROUP | 说明 |
PHP-FPM | 进程
| PHP默认,配置文件路径为/usr/local/etc/php-fpm.conf。 |
Nginx | 进程
| Nginx默认,配置文件路径为/etc/nginx/nginx.conf。 |
文件目录 | 目录
| 代码包部署目录,配置目录为/home/admin/app/。示例如下:
|
PHP扩展支持
官方与PECL扩展
您可以在部署应用时配置php.ini文件来扩展内置,包括官方与PECL扩展。具体操作,请参见设置PHP应用配置文件。
php -m
不同运行环境的扩展内置支持,输出示例如下:
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
通过控制台与API安装扩展
通过SAE控制台或API,可以开启PHP官方扩展,或安装制定版本PECL扩展。具体操作,请参见在SAE控制台使用ZIP包部署PHP应用。
安装第三方扩展
本文以PHP-FPM 7.3环境,源码编译安装YAML扩展为例,演示如何安装第三方扩展。
- 创建一个运行环境为PHP 7.3的SAE应用。
- 开通公网访问。具体操作,请参见配置NAT网关使SAE应用能访问公网。
- 通过Webshell登录实例,执行以下命令安装并编译扩展。
# 获取源码 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
- 将扩展下载到本地。具体操作,请参见通过日志上传下载诊断应用。扩展地址如下:
/home/admin/yaml-2.2.2/modules/yaml.so
- 将扩展打包到ZIP包中。ZIP包结构如下:
. ├── nginx │ ├── default.conf │ ├── fastcgi_params │ ├── global │ └── root.dir ├── php │ ├── index.php └── extensions └── yaml.so
- 部署应用,上传新ZIP包,并添加php.ini配置启用扩展。
extension=/home/admin/app/extensions/yaml.so
- 通过Webshell登录实例,确认扩展加载成功。
# php -m | grep yaml yaml
扩展增强
默认开启WebP、JPEG、PNG、zlib、XPM和FreeType支持。具体信息,请参见GD和图像处理函数。
常见配置说明
默认服务端口
SAE配置的Nginx、PHP-FPM程序默认的服务端口值如下:
程序 | 端口 |
Nginx | 80 |
PHP-FPM | 127.0.0.1:9000 |
PHP-FPM日志:标准输出
- PHP-FPM日志,默认输出到实时日志。配置如下,配置文件路径为/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错误日志,默认未配置展示。配置如下,来源php.ini文件:
error_log => no value => no value log_errors => Off => Off log_errors_max_len => 1024 => 1024
- 如需开启错误日志输出到实时日志,请在创建或部署应用时配置php.ini配置,并指向如下路径:
log_errors = on error_log = /proc/self/fd/2
Nginx日志:标准输出
- Nginx日志,默认输出到实时日志。配置如下,配置文件路径为./nginx/default.conf:
#access_log /dev/stdout; error_log stderr;
- 可开启
access_log
,默认输出到实时日志。
文件缓存:静态文件、图片、媒体
- 开启OPcache:适用于在线网站,提升代码执行速度,降低磁盘IO。
- 关闭OPcache:适用于调试场景,代码变更可实时生效。
php.ini
配置如下:; 开启 OPcache
opcache.enable=1
; 关闭 OPcache
;opcache.enable=0
文件缓存:PHP代码
针对大量静态文件,例如图片、视频、CSS和JS文件等,您可以开启或关闭Nginx静态文件缓存。具体配置,请参见Demo和Module ngx_http_headers_module。
- 开启静态资源缓存:适用于在线服务、大量媒体文件站点等场景,提升带宽吞吐能力、降低IOPS读取压力。
- 关闭静态资源缓存:适用于远程调试、上传下载等场景,可实时访问文件。
# 静态资源缓存
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
# 关闭缓存
#expires off;
# 开启缓存
expires 1s;
}
增强说明
热重启服务
- 通过ConfigMap,可以动态配置和修改文件内容。
- 通过Webshell,可以动态重启服务。
- 热重启Nginx(不停服)
# 测试配置文件有效性 nginx -t # 动态重启 nginx -s reload
- 热重启php-fpm(有一定概率断流,需要检查php.ini配置)
ps uax | grep 'php-fpm: master' | grep -v grep | awk '{print $2}' | xargs kill -USR2
- 热重启Nginx(不停服)
上传下载
SAE支持多种上传下载文件的方式,您可以按需选择:
- 控制台:小文件调试上传下载(文件大小不超过10 MB)。
上传下载:SAE控制台。具体操作,请参见使用Webshell实现文件上传下载。
- 控制台:远程调试。
- 持久化存储:NAS或OSS。
- 部署应用时,可挂载NAS或OSS ,共享文件目录。
- 上传下载NAS:Serverless Devs工具。
- 上传下载OSS:OSS控制台。
- 上传下载OSS:ossutil工具。