Rainbond可以将PHP源码快速的部署并运行起来。无论是SymfonyLaravelThinkPHP 等开发框架,还是使用非开发框架,或者通过环境配置文件自定义Web Server与PHP环境

一、准备工作

在此步骤中,您将准备一个可以部署的简单应用程序,至少需要满足以下条件:

  • 本地可以正常运行部署的php程序
  • 项目可以托管到git仓库
  • 项目根目录下必须存在composer.json,用来管理PHP项目的依赖,也是Rainbond识别为PHP语言的必要条件
  • 项目根目录下必须存在composer.lock文件
  • 项目根目录下需要定义Procfile,用来定义程序启动方式
    示例: php-demo

二、代码识别

代码的根目录下有 index.php 文件或者 composer.json文件,rainbond构建程序会识别为PHP语言。

提示:

如果根目录存在composer.lock文件会优化读取composer.lock的配置,忽略掉 composer.json,需删除composer.phar

如果没有提示composer.lock文件可以通过如下命令生成

  1. 1. 需要确定.gitignore文件是否忽略了composer.lock,如果有请从.gitignore文件里删除
  2. 2. 如果本就不存在,请执行composer update生成
  3. # 如果项目里没有请从.gitignore

三、支持版本

平台提供了不同的PHP版本,您可以使用PHP,HHVM(PHP代码编译器),或者同时使用二者,通过HHVM提高PHP性能。

2.1 PHP版本

  • PHP 5.5 (5.5.38)
  • PHP 5.6 (5.6.11, 5.6.30, 5.6.35)(默认)
  • PHP 7.0 (7.0.16, 7.0.29)
  • PHP 7.1 (7.1.2, 7.1.16)

2.2 HHVM版本

  • HHVM 3.5.1

2.3 选择PHP版本

有两种方式指定PHP版本:

  • 通过平台创建应用向导中选择。
  • 通过配置composer.json文件来实现:
  • 在您代码的根目录创建composer.json文件,指定使用PHP 5.6.35版本,文件具体内容如下:

copy



# icon/buttons/copy

  1. {
  2. "require": {"php": "5.6.35"}
  3. }
  • 在您代码的根目录创建composer.json配置并使用HHVM 3.5.1版本:

copy



# icon/buttons/copy

  1. {
  2. "require": {"hhvm": "3.5.1"}
  3. }

提示:

PHP 的版本支持 ~5.5.35 这种 Semantic Versioning 的形式,如果用户指定~5.5.35系统会从平台中选择5.5分支版本最高的版本,因此会选择5.5.35版本。

2.4 扩展

云帮创建PHP应用时支持添加扩展。您可以在创建应用时通过向导提供的扩展进行选择添加;或者自定义扩展,云帮会在构建过程中将您自定义的扩展添加:

2.4.1 默认扩展

以下为云帮创建PHP应用时默认开启的扩展:

2.4.2 可选扩展

您可以在应用创建的向导中选择添加除默认扩展外的其他扩展(扩展名对应包名在下列括号中给出):

2.4.3 自定义扩展

您可以在composer.json中添加自定义扩展,这里需要以 ext-(前缀) +**扩展包名 这样的格式命名扩展包名称,使用 * 标识扩展包的版本号。以下是使用bcmath, Memcached, MongoDB和 XSL 的例子:

copy



# icon/buttons/copy

  1. {
  2. "require": {
  3. "ext-bcmath": "*",
  4. "ext-memcached": "*",
  5. "ext-mongo": "*",
  6. "ext-xsl": "*"
  7. }
  8. }

提示:

composer是PHP的依赖管理器,composer.json则是composer的配置文件,强烈建议使用 “*” 来标识扩展包的版本号。

2.4.4 第三方扩展

以下第三方扩展可以通过 composer.json 开启(包名已在括号内给出):

提示:

HHVM 暂时不支持自定义扩展

2.4.5 扩展特例

官方出品过2个mongodb的扩展,一个叫mongo,一个是mongodb。前者已经被官方废弃,不再提供稳定的更新,官方推荐使用后者,并且后者是支持php7的。所以在使用mongodb扩展时,需要在composer.json中指定扩展为mongodb。

copy



# icon/buttons/copy

  1. {
  2. "require": {
  3. "php": "~7.1.16",
  4. "ext-memcached": "*",
  5. "ext-mongodb": "*",
  6. "ext-mbstring": "*"
  7. }
  8. }

四、源码编译构建

在部署期间系统会运行以下命令来安装依赖包,解决依赖关系:

  1. composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction

提示:

系统会在每次运行的时候使用composer self-update 将composer自动更新到最新版本。

五、配置启动命令

云帮支持 Apache,如果您在Profile文件中没有设置加载其中任一服务器,或代码根目录没有 Procfile 文件,应用创建向导会提示用户选择Apache作为Web服务器。

Apache服务器

Apache接口与PHP-FPM或HHVM通过FastCGI使用 mod_proxy_fcgi

名词释义:FastCGI:快速网关接口,是一种让交互程序与Web服务器通信的协议,早期通用网关接口(CGI)的增强版本PHP-FPM:是一个FastCGI管理器,旨在将FastCGI进程管理整合进PHP包中HHVM:PHP代码编译器

在您代码的根目录下创建 Procfile 文件,填写以下内容来开启 PHP-FPM:

  1. web: vendor/bin/heroku-php-apache2

如果要运行 HHVM 的话,Procfile 内容如下:

  1. web: vendor/bin/heroku-hhvm-apache2

您可以通过 .htaccess 文件来自定义 Apache 的行为,也可以使用自定义 Apache 配置文件的方式。例如;

将以下内容保存在根目录下命名为 apache_app.conf:

  1. RewriteEngine On
  2. RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
  3. RewriteRule ^(.*) - [E=BASE:%1]
  4. RewriteCond %{ENV:REDIRECT_STATUS} ^$
  5. RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
  6. RewriteCond %{REQUEST_FILENAME} -f
  7. RewriteRule .? - [L]
  8. RewriteRule .? %{ENV:BASE}/app.php [L]

然后修改 Procfile 文件加载此配置:

  1. web: vendor/bin/heroku-php-apache2 -C apache_app.conf

六、相关文档

原文: https://www.rainbond.com/docs/stable/user-manual/app-creation/language-support/php.html