如何部署 PHP 应用

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

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

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

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

    运行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. $log = new Logger('my-application');
    4. ...

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

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

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

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

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

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

    例如,使用 PHP 5.6.x:

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

    使用 HHVM 3.2.x:

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

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

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

    web

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

    Apache2

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

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

      Nginx

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

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

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

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