跳到主要内容

PHP 项目部署

本篇文档介绍如何在 Rainbond 平台上通过源代码部署 PHP 项目。

Rainbond 使用 Cloud Native Buildpacks (CNB) 构建 PHP 项目,自动识别源码、解析 composer.json 中的 PHP 版本约束、安装依赖并生成容器镜像。

项目识别

Rainbond 通过以下规则识别 PHP 项目:

  • composer.json:源码根目录存在此文件,识别为 PHP 项目

支持的项目类型

Rainbond 当前不会对 PHP 框架做单独分流,而是统一按通用 PHP Web 项目处理。

类型常见项目说明
通用 Composer Web 项目Laravel、Symfony、ThinkPHP、Yii通常需要将 Web 根目录设置为 public
CMS / 原生 PHP 项目WordPress、Discuz!、自研 PHP 站点可直接使用项目根目录或自定义 Web 根目录
简单入口项目仅包含 index.php 的 PHP 应用没有 composer.json 也会按 PHP 项目处理

构建参数

在组件的 构建源 页面或构建环境变量中,可以配置以下常用参数:

参数说明默认值
PHP 版本PHP 运行时版本,优先读取 composer.json 中的 require.php8.3
Web Server当前源码部署页面默认使用 Nginxnginx
Composer 安装参数追加到 composer install 的参数,例如 --no-dev --optimize-autoloader
Web 根目录指定 PHP Web 根目录,例如 public
启动方式默认或自定义默认

支持的 PHP 版本

Rainbond 当前代码中为 PHP CNB 构建预置了以下版本:

  • 8.1 8.2 8.3

其中平台默认版本为 8.3

启动命令

PHP 7.0

在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOMJSONPCREPDO):

以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:

可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):

PHP 7.1

在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOMJSONPCREPDO):

以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:

可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):

部署示例

  1. 进入目标团队,选择 新建应用从源码构建更多示例选择 PHP Demo
  2. Rainbond 自动识别为 PHP 项目
  3. 构建并部署

常见问题

项目为什么没有被识别为 PHP 项目?

请优先检查源码根目录是否满足以下任一条件:

  • 存在 composer.json
  • 根目录或两层子目录内存在 index.php

如果两者都不满足,平台不会按 PHP 项目识别。

Laravel / Symfony / ThinkPHP 部署后页面 404 或静态资源异常怎么办?

这类项目通常需要把 Web 根目录 设置为 public。如果保持默认根目录,Nginx 可能不会从正确的入口文件提供服务。

需要私有 Composer 仓库认证怎么办?

可以通过组件构建环境变量注入 COMPOSER_AUTH。认证信息建议在平台环境变量中维护,不要直接写入源码仓库。

需要额外的系统库或 PHP 扩展怎么办?

如果项目依赖额外的系统级库、PHP 扩展,或者需要完全自定义镜像层,建议改用 使用 Dockerfile 构建组件

需要自定义启动命令怎么办?

你可以通过以下任一方式覆盖默认启动方式:

  • 在源码根目录添加 Procfile
  • 在构建源页面选择自定义启动方式并填写启动命令