Mac OS X を使って開発する。
$ sw_vers -productVersion
10.10.2
Getting Started with PHP on Heroku だと heroku/php-getting-started を clone して細かい手順が分からなかったので、最初から作ってみる。
事前準備
Heroku | Sign upから、Heroku の無料アカウントを作る。
Homebrew の homebrew-php を使って PHP5.6 と Composer をインストールする。
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/homebrew-php
$ brew install php56
$ brew install composer
Heroku toolbelt for Mac OS Xから SDK (.pkgファイル) をインストールする。
SDK をインストール後、ターミナルから Heroku にログインする。
$ heroku login
Web アプリを作る
以下のファイルを作る。順を追って説明する。
hello
├── Procfile
├── composer.json
└── web
├── .htaccess
└── index.php
ローカルで動かす
web/index.php を作り、ローカルで動かしてみる。
$ mkdir hello
$ cd hello
$ mkdir web
$ vi web/index.php
<?php
echo "Hello, World\n";
ビルトインウェブサーバーを起動して、http://localhost:8000/web/index.php にアクセスする。
$ php -S localhost:8000 &
[1] 23428
PHP 5.6.5 Development Server started at Sun Feb 22 11:14:33 2015
Listening on http://localhost:8000
Document root is /Users/takatama/heroku/ranking
Press Ctrl-C to quit.
$ curl localhost:8000/web/index.php
::1:55514 [200]: /web/index.php
Hello, World
Heroku で動かす
(1) Git を初期化する。
Composer を使って SDK をインストールするが、Composer によるパッケージがインストールされる vendor/ は Git では管理しない (.gitignore で指定する)。
$ pwd
hello
$ git init
Initialized empty Git repository in hello/.git/
$ echo "vendor/" > .gitignore
(2) Composer で SDK をインストールする
Composer を使って Heroku の SDK をインストールするのに、composer.json を作る。インストールしたパッケージを呼び出せるよう、web/index.php を修正する。
PHP のバージョンは composer.json で指定する。詳しくは Heroku PHP Support を参照のこと。
$ vi composer.json
{
"require": {
"php": "~5.6.0"
},
"require-dev": {
"heroku/heroku-buildpack-php": "*"
}
}
$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
- Installing heroku/heroku-buildpack-php (v64)
Downloading: 100%
Writing lock file
Generating autoload files
composer install で vendor ファイルができるので、先に作った index.php が vendor/autoload.php を参照するように修正する。
$ vi web/index.php
<?php
require('../vendor/autoload.php');
echo "Hello, World\n";
(3) 利用する Web アプリケーションサーバの設定
Apache を使う。Procfile を作る。
Process Types and the Procfile | Heroku Dev Center
$ vi Procfile
web: vendor/bin/heroku-php-apache2 web/
web/.htaccess を作り、Apache の URL ルーティング(mod_rewrite)を設定する。
$ vi web/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
(4) ソースコードを Heroku に push する
Heroku でアプリを動かすため、ソースコードを push する準備をする。
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
Procfile
composer.json
composer.lock
web/
$ git add .
$ git commit -m 'first commit'
[master (root-commit) 46393c5] first commit
6 files changed, 76 insertions(+)
create mode 100644 .gitignore
create mode 100644 Procfile
create mode 100644 composer.json
create mode 100644 composer.lock
create mode 100644 web/.htaccess
create mode 100644 web/index.php
$ heroku create
Creating hogehoge-fugafuga-9999... done, stack is cedar-14
https://hogehoge-fugafuga-9999.herokuapp.com/ | https://git.heroku.com/hogehoge-fugafuga-9999.git
Heroku にソースコードを push する。
$ git push heroku master
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (9/9), 1.46 KiB | 0 bytes/s, done.
Total 9 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote: -----> No runtime required in composer.json, defaulting to PHP 5.6.6.
remote: -----> Installing system packages...
remote: - PHP 5.6.6
remote: - Apache 2.4.10
remote: - Nginx 1.6.0
remote: -----> Installing PHP extensions...
remote: - zend-opcache (automatic; bundled)
remote: -----> Installing dependencies...
remote: Composer version 1.0-dev (833ce984264204e7d6576ab082660105c7d8f04c) 2015-02-17 21:55:44
remote: Loading composer repositories with package information
remote: Installing dependencies from lock file
remote: Nothing to install or update
remote: Generating optimized autoload files
remote: -----> Preparing runtime environment...
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing... done, 71.6MB
remote: -----> Launching... done, v3
remote: https://hogehoge-fugafuga-9999.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/hogehoge-fugafuga-9999.git
* [new branch] master -> master
(5) Web ブラウザーで Web アプリが動作することを確認する
$ heroku open