LoginSignup
50
49

More than 5 years have passed since last update.

PHP 5.6 の Web アプリを Heroku で動かす。

Posted at

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
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
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
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
50
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
50
49