云引擎 PHP 运行环境
这篇文档是针对 PHP 运行环境的深入介绍,如希望快速地开始使用云引擎,请查看 快速开始部署云引擎应用。
所有 PHP 项目必须在根目录包含一个 composer.json 和 public/index.php 才会被云引擎正确识别。
如果你希望创建一个新的项目,推荐从我们的 PHP 示例项目 开始。
运行机制
云引擎会使用 Nginx 和 PHP-FPM 来运行你的应用,项目中的 public 目录会被映射为网站的根目录(document root),其中 .php 文件由 PHP-FPM 处理,其他静态文件由 Nginx 处理。如果被请求的路径不存在则会由 public/index.php 处理,这一点可以满足绝大部分框架对应用入口点的需求。
云引擎默认每 64 MB 内存分配一个 PHP-FPM Worker,如果希望自定义 Worker 数量,可以在云引擎设置页面的「自定义环境变量」中添加名为 PHP_WORKERS 的环境变量,值是一个数字。设置过低会导致收到新请求时无可用的 Worker;过高会导致内存不足、请求处理失败,建议谨慎调整。
配置 PHP 版本
在 composer.json 中可以指定 PHP 的版本:
"require": {
"php": "7.4.x"
}
目前云引擎支持的版本有:7.4.x。
如未设置 PHP 版本,云引擎会默认使用最新的稳定版本。
安装依赖(composer.json)
云引擎会自动安装 composer.json 中的依赖,目前云引擎云端使用的是 Composer 1.x 版本。
PHP 扩展
所有版本的 PHP 默认开启 fpm、curl、mysql、zip、xml、mbstring、gd、soap、sqlite3。
7.0 以上版本默认开启 mongodb。
在 PHP 7.2 中官方从核心中移除了 mcrypt 这个拓展,云引擎以选装的方式继续提供支持,在 composer.json 的 require 中加入 ext-mcrypt: * 即可,使用 mcrypt 会增加部署耗时,如果没有用到请不要加。
自定义构建过程
除了默认的构建过程和运行命令外,开发者还可以在 leanengine.yaml 中进一步地调整运行命令(run)、依赖安装命令(install)和构建命令(build),覆盖默认的行为:
run: echo 'run another command'
install:
- {use: 'default'}
- echo 'install additional dependencies here'
build:
- echo 'overwrite default build command here'
详细的说明见 Reference: leanengine.yaml
。系统级依赖
在云引擎的线上环境中,开发者可以在 leanengine.yaml 中定义额外的系统级依赖:
systemDependencies:
- imagemagick
支持的完整列表见 Reference: leanengine.yaml。
构建日志
默认情况下构建过程中产生的日志不会显示到控制台,只有构建失败时,最后一个步骤的日志才会被显示在控制台上。
如需打印完整的构建日志以便调试,可以在部署时勾选「打印构建日志」或命令行工具添加参数 --options 'printBuildLogs=true'。
健康检查
云引擎目前主要为 Web 应用优化,应用在启动后需要在环境变量 LEANCLOUD_APP_PORT 中指定的端口上提供 HTTP 服务,注意需要监听在 0.0.0.0 地址(所有接口)上,而不是一些框架默认的 127.0.0.1。
在应用部署时,云 引擎的管理程序会每隔一秒去检查应用是否启动成功,如果超过启动时间限制(默认 30 秒)仍未启动成功,即认为启动失败,部署会中止。在之后的运行过程中,也会有定期的健康检查来确保应用正常运行,如果健康检查失败,云引擎管理程序会自动重启你的应用。
健康检查会通过 HTTP 检查应用的首页(/),如果返回 HTTP 2xx 的响应,就视作成功。
点击展开健康检查与云引擎 SDK 的关联
云引擎还会尝试检查由 SDK 处理的 /__engine/1/ping,如果 SDK 接入正确,便不再要求首页(/)返回 HTTP 2xx。
如果 开发者中心 > 你的游戏 > 游戏服务 > 云服务 > 云引擎 > 管理部署 > 你的分组 > 设置 > 云函数模式 设置为「开启」或 leanengine.yaml 中 functionsMode 设置为 strict,云引擎会检查 SDK 是否被正确地接入,否则会视作启动失败。
点击展开自定义启动时长(startupTimeout)
启动时间限制默认为 30 秒,可设置范围为 15–120 秒,如需延长或缩短,可以在 leanengine.yaml 文件中设置:
startupTimeout: 60
云端环境
绑定自定义域名
云引擎需要设置域名才能访问。在 开发者中心 > 你的游戏 > 游戏服务 > 云服务 > 云引擎 > 管理部署 > 你的分组 > 设置 > 访问域名 处可以绑定域名。
如果你绑定的域名以 stg- 开头(如 stg-api.example.com),会自动关联到预备环境。
对于测试阶段的应用,我们提供了共享域名,你可以自定义共享域名的前缀部分。
负载均衡和加速节点
所有对云引擎的 HTTP 或 HTTPS 请求都会经过负载均衡,负载均衡组件会处理 HTTPS 加密、重定向到 HTTPS、对响应进行压缩等一般性工作,因此云引擎上的程序不需要自己实现这些功能。同时负载均衡带来的一些限制,在云引擎程序内进行修改也无法越过,如:
/.well-known/acme-challenge/开头的路径被用于自动管理证书,不会转发到云引擎程序。- 请求头(URL 和 header )每行最大 8K,总计最大 64K。
- 请求体积(上传文件体积)最大 100M。
- 连接或等待响应的超时时间为 60 秒。
获取客户端 IP 等信息
云引擎的负载均衡会在 HTTP header 中传递一些有关原始请求的信息:
X-Real-IP: 请求的来源 IP。X-Forwarded-Proto: 请求的来源协议(http或https)。Forwarded: RFC 7239 规定的用于传递代理信息的头,包含 IP 和 协议。
$app->get('/', function($req, $res) {
error_log($_SERVER['HTTP_X_REAL_IP']);
return $res;
});
重定向到 HTTPS
在绑定云引擎自定义域名时,可以选择「强制 HTTPS」,勾选后负载均衡组件会将 HTTP 的请求重定向到 HTTPS 的同一路径。