4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HerokuにLaravelで作ったアプリをデプロイする方法(PostgreSQL編)

Last updated at Posted at 2020-06-11

HerokuにLaravelで作ったアプリをデプロイする方法をご紹介します。

##作業環境
OS:Windows 10 HOMEエディション (ver.2004)
Laravel:ver.7.14.1
Composer:ver.1.10.7
Git:ver.2.26.2.windows.1

##前提条件
既にLaravelでアプリの公開する準備が終わっていることが前提となります。

##①Herokuに登録する
Herokuとは PaaS(Platform as a Service)と呼ばれるジャンルに属し、「プラットフォーム」つまりアプリケーションの実行環境を提供するサービスです。
無料でアプリを公開できるので、今回のこのサービスを利用します。
###Herokuのアカウントを登録する
以下のサイトにアクセスし、必要事項を入力してアカウントを登録します。
https://signup.heroku.com/login
202006112126.png
###Heroku CLIをインストール
次に以下のリンクから Heroku CLI というコマンドラインツールをインストールします。

https://devcenter.heroku.com/articles/heroku-cli#download-and-install
202006112128.png

##②Heroku に新規アプリを作成する
Heroku に新しいアプリケーション動作環境を作成します。
管理者権限でWindowsPowerShellを起動して、アプリのあるフォルダまで移動し、以下のコマンドを打ちます。

cd 'アプリのあるフォルダ'
heroku login

すると以下の文言が出てきますくるので、q 以外のキーを押すとブラウザが開きます。

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

ブラウザでログインしたら、またPowerShellに戻り、以下のコマンドを入力して、新しいアプリケーション動作環境を作成します。

heroku create todo-app-laravel7-neneta --buildpack heroku/php

「todo-app-laravel7-neneta」はアプリ名ですが、他の人と同じ名前をつけることができないので注意です。名前にこだわりがなければ「heroku create」だけでもOKです。

##③DBを設定する
DBはPostgreSQLを利用するので、「Heroku Postgres」を追加します。
###Heroku Postgresを追加
ダッシュボードから先程作成したアプリを選び、「Resources」タブをクリックします。
202006112148.png
「Heroku Postgres」を選び、プランが「Hobby Dev - Free」であることを確認して「Provision」を押して追加します。
202006112150.png
###DBの接続情報を設定する
DBの接続情報をPowerShellから行います。以下のコマンドを入力すると、DBの接続情報が表示されます。

heroku config:get DATABASE_URL

postgres://xxxxx:yyyyy@ec2-zz-zz-zzz-zz.compute-1.amazonaws.com:5432/abcd1234

DATABASE_URL で表される接続 URL は以下の形式になっています。

postgres://DB_USERNAME:DB_PASSWORD@DB_HOST:5432/DB_DATABASE

それぞれ config:set コマンドで設定します。DB_CONNECTION は pgsql に設定します。

heroku config:set DB_CONNECTION=pgsql
heroku config:set DB_HOST=ec2-zz-zz-zzz-zz.compute-1.amazonaws.com
heroku config:set DB_DATABASE=abcd1234
heroku config:set DB_USERNAME=xxxxx
heroku config:set DB_PASSWORD=yyyyy

以上でDBの設定は終了です。

##④メールサーバーを設定する
PostgreSQL と同じ要領で、今度はメールサーバーを用意します。
アドオンの検索窓で「sendgrid」で検索して「SendGrid」を選択します。こちらも無料プランがありますので、「Starter」プランを利用します。
202006112205.png
SendGrid アドオンを追加できたら Laravel がメールサーバーと通信するための設定を行います。以下のコマンドを順に入力します。

heroku config:set MAIL_HOST=smtp.sendgrid.net
heroku config:set MAIL_USERNAME=$(heroku config:get SENDGRID_USERNAME)
heroku config:set MAIL_PASSWORD=$(heroku config:get SENDGRID_PASSWORD)

これでメールサーバーの準備も整いました。

##⑤デプロイ
###Procfileを作成する
まず Procfile という Heroku 向けの設定ファイルを作成します。
エディタで「Procfile」というファイル名のファイルを作成し、以下の内容を記述して保存します。

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

Procfile はアップロードしたアプリケーションを動作させるためにどのような環境を用意するかを指定しています。

###アップロード
Heroku へのアップロードは Git を利用します。
先にアプリケーションコードを Git の管理下に置いてから、heroku create したときに設定された heroku リモートリポジトリにプッシュすると自動的にそのコードがアプリケーション実行環境にも送信され、配置されます。
以下のコードを順にPowerShellで実行します。

git init
git add .
git commit -m "first commit"
git push heroku master

###APP_KEY
アプリケーションをアップロードできたら、まずは APP_KEY の設定を行います。セキュリティ関連の機能で暗号化に使ったりと重要な設定項目で、これがないと Laravel は動作しません。

heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)

###マイグレーション
データベースの状態はマイグレーションファイルで管理しているので、本番公開のときもマイグレーションコマンドでテーブルが構築できます。

heroku run "php artisan migrate"

 Do you really wish to run this command? (yes/no) [no]:

途中で本当に実行していいかどうか確認が出てくるので、「yes」と入力するとテーブルが作成されます。

###ブラウザで開く

以下のコマンドを入力し、ブラウザから開きます。

heroku open

アプリケーションを更新したときは、以下のコマンドで更新できます。

git add .
git commit -m "コミットメッセージ"
git push heroku master

参考までに今回公開したアプリはこちらです。
http://todo-app-laravel7-neneta.herokuapp.com/

以上、簡単ですがHerokuにアプリをデプロイする手順をご紹介しました。

##参考サイト
https://www.hypertextcandy.com/laravel-tutorial-deploy-to-heroku

4
1
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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?