- 如何部署 PHP 应用
- 应用检测
- 软件依赖
- 软件包
- 环境配置
- PHP运行环境
- 应用类型
- web
- 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 的依赖:
{ "require": { "monolog/monolog": "1.11.*" }}
运行composer install命令会自动下载安装所依赖的软件,并创建一个composer.lock文件,其中包含所有已安装的软件版本的快照。当应用部署时,必须包含一个composer.lock文件,Flynn 据此检测软件包安装的版本。
Composer同时创建vendor/autoload.php文件,可以在 PHP 程序中包含进去,能在程序里自动加载所依赖的软件包。例如,刚才依赖的monolog,在程序里按如下方式使用:
require 'vendor/autoload.php';// you can now reference Monologuse Monolog\Logger;$log = new Logger('my-application');...
关于composer.json文件的详细信息,参见:Composer JSON 模式说明页面。
环境配置
可能有些软件包只需要在本地使用,部署到生产系统时不需要安装,这可以通过运行composer install时,增加—no-dev参数实现。这样在部署时,系统会忽略composer.json文件里require-dev中定义的内容。
例如:本地环境可能会使用 phpunit,但在部署后很少会需要使用,你可以这样配置require-dev:
{ "require": { "monolog/monolog": "1.11.*" }, "require-dev": { "phpunit/phpunit": "4.3.*" }}
针对上面配置,完整运行的 Composer 命令如下:
composer install \--no-dev \--prefer-dist \--optimize-autoloader \--no-interaction
关于composer install的详细信息,请参加composer install 文档。
PHP运行环境
Flynn 默认使用最新的稳定版 PHP,也可以在依赖关系里配置特定的 PHP 或 HHVM 版本。
例如,使用 PHP 5.6.x:
{ "require": { "php": "~5.6.0" }}
使用 HHVM 3.2.x:
{ "require": { "hhvm": "~3.2.0" }}
建议在版本号前增加~操作符号,这样应用会使用该大版本下最新的稳定小版本。关于~的详细介绍,参见 Composer 文档。
应用类型
在应用根目录下的Procfile里声明应用的类型。格式:TYPE: COMMAND。
web
web类型的应用包含 HTTP 路由,配置了通信端口等环境变量,一般来说还会启动一个 HTTP 服务器。
Flynn 内置支持两种 web 服务器。
Apache2
系统使用heroku-php-apache2脚本启动 Apache2(包括 PHP-FPM):
web: vendor/bin/heroku-php-apache2
如果使用 HHVM 运行环境,则使用heroku-hhvm-apache2脚本:
web: vendor/bin/heroku-hhvm-apache2
Nginx
启动 Nginx (和 PHP-FPM ),使用 heroku-php-nginx脚本:
web: vendor/bin/heroku-php-nginx
如果使用 HHVM 运行环境,则使用heroku-hhvm-nginx脚本:
web: vendor/bin/heroku-hhvm-nginx
默认如果应用没有配置Procfile文件,系统会默认使用 Apache 作为 web 服务器,并使用composer.json里定义的运行环境(vendor/bin/heroku-php-apache2 或vendor/bin/heroku-hhvm-apache2)。
原文: http://doc.oschina.net/flynn?t=54099
