Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
35
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Laravelアプリをherokuで動かすチュートリアル

関連記事:Laravel + heroku の環境を1行でセットアップするスクリプト

Laravelとherokuを使うとちょっとしたデモアプリなどをかなりスムーズに開発&公開することができます(しかも無料で)
加えて、Laravel用のDocker環境であるLaradockでローカル開発環境も簡単に準備することができます。1
とはいえ、全部を準備しようとすると手順がやや煩雑なので一連のコマンドをまとめてみました。
なるべく書き換えが最小限になるように記述しています。

動作環境

検証環境はmacOSですが他のOSでもだいたい一緒なはず
必要なもの
heroku CLI (が使える状態にあること=インストール、ログイン済み)
PHP(5.6.x or 7.1.x)
composer
git

Laradockを使用する場合
Docker

1. Laravelプロジェクトを作成

command
composer create-project --prefer-dist laravel/laravel [appname]
cd [appname]
git init
git add .
git commit -m 'create app'

[appname]の書き換えが必要

2. HTTPサーバー設定を作成

Apacheの場合

command
echo web: vendor/bin/heroku-php-apache2 public/ > Procfile
git add .
git commit -m 'add web server setting'

Nginxの場合

command
echo web: vendor/bin/heroku-php-nginx -C nginx_app.conf public/ > Procfile
echo 'location / { index index.html index.php; try_files $uri $uri/ /index.php?$query_string; }' > nginx_app.conf
git add .
git commit -m 'add web server setting'

3. herokuアプリケーションを作成してデプロイ

command
heroku create $(basename $(pwd))
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)
git push heroku master

4. 動作確認

ここまで行えばHeroku上で動作確認ができます。

command
heroku open

以下の項目は必要に応じて参照してください。

補足1. DBを使用する場合

Heroku Postgres2を追加

command
heroku addons:create heroku-postgresql:hobby-dev
php -r 'preg_match("/^postgres:\/\/(.+?):(.+?)@(.+?):(.+?)\/(.*?)$/", `heroku config:get DATABASE_URL`, $matches); `heroku config:set DB_CONNECTION=pgsql DB_HOST=$matches[3] DB_PORT=$matches[4] DB_DATABASE=$matches[5] DB_USERNAME=$matches[1] DB_PASSWORD=$matches[2]`;'

2行目のやけに長いコマンドはHeroku Postgresの接続情報をLaravel用の環境変数にセットしています。
詳しくは別の記事を参照してください

必要なタイミングでマイグレーションも行ってください

command
heroku run 'php artisan migrate'

補足2. ローカル開発環境としてLaradockを使用する

:exclamation:注意:exclamation:
Laradock v7.1.0以降、Dockerイメージの命名に関する設定が変更されました。
以前はlaradockのディレクトリ名とイメージ名(およびコンテナ名)が連動しており、本記事の解説は当時の仕様に則った形になります。
v7.1.0以降では.envの"COMPOSE_PROJECT_NAME"にディレクトリ名を設定する必要があります。

Laradockの取得と設定

command
#Laravelプロジェクトディレクトリ内で
git clone https://github.com/Laradock/laradock.git
mv laradock/ $(basename $(pwd))dock/
cd $(basename $(pwd))dock
cp env-example .env

Laradockの.envは必要に応じて編集してください
参考までに主な書き換え例を記載します。
(Laradockはアップデートが活発なので内容が変わっている可能性あり)

.env
#ホストマシン上のデータ保存場所(DBサーバーのデータなど)
DATA_SAVE_PATH=~/.laradock/[appname]_data

#PHPの拡張モジュールのインストール(DBクライアントなど)
PHP_FPM_INSTALL_MSSQL=true
PHP_FPM_INSTALL_PGSQL=true

#Nginxの設定(ホストマシンでのポートなど)
NGINX_HOST_HTTP_PORT=8080
NGINX_HOST_HTTPS_PORT=4430

#Apacheの設定(ホストマシンでのポートなど)
APACHE_HOST_HTTP_PORT=8080
APACHE_HOST_HTTPS_PORT=4430

#Postgresの設定(ホストマシンでのポートなど)
POSTGRES_PORT=54320

外部公開しなければDBユーザー/パスワードなどは標準のままでいいと思いますが、
ポートは別の環境とかぶる事があるので変更をオススメします。

コンテナの起動

command
docker-compose up -d nginx postgres
#初回はこの後ビルドが行われる

docker-compose up -d以降の引数が起動するコンテナの指定になります。
nginx, apache, postgres, mysqlなどを適宜指定してください。
また、関連するコンテナも自動で立ち上がります(php-fpmなど)

起動が完了したらブラウザで、http://localhost:[.envで指定したポート]を開けばLaravelのトップページが表示されるはずです

DBを使用する場合の設定

まず、Laravelプロジェクトの.envファイルを書き換えて、LaradockのDBを参照する設定が必要です。

.env
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

DB_DATABASEDB_USERNAMEDB_PASSWORD はLaradockの.envの内容と合わせる必要があります。
(Postgresの場合は、POSTGRES_DBPOSTGRES_USERPOSTGRES_PASSWORD
詳しい解説は割愛しますがDB_HOST、DB_PORTは固定で構いません。

簡略化のために.envを同期するPHPスクリプトも用意しました。
Laradockフォルダに配置してphp sync_env.phpするだけですが、
今回の記事の構成に依存した内容になっていますので、フォルダ構成などが違うとうまく動かないかもしれません。

DBの操作
Laradock環境のDBへマイグレーションやシーダーを実行する際は、コンテナにログインする必要があります。

host
#laradockディレクトリ内で
docker exec -it $(basename $(pwd))_workspace_1 /bin/bash
#以後コンテナにログイン
container
php artisan migrate
php artisan db:seed
exit
#ホストに戻る

補足


  1. 公式マニュアルはHomesteadの仕様を推奨していますが、Dockerを普段使いしているのであればLaradockの方が導入・運用共に楽だと思います 

  2. mysqlやmariadbでも良いのですがherokuだとpostgresが標準みたいなので 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
35
Help us understand the problem. What are the problem?