herokuでPHP環境の構築

herokuがphpを公式にサポートしました。
以前にビルドパックのを使用した環境の構築方法を書きましたが、
公式の作成方法も試してみました。

Heroku PHP Support | Heroku Dev Center

herokuでは基本、アップされたファイルからherokuが自動的に判定して環境を構築してくれます。
で、PHPの場合は、
composer.json
ファイルがルートにあれば、PHP環境と判定されて構築してくれる。

現時点では作成されるバージョンはデフォルトでは、以下。

By default, Heroku runs PHP 5.5 (5.5.12, 64-bit).

バージョンを指定してやる場合はcomposer.jsonに以下のように記述。

{
  "require": {
    "php": "~5.5.12"
  }
}

ただし、サポートしているバージョンは以下のみ。

  • 5.5.11
  • 5.5.12
  • 5.5.13

facebookが開発したというphpを高速に動作させる環境である、HipHop VMもサポートされており、
(実験的に、と書いてあるので使用には注意)
これもデフォルトではバージョンは以下。

HipHop VM (HHVM) (3.1.0, 64-bit)

使用する場合は以下のように記述。

{
  "require": {
    "hhvm": "~3.1.0"
  }
}

サポートしているバージョンは以下。

  • 3.0.1
  • 3.1.0

mbStringはデフォルトでは有効になっていないので、以下のように記述することで有効に出来る。

{
    "require": {
        "ext-mbstring": "*"
    }
}

デプロイ結果

-----> PHP app detected
-----> Setting up runtime environment...
       - PHP 5.5.12
       - Apache 2.4.9
       - Nginx 1.4.6
-----> Installing PHP extensions:
       - opcache (automatic; bundled, using 'ext-opcache.ini')
       - mbstring (composer.json; bundled)
. . .

デフォルトで有効になっている環境や拡張機能は以下を参考。
https://devcenter.heroku.com/articles/php-support#php-5-5

拡張機能はリストのカッコ内の単語を、ext-をつけて並べていく。
ちなみに、*の部分はバージョンを指定する箇所で、*は自動で指定されるようになる。
ドキュメント内には、*での指定が推奨されている。
理由は、PHPのバージョンアップとは別に、各機能のバージョンアップが不定期に行われる可能性があるから、だそう。

It is strongly recommended that you use “*” as the version selector when specifying extensions, as their version numbers can be extremely inconsistent (most of them report their version as “0”) and Heroku will sometimes update extensions outside the regular PHP update cycles.

 


ドキュメントルートの設定は、Procfileで指定する事ができる。
Procfileファイルは、heroku起動時に実行してくれるファイル。
拡張子もなしで、Procfileという名前のファイルをルートに設置することで動作する。
Process Types and the Procfile | Heroku Dev Center

PHPを動作させるwebサーバを、Apacheか、Nginxを指定出来る。
Apacheで動作させ、ドキュメントルートをpublic/にする場合は以下の記述をProcfileに追加する。

web: vendor/bin/heroku-php-apache2 public/

これで、public/がwebのドキュメントルートになる。

   このエントリーをはてなブックマークに追加