Laravel on HerokuでHello Worldまで
環境構築大好きdyoshikawaです。
VPSで一から環境を作るのも好きですが、OSSツールやWebサービスを使って楽をするのも好きです。
そこで環境周りの整備を大幅に省力化できるHerokuについて書いてみようと思います。
今回は社内で主力に使っているWebフレームワークのLaravelをHerokuにデプロイしてみたいと思います。
前提として、ホスト環境はOSX HighSierra、Docker for Macインストール済、Homebrewインストール済、Herokuアカウント取得済とします。
まず、macから簡単にherokuを操作できるheroku-toolbeltを導入します。
brew install heroku
ビールの絵文字が出て無事インストールできたらherokuコマンドが使えるようになります。
早速ログインします。
heroku login
デプロイの前に手元にLaravel環境を作る必要があります。これはホストに直でもvagrantでも何でもいいのですが、僕は自分が好きなDockerを使います。
個人的にlaravel-devkitというリポジトリを作っているのでそれを使います。
今回用に作ったHerokuブランチをcloneします。
https://github.com/dyoshikawa/laravel-devkit/tree/heroku
git clone https://github.com/dyoshikawa/laravel-devkit.git -b heroku
自分のgitリポジトリにします。
cd laravel-devkit
rm -rf .git
git init
heroku create コマンドでHerokuアプリを作れます。
gitで初期化済のローカルリポジトリ内でcreateするとremote設定も自動で済ませてくれます。
heroku create <任意のアプリ名>
この時点でherokuリモートリポジトリと繋がっているのが確認できるはずです。
git remote -v
ここでちょっとした環境構築を行う必要があります。
といっても全然複雑ではないです。
Procfile・ビルドパック・DB・環境変数を設定していきます。
ProcfileはHeroku用のおまじないを書くファイルです。
「webサーバはapacheを使いますよ」「ドキュメントルートはpublicディレクトリですよ」というおまじないを書いてリポジトリのルートに置いておきます。
echo "web: vendor/bin/heroku-php-apache2 public" > Procfile
laravel-devkitでは最初から用意してあるので作成する必要はないです。
ビルドパックの設定は、すごく簡単にいうとHeroku側に「この言語を使いますよ」と教えるような感じです。
Laravelの場合、node.jsとPHPのビルドパックが必要になります。
heroku buildpacks:add heroku/nodejs
heroku buildpacks:add heroku/php
DBはPHPフレームワークのLaravelならMySQLを使いたいところですが、HerokuはPostgreSQL推奨なのでPostgreを設定します。
(ちなみにMySQLの設定も可能です。MySQLでやりたい方は「Heroku ClearDB」でググってみて下さい)
heroku addons:create heroku-postgresql:hobby-dev
最後に環境変数の設定です。
Laravelの設定には環境変数を使う項目がいくつかあるので、とりあえず最低限必要なものを埋め込んでいきます。
まずはシークレットキー。
ホストにLaravelを構築している場合は、
php artisan key:generate --show
laravel-devkitを使っている場合は、
docker-compose run app php artisan key:generate --show
を叩くことでシークレットキーを生成・表示させることができます。
このシークレットキーをコピーして、
heroku config:set APP_KEY=<シークレットキー>
<シークレットキー>の部分にペーストして実行するとシークレットキーの環境変数を設定できます。
続いてDB接続設定の環境変数。
Heroku上のDBの情報を取り出します。
heroku config:get DATABASE_URL
postgres://<ユーザ名>:<パスワード>@<ホスト>:5432/<DB名>
2行目の書式で取れると思いますので、
heroku config:set DB_CONNECTION=pgsql DB_HOST=<ホスト> DB_DATABASE=<DB名> DB_USERNAME=<ユーザ名> DB_PASSWORD=<パスワード>
このように環境変数をセットします。
Larvelを動かす準備が整ったので、いよいよデプロイします。
git add -A
git commit -m "initial commit"
git push -u heroku master
少し待って、デプロイが終了したら、
heroku open
で、実際のWebページを見ることができます。
でかでかと「Laravel」の文字が見れれば成功です。
DB設定を確認するためにマイグレーションをしておきましょう。
heroku run コマンドを用いることでHerokuサーバでコマンドを実行させることができます。
heroku run php artisan migrate
開発の準備は整いました。
後はソースコードを変更しつつPushするだけで自動デプロイしてくれます。
お疲れ様でした。
本記事は以下のページを参考にしました。