開発環境
- PHP 7.2
- Laravel 5.6
- MySQL 5.7
- Docker
- Nginx
おさえておきたい料金体系
基本無料。
クレカ登録をすると稼働時間の増加以外にもアドオンの追加が可能になる。
Freeプランではいくつか機能制限があります。
アカウント毎に、アプリケーションは月に550時間までの稼働時間が割り当てられる
アカウントにクレジットカードを紐付けると1000時間に増える
公開しているアプリケーションに30分間アクセスがないと、スリープモードに移行する
有料プランになると上記制限がすべてなくなる($25/月〜)
詳細はこちら
デプロイ方法
イメージ:gitのherokuリポジトリを本番環境へデプロイするだけ
0. Herokuアカウントの登録
(アカウントをもっていればスルーで)
以下ページよりアカウントを作成する
Heroku公式より
1.HerokuCLIをローカル環境にインストールする
Herokuを使うにはHeroku CLIというアプリケーションをローカル環境にインストールする必要がある。
これをインストールすることでgitを使ってデプロイが可能になる。
sudo snap install --classic heroku
※上記コマンドはLinux系のUbuntuコマンドなため各自環境に沿ったコマンドを実施する必要あり詳細は公式で確認
2. Herokuへログイン
ローカル環境で以下コマンドを入力しHerokuへログインする
heroku login -i
Enter your Heroku credentials.
Email: Herokuに登録したメールアドレスを入力
Password: Herokuに登録したパスワードを入力
Logged in as 登録したメールアドレス //ログイン完了
3.Herokuアプリケーションの作成
デプロイしたいアプリケーションのプロジェクト直下にて下記コマンドを実行。
heroku create アプリケーション名
アプリケーション名がhttps://Herokuアプリケーション名.herokuapp.com/
とドメイン名になります
Creating ⬢ example.app.. !
▸ Name example.app is already taken
heroku apps
コマンドで作成したアプリが確認できれば作成完了
4.リモートリポジトリherokuの確認
念の為git 環境にherokuリモートリポジトリがあるか確認
git remote -v
5.Heroku設定ファイルの新規作成
プロジェクトルート直下に以下コマンドでProcfileを作成する
echo "web: vendor/bin/heroku-php-nginx -C nginx.conf public/" > Procfile
Procfileが以下のようになっているか確認
web: vendor/bin/heroku-php-nginx -C nginx.conf public/
※今回はNginxサーバーですがapacheの場合は
echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile
で作成
Procfileを作業ブランチにコミット&プッシュし、ローカルmasterブランチへマージ
6.本番環境へデプロイする
いよいよデプロイといってもデプロイしたいmasterブランチへ移動して下記のコマンドを実行するだけ
git push heroku master
1分ほど待ち、下記の表記がでればデプロイ完了
remote: Verifying deploy... done.
このままだとURLにアクセスしてもエラーが出るので後ほど環境変数を設定する
URLを叩いて以下のエラーが出たら・・・
-
There's nothing here, yet.
ブランチへ入力したURLが間違っている可能性があります。スペルミスを確認しましょう -
Forbidden
Procfileの設定が原因の可能性があります。こちらもスペースやスペルミス、masterブランチにProcfileがあるかを確認しましょう。
7.MySQLの導入
Herokuには複数のadd-onが用意されており、MySQLを使うための ClearDB MySQL をインストールする必要がある。
下記コマンドを実行。
heroku addons:create cleardb:ignite
これでFreeプランのMySQLが追加される。
以下のエラーが出た場合はアカウントにクレジットカードの登録が必要
▸ Please verify your account to install this add-on plan (please enter a credit card) For more
▸ information, see https://devcenter.heroku.com/categories/billing Verify now at
▸ https://heroku.com/verify
あとは環境変数を設定するだけ
環境変数の設定
.env
はgitignoreされているためherokuリポジトリには反映されません。
heroku環境に環境変数を直接設定する必要があります。
- 設定コマンド
heroku config:set 環境変数名=キー
- 確認コマンド
heroku config
APP_KEYの設定
DockerPHPコンテナ内プロジェクトルート直下で
$ php artisan key:generate --show
内容をコピーしてローカル環境プロジェクトルート直下で下記コマンドを入力
heroku config:set APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
設定した APP_KEY が設定されていればOK。
MySQLの設定
heroku config
で環境変数を確認。
cleardbのadd-onを追加しているためCLEARDB_DATABASE_URL:
という環境変数が自動で設定されている。
CLEARDB_DATABASE_URL: mysql://<ユーザー名>:<パスワード>@<ホスト名>/<データベース名>?reconnect=true
これをもとに各環境変数を設定
$ heroku config:set DB_CONNECTION=mysql
$ heroku config:set DB_DATABASE='<データベース名>'
$ heroku config:set DB_USERNAME='<ユーザー名>'
$ heroku config:set DB_PASSWORD='<パスワード>'
$ heroku config:set DB_HOSTNAME='<ホスト名>'
$ heroku config:set DB_PORT='3306'
その他の環境変数
APP_URL
$ heroku config set:https://アプリケーション名.herokuapp.com
slack認証系
SLACK_KEY=ローカル環境の`.env`の記述と同じ
SLACK_REDIRECT_URI=ローカル環境の`.env`の記述と同じ
SLACK_SECRET=ローカル環境の`.env`の記述と同じ
S3系
AWS_ACCESS_KEY_ID=ローカル環境の`.env`の記述と同じ
AWS_BUCKET=ローカル環境の`.env`の記述と同じ
AWS_DEFAULT_REGION=ローカル環境の`.env`の記述と同じ
AWS_SECRET_ACCESS_KEY=ローカル環境の`.env`の記述と同じ
その他の設定方法
Herokuのビルドに関する設定
buildpackを追加する
-
Herokuダッシュボード内の上部メニューのSettingsを選択
-
Add buildpackの選択
-
node.jsの選択
-
Save changesで完了
-
PHPの選択
-
Save changesで完了
* heroku/nodejs
* heroku/php
が表示されれば、buildpackの追加は完了
データベースのマイグレーション
Herokuからデータベース(MySql)に接続できるよう設定済みですが、まだテーブルを作成していません。
そこで、Laravelのマイグレーションコマンドを使ってテーブルを作成します。
以下コマンドを実行してください。
$ heroku run php artisan migrate —seed
heroku run (実行したいコマンド)で、Heroku上でコマンドを実行できます。
コマンドを実行すると、以下が表示されるので、yesと入力してエンターキーを押してください。
Do you really wish to run this command? (yes/no) [no]:
以下のように各テーブルのマイグレーションが完了した旨のメッセージが表示されれば問題ありません。
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.1 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.04 seconds)
Mysql接続コマンド
mysql -h <DB_HOSTNAME> -u <DB_USERNAME> -p -D <DB_DATABASE>
作業内容を本番環境へ反映したいとき
ローカルのmasterブランチに変更内容を反映させgit push heroku master
をするだけ
Heroku環境内に入るコマンド
heroku run bash
共同開発者の追加
- Heroku にログインし、任意のサービスを選択
- 上部メニューの
access
を選択 -
Add collaborator
を押下し、共同開発者のアカウントのメールアドレスを入力後、save change
を押下 - 招待者のメールアドレスが追加されていることを確認
- 招待者はメールの案内に沿ってHerokuにアクセス
これでデプロイやHeroku環境系の操作が可能になります。