• 如何部署 PHP 应用
    • 应用检测
    • 软件依赖
      • 软件包
    • 环境配置
    • PHP运行环境
    • 应用类型
      • web

    如何部署 PHP 应用

    Flynn 使用 PHP 或者 HHVM 来支持 PHP 应用,使用的 web 服务器是 Apache2 或 Nginx。

    Flynn 使用 Heroku PHP 构建包来完成 PHP 应用的检测,编译和部署。

    应用检测

    Flynn 通过应用根目录下的composer.json来检测是否为 PHP 应用。使用 Composer 来管理依赖关系,可以自动下载安装依赖的软件包。

    即使应用没有外部依赖的软件包需要用 Composer 管理,也需要在应用的根目录下创建一个composer.json空文件,Flynn 据此判断应用类型。

    软件依赖

    软件包

    composer.json文件的主要用途是用来声明软件包的依赖关系。下面composer.json的例子,声明了应用对 monolog 的依赖:

    1. {
    2. "require": {
    3. "monolog/monolog": "1.11.*"
    4. }
    5. }

    运行composer install命令会自动下载安装所依赖的软件,并创建一个composer.lock文件,其中包含所有已安装的软件版本的快照。当应用部署时,必须包含一个composer.lock文件,Flynn 据此检测软件包安装的版本。

    Composer同时创建vendor/autoload.php文件,可以在 PHP 程序中包含进去,能在程序里自动加载所依赖的软件包。例如,刚才依赖的monolog,在程序里按如下方式使用:

    1. require 'vendor/autoload.php';
    2. // you can now reference Monolog
    3. use Monolog\Logger;
    4. $log = new Logger('my-application');
    5. ...

    关于composer.json文件的详细信息,参见:Composer JSON 模式说明页面。

    环境配置

    可能有些软件包只需要在本地使用,部署到生产系统时不需要安装,这可以通过运行composer install时,增加—no-dev参数实现。这样在部署时,系统会忽略composer.json文件里require-dev中定义的内容。

    例如:本地环境可能会使用 phpunit,但在部署后很少会需要使用,你可以这样配置require-dev

    1. {
    2. "require": {
    3. "monolog/monolog": "1.11.*"
    4. },
    5. "require-dev": {
    6. "phpunit/phpunit": "4.3.*"
    7. }
    8. }

    针对上面配置,完整运行的 Composer 命令如下:

    1. composer install \
    2. --no-dev \
    3. --prefer-dist \
    4. --optimize-autoloader \
    5. --no-interaction

    关于composer install的详细信息,请参加composer install 文档。

    PHP运行环境

    Flynn 默认使用最新的稳定版 PHP,也可以在依赖关系里配置特定的 PHP 或 HHVM 版本。

    例如,使用 PHP 5.6.x:

    1. {
    2. "require": {
    3. "php": "~5.6.0"
    4. }
    5. }

    使用 HHVM 3.2.x:

    1. {
    2. "require": {
    3. "hhvm": "~3.2.0"
    4. }
    5. }

    建议在版本号前增加~操作符号,这样应用会使用该大版本下最新的稳定小版本。关于~的详细介绍,参见 Composer 文档。

    应用类型

    在应用根目录下的Procfile里声明应用的类型。格式:TYPE: COMMAND

    web

    web类型的应用包含 HTTP 路由,配置了通信端口等环境变量,一般来说还会启动一个 HTTP 服务器。

    Flynn 内置支持两种 web 服务器。

    Apache2

    系统使用heroku-php-apache2脚本启动 Apache2(包括 PHP-FPM):

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

    如果使用 HHVM 运行环境,则使用heroku-hhvm-apache2脚本:

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

    Nginx

    启动 Nginx (和 PHP-FPM ),使用 heroku-php-nginx脚本:

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

    如果使用 HHVM 运行环境,则使用heroku-hhvm-nginx脚本:

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

    默认如果应用没有配置Procfile文件,系统会默认使用 Apache 作为 web 服务器,并使用composer.json里定义的运行环境(vendor/bin/heroku-php-apache2vendor/bin/heroku-hhvm-apache2)。

    原文: http://doc.oschina.net/flynn?t=54099