【開発メモ】LaradockのPHP+nginx+MySQLで構築したLaravelをHerokuにデプロイ

  • 2020.02.06
  • Web
【開発メモ】LaradockのPHP+nginx+MySQLで構築したLaravelをHerokuにデプロイ

LaradockのパッケージにあるPHP+nginx+MySQLでLaravel環境をローカルに構築して、ネット上にあるチュートリアルをこなしていました。

チュートリアルを終えたので、Herokuにデプロイしようと思ったら思いの外ハマってしまいました。

僕のようにローカル環境にてLaradockでLaravelをインストール後に開発して、

Herokuにデプロイするにはどうしたらいいのだろうと困っている方向けにまとめてみました。

環境

PC OS: Windows Home10
docker: version19.03.1(docker toolbox)
Git: version 2.9.0.windows.1
Laradock
Laravel: version6.12.0

これからやりたいこと

上記のように、project-folder直下にあるsrcをGitでHerokuに送信して、デプロイしていきます。

Herokuアカウントの新規作成

下記の記事に詳しく作成方法が記載しています。

heroku-cliコマンドラインツール導入

Herokuにデプロイするためには、heroku-cliコマンドラインツールをインストールする必要があります。

下記のサイトからexeファイルをダウンロードします。

Heroku Toolbelt

https://toolbelt.heroku.com/

僕のPCはWindowsの64bitなので、上記の赤枠をクリックしてダウンロードしました。

それぞれ「Next」「Install」を押下して、インストールします。

herokuのコマンド実行確認をしてみます。

$ heroku --version
heroku/7.37.0 win32-x64 node-v12.13.0

Herokuにログイン

$ heroku login -i

heroku: Enter your login credentials
Email: Herokuに登録済みのメールアドレスを入力
Password: Herokuに登録済みのパスワードを入力
Logged in as 上記メールアドレスがココに表示されます

Gitリポジトリを作成してローカルにコミット

$ pwd
 /project-folder

$ git init

$ git add .

$ git commit -m "first-commit"

Herokuアプリを新規作成

$ heroku create 任意のアプリ名
Creating ⬢ 任意のアプリ名... done
https://任意のアプリ名.herokuapp.com/ | https://git.heroku.com/任意のアプリ名.git

他者と重複しないような名前を付ける必要があります。(大文字・_(アンダーバー)は×)

$ heroku apps
=== 登録済みのメールアドレス Apps
任意のアプリ名

自身のHerokuアプリ名が表示されていれば登録が完了されています。

$ git remote -v
heroku  https://git.heroku.com/任意のアプリ名.git (fetch)
heroku  https://git.heroku.com/任意のアプリ名.git (push)

Herokuアプリを新規作成すると、Herokuにリモートリポジトリが作成されます。

設定ファイルを作成

$ cd src

$ pwd
/project-folder/src

$ echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile

$ pwd
/project-folder

$ git add .

$ git commit -m 'add procfile'

srcフォルダ直下にProcfileを作成して、gitでcommitします。

環境変数の設定

$ cd laradock

$ docker-compose exec workspace bash

workspaceコンテナの中に入ります。

# cd src

# pwd
/var/www/src

# php artisan --no-ansi key:generate --show
base64:××××××××××××××

# exit

php artisanコマンドでAPP_KEYの値を生成します。

$ heroku config:set APP_KEY=base64:××××××××××××××
Setting APP_KEY and restarting ⬢ 任意のアプリ名... done, v3
APP_KEY: base64:××××××××××××××

$ heroku config
=== 任意のアプリ名 Config Vars
APP_KEY: base64:××××××××××××××

先程生成したbase64:から始まるAPP_KEYの値をHerokuにセットして、セットした値を確認します。

デプロイの実行

$ pwd
/project-folder

$ git subtree push --prefix src/ heroku master
・
・
・
・
略
・
・
・
・
remote:        https://任意のアプリ名.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/任意のアプリ名.git
 * [new branch]      ×××××××××× -> master

srcフォルダをgitでHerokuに送信して、デプロイを実施します。

データベースを設定する

$ heroku addons:create heroku-postgresql:hobby-dev

無料プランhobby-devでHeroku標準のPostgreSQLを使用します。

$ heroku config

=== youtube-curation Config Vars
APP_KEY:      base64:設定されたAPP_KEYが表示
DATABASE_URL: postgres://ユーザ名:パスワード@ホスト名:5432/データベース名

DATABASE_URLを見てみると上記の構成になっているので、heroku config:setコマンドでそれぞれの値をセットします。

$ heroku config:set DB_CONNECTION=pgsql

$ heroku config:set DB_USERNAME=ユーザ名

$ heroku config:set DB_PASSWORD=パスワード

$ heroku config:set DB_HOST=ホスト名

$ heroku config:set DB_DATABASE=データベース名

$ heroku config

=== youtube-curation Config Vars
APP_KEY:       base64: APP_KEY
DATABASE_URL:  postgres://ユーザ名:パスワード@ホスト名:5432/データベース名
DB_CONNECTION: pgsql
DB_USERNAME:   ユーザ名
DB_PASSWORD:   パスワード
DB_HOST:       ホスト名
DB_DATABASE:   データベース名
$ heroku run php artisan migrate
Running php artisan migrate on ⬢ laravel6-test... up, run.2466 (Free)
**************************************
*     Application In Production!     *
**************************************

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

マイグレーションを実施します。そうすると、このコマンドを実行していいか聞かれるので、「yes」と入力してEnterを押します。

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

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.04 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.03 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.02 seconds)

このような表示になっていればマイグレーションが成功しています。

$ heroku open

Herokuを起動してみて、画面が表示されたら成功です。

お疲れさまでした。

まとめ

僕のようにローカル環境にLaradockでLaravelを構築して、Herokuにデプロイする方法がネット上に情報があまり無かったので、参考になれば幸いです。

以上です。