Laravel5をpostgresqlでHerokuにデプロイ

Laravel5をherokuに入れてみました。
ブラウザやディレクトリでの操作は一切なしで、黒い画面のみで作成してみました。

mcrypt

ローカルにてインストールしようとするとないと怒られたので導入。
また、PHPのバージョンが古い場合は、アップデートが必要

1
2
3
4
5
6
7
8
9
10
11
12
$ php -v                                                                                                           [ruby-2.1.2]
PHP 5.6.7 (cli) (built: Mar 22 2015 19:03:55)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

$ brew search mcrypt                                                                                               [ruby-2.1.2]
libtomcrypt    mcrypt       php53-mcrypt   php54-mcrypt   php55-mcrypt   php56-mcrypt

$ brew install php56-mcrypt
...略...
==> Summary
  /usr/local/Cellar/php56-mcrypt/5.6.7: 3 files, 56K, built in 116 seconds

laravelの導入

インストール

1
2
3
$ composer create-project laravel/laravel --prefer-dist laravel-sample-on-heroku
...略...
$ cd laravel-sample-on-heroku

ドキュメントルートの設定

1
2
$ touch Procfile
$ echo 'web: vendor/bin/heroku-php-apache2 public' >> Procfile

Gitを作成

1
2
3
$ git init
$ git add .
$ git commit -m 'init laravel'

herokuアプリの作成

1
2
3
4
$ heroku create laravel-sample-on-heroku
Creating laravel-sample-on-heroku... done, stack is cedar-14
https://laravel-sample-on-heroku.herokuapp.com/ | https://git.heroku.com/laravel-sample-on-heroku.git
Git remote heroku added

このままデプロイすると、package.jsonがルートディレクトリにあるため、nodejsのアプリになってしまう。
なので、phpのビルドパックを追加。
https://github.com/heroku/heroku-buildpack-php

1
2
3
$ heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-php
Setting config vars and restarting laravel-sample-on-heroku... done, v4
BUILDPACK_URL: https://github.com/heroku/heroku-buildpack-php

アプリの作成と同時にするには、createの後に、--buildpack URLを追加してやると一回で設定できる。
$ heroku create laravel-sample-on-heroku —buildpack URL xxx

すでにリモートリポジトリに追加されているので、pushしてデプロイ。

$ git push heroku master

ページを開くとすでに動作する状態。

$ heroku open

完了!

DBの設定

アドオンを追加(無料)

$ heroku addons:add heroku-postgresql:dev

DBの情報を取得

$ heroku config | grep HEROKU_POSTGRESQL
HEROKU_POSTGRESQL_CRIMSON_URL: postgres://UserName:Password@Host.compute-1.amazonaws.com:Port/DatabaseName  

生成したDBをプライマリーに設定

$ heroku pg:promote HEROKU_POSTGRESQL_CRIMSON_URL
Promoting HEROKU_POSTGRESQL_CRIMSON_URL (DATABASE_URL) to DATABASE_URL... done

ここからはファイル編集

$ vi config/database.php
---
//29行目
'default' => 'mysql',
↓
'default' => 'pgsql',
---
//冒頭に追加
$url = parse_url(getenv("DATABASE_URL"));

$host = $url["host"];
$username = $url["user"];
$password = $url["pass"];
$database = substr($url["path"], 1);
---
//67行目から
'pgsql' => [
    'driver'   => 'pgsql',
    'host'     => $host,
    'database' => $database,
    'username' => $username,
    'password' => $password,
    'charset'  => 'utf8',
    'prefix'   => '',
    'schema'   => 'public',
],

pushしてデプロイ

$ git add .
$ git commit -m 'setup Heroku PostgreSQL'
$ git push heroku master

最後にマイグレーションを実行

1
2
3
4
5
6
7
8
9
10
$ heroku run php artisan migrate
Running `php artisan migrate` attached to terminal... up, run.4728
**************************************
*     Application In Production!     *
**************************************

Do you really wish to run this command? [y/N]y
Migration table created successfully.
Migrated: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_100000_create_password_resets_table

/auth/registerで、ユーザー登録画面。
/auth/loginでログイン。
/password/emailでパスワードリセットになる。
(メール送信は設定していないので出来ない)

一通りの設定はこれで完了!
あとはセッション保持にMemCachierRedis To Goの設定や、
メール送信用にSendGridなどが必要になると思う。

サンプル

作成したアプリは以下。

http://laravel-sample-on-heroku.herokuapp.com

参考

macosxのphpにmcryptをインストール – Qiita
Deploy Laravel on Heroku
Laravel on Heroku – Using a PostgreSQL database – MattStauffer.co

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