LoginSignup
5

More than 3 years have passed since last update.

Laravel + Heroku (on Vagrant)を最初から

Last updated at Posted at 2019-05-01

はじめに

Laravelを使って開発がしたい。本番デプロイのデモをHerokuでさくっと行いたい。
そんな私の需要に答えて、手順をまとめてみました。

前提

  • Herokuにユーザ登録済
  • VirtualBox, Vagrantをインストール済 (vagrant v2.2.4)
  • Laravel Homesteadを使います
  • 実行環境はwindows10使っています(macでも大丈夫)

Homestead


Homesteadとは

Laravelをすぐに使える環境を提供してくれる優れたツールです。

HomesteadはWindowsやMac、Linuxシステム上で実行でき、Nginx WebサーバとPHP7.2、PHP7.1、PHP7.0、PHP5.6、MySQL、PostgreSQL、Redis、Memcached、Node、他にも素晴らしいLaravelアプリケーションを開発するために必要となるものすべてを含んでいます。


公式通りにHomesteadのBOXを追加し、ソースをクローンします。

hostOS
vagrant box add laravel/homestead
git clone https://github.com/laravel/homestead.git ~/Homestead

Homesteadのバージョンはこの時点で最新のタグを使用しています。

hostOS
cd ~/Homestead
git tag --list
> etc...
> v8.1.0
> v8.2.0
git checkout v8.2.0
# 設定ファイルの生成
bash init.sh

設定ファイルの変更

Homestead.yaml
# mariaDBを使う場合は追記
mariadb: true

folders:
    - map: C:/Site/
      to: /home/vagrant/code

sites:
    - map: homestead.test
      to: /home/vagrant/code/homestead/public
    - map: laravelapp.test
      to: /home/vagrant/code/laravelapp/public

databases:
    - homestead
    - laravelapp

私の場合はCドライブ直下にSiteディレクトリを作成し、その中に各プロジェクトをまとめています。
sitesでは上記のように複数設定することができますので、to: /home/vagrant/codeより使いやすいです。

Homesteadを立ち上げます。

hostOS
vagrant up --provision

ただ通常、作業は各プロジェクトで行うため、どこからでも起動できることが望ましいです。
エイリアスを登録しておくと捗るでしょう。

hostOS
alias homestead='function __homestead() { (cd ~/Homestead && vagrant $*); unset -f __homestead; }; __homestead'

コマンド自体はvagrantと同じです。

hostOS
# vagrant upが済んでいたら実行しなくていいです
homestead up --provision

起動には時間がかかりますので、今のうちにプロジェクトに移動します。
そしてエディタを立ち上げます(VsCode使っています)。

hostOS
cd /C/Site/homestead
code .

Ctrl+@を叩いてターミナルを開きます(Mac:Ctrl+Shift+@)。
windowsの場合はGitBashが開くようにしておくと少し幸せかもしれません。

今のうちにhostsの設定もしておきます。

windows
powershell -NoProfile -ExecutionPolicy unrestricted -Command "start notepad C:\Windows\System32\drivers\etc\hosts -verb runas"

windowsはwindowsキー+Rを押してコピペすると管理者権限でファイルを開くことができます。
macの場合はターミナルのまま普通に開きます。

mac
sudo vi /etc/hosts

hosts設定

hosts
# Homestead.yamlでIP変更できます
192.168.10.10 homestead.test

さて、仮想環境が起動したらゲストにSSH接続します。

hostOS
homestead ssh

「homestead」と大きな文字で迎えられたら成功です。

laravelプロジェクトを立ち上げる

まずはプロジェクトに移動します。

guestOS
cd ~/code/homestead

Laravelのプロジェクトを作成します。今回は5.7にします。

guestOS
composer create-project laravel/laravel ./ --prefer-dist "5.7.*"

起動したら一度、アクセスしてみます。表示されました。

ここでGit管理しておくといいと思います。

guestOS
git init
git add .
git commit "first commit"

windowsの場合、.gitattributes* text=autoをコメントアウトしてしまいますがどうなんでしょうね(ひとりごと)。

Herokuにログインする

homestead環境でHerokuにデプロイしたいと思います。
herokuをCLIで操作するためのコマンドを実行します。

guestOS
sudo snap install heroku --classic

herokuにログインします。「なにかキーを押してね」と言われるので押します。

guestOS
heroku login
> heroku: Press any key to open up the browser to login or q to exit:

すると、herokuのログイン画面がブラウザで自動的に開きます。
…ゲスト側なので開きませんね。
開かない場合も、下記のようなメッセージが出てきますので、指定URLに手動でアクセスしましょう。

guestOS
Warning: Cannot open browser. Go to https:<ごにょごにょ>

これでHerokuにログインできました。

Herokuにデプロイ

デプロイする前にProcfileを作成する必要があります。
linuxのpsコマンドで確認できるようなプロセスを起動できるみたいです。
詳しく知りたい方は公式へゴーゴゴー!

The Procfile | Heroku Dev Center

今の私のざっくりした認識は「WEBサーバを○○で起動するためのコマンド」です。
今回はwebサーバにapacheを使用しますので、下記のように記述します。

web: vendor/bin/heroku-php-apache2 public/

ちなみにpublic/はバーチャルホストで設定するときのドキュメントルート指定みたいなものなので、記述しない場合はhomestead.test/publicにアクセスしないと表示されませんし、色々不都合が起きます。

さて、再度コミットした後、プロジェクトをherokuと関連付けます。

guestOS
heroku create
# または任意の名前でcreate
heroku create homestead

これでgit remote -vでリモート情報にherokuが追加されていることが分かるでしょう。
あとは下記コマンドでデプロイをします。

guestOS
git push heroku master

このコマンド時に色々と処理が走っているのが目で見て分かると思います。
ここで内部的にアプリをビルドしているのですが、herokuは自動でコードを認識し、適切なビルドを行ってくれます。
ですが、phpとnode.jsなどのソースが混在していると誤認識される場合もあるようです。
その場合は下記のようにオプションを指定するか、

guestOS
heroku create --buildpack heroku/php

buildpacks:setコマンドで後付けの指定をしましょう。

guestOS
heroku buildpacks:set heroku/php

確認すると、適切なビルドが指定されていると思います。

guestOS
heroku buildpacks
> heroku/php

さて、デプロイが問題なく終わったところでブラウザで確認します。
…映っていませんので最後の仕上げを行います。

Herokuでアプリ設定

Laravelプロジェクトを生成した際に.envファイルもさり気なく生成されています。
.envは環境ごとに設定するファイルのため.gitignoreで管理除外されています。
そのため、下記のようにHeroku用の設定をする必要があります。

guestOS
heroku config:set APP_NAME=Homestead
heroku config:set APP_KEY=$(php artisan key:generate --show)
heroku config:set APP_URL=https://homestead.herokuapp.com
heroku config:set SESSION_DRIVER=file

これで私の場合、正常に映りました。

最後に

公式サイトを見れば、どこかに載っている情報だったりしますが、最初はコマンドも暗記できていないのであちこち見に行って時間を消費ばかりしました。需要があるか分かりませんが、きっと未来の私はこれを見て喜ぶと思いますので書いてよかった。どや。

※サンプルとしてhttps://homestead.herokuapp.comなどと記述していますが、実際にはhomesteadは作成していません。もし参考にされる場合は、各々頭で置き換えて実行してください。

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
What you can do with signing up
5