読者です 読者をやめる 読者になる 読者になる

SideCI Blog

自動コードレビューサービスSideCIを提供している株式会社アクトキャットのコーポレートブログです。



HerokuがついにPHPを本格サポート。LAMP環境構築などは不要

HerokuがついにPHPを本格サポートしました。厳密には、まだベータ版扱いですが、使い方の公式ドキュメントが公開されました。

以前からHerokuはPHPに一応対応していました。HerokuでPHPを動かすための、HerokuのバックエンドのコンポーネントであるHeroku buildpackのPHP版は公開されており、それを用いることで、Heroku上でPHPのアプリケーションを動作させることは可能でした。

そして昨日、2014年5月1日、Herokuが公式にHeroku PHP Supportというドキュメントを公開しました。 使い方などは該当ドキュメントを参考にして下さい。 Heroku PHP Support

使い方は他言語同様

デプロイ方法は多言語と同じく、$ git push heroku masterでデプロイ出来ます。

動作環境

PHP 5.5 (5.5.11, 64-bit)で動作します。
composer.jsonでPHPの言語バージョンの指定が行えます。
厳密な指定ではなく、~5.5.0などの指定が推奨されているようです。この書き方ならPHPの最新のマイナーアップデートが出ていれば自動的にそちらが適用されます。
composer.json

{
  "require": {
    "php": "~5.5.0"
  }
}

MySQLやPostgreSQLなどは当然のようにサポートしています。ImageMagickなどもサポートしています。これらのエクステンションを使う場合には、これらもcomposer.jsonに記述することで使えるようになるそうです。
composer.json

{
    "require": {
        "ext-bcmath": "*",
        "ext-memcached": "*",
        "ext-xsl": "*"
    }
}

Herokuがサポートしているエクステンションの名前にの頭に"ext-“と付けることで使えるようですね。

サーバーはNginxかApache2、PHP Built-in Serverから選べ、どちらも他の言語同様、Procfileに記載するようです。
Procfile

web: vendor/bin/heroku-php-nginx

ApacheやNginxの設定は下記のように行えるようです。(こちらは別記事) Procfile

web: vendor/bin/heroku-php-nginx -C nginx_app.conf

nginx_app.conf

location / {
    # try to serve file directly, fallback to rewrite
    try_files $uri @rewriteapp;
}

location @rewriteapp {
    # rewrite all to app.php
    rewrite ^(.*)$ /app.php/$1 last;
}

location ~ ^/(app|app_dev|config)\.php(/|$) {
    fastcgi_pass heroku-fcgi;
    fastcgi_split_path_info ^(.+\.php)(/.*)$;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param HTTPS off;
}

php.iniのカスタマイズなども出来ますね。これらは詳しくは別記事を参照下さい。

Database周りなど

PHPではDBの設定はconfig/database.yml、などの一般化されたルール制限がないため、普通にPHPのファイル内で設定出来るものと思います。例:WordPressのwp-config.phpなど。

データベースのマイグレーションなどは他言語同様、$ heroku runコマンドを使って実施するものと思います。Heroku上からDBに接続してDBを作ったりカラムを追加したり、何かしたいことがある場合は$ heroku run "/bin/bash"などを使うとよいでしょう。

ローカルファイル周りなど

Herokuはローカルにファイルを保存する仕様になっていないので、アップロードしたファイルをローカルに置いてしまうようなプロジェクトだとHerokuでの動作は難しいと思います。WordPressなどはAmazon S3にメディアファイルをアップロードするプラグインが有りますので、それらを利用すると、Heroku上でも動作可能かと思います。

さぁ、はじめよう

さて、HerokuでPHPを使いたくなった方は、さっそくGetting Startedしてみましょう。

Getting Started with PHP on Heroku

私の個人ブログもHerokuに移そうかな。これだけ設定出来ればほとんどのプロジェクトが十分動く気がします。(S3にメディアファイルを移すのがめんどくさいなぁ…)