LoginSignup
17

More than 1 year has passed since last update.

posted at

updated at

git pushでDocker環境をHerokuにデプロイする

初めてHerokuを使ったので方法をまとめました

githubに変更をpushしたら自動でHerokuにデプロイできるようにしています。
今回はLaravelですが、他言語でもBuildpackの言語や環境変数を変えて使えると思います。

環境

  • mac OS Catalina 10.15.6
  • Docker version 19.03.12
  • Laravel 7.22.4
  • Heroku CLI 7.42.8

前提

termianl
    .
    ├── README.md
    ├── docker
    │   ├── mysql
    │   ├── nginx
    │   └── php
    ├── docker-compose.yml
    ├── logs 
    └── src(Laravelプロジェクトフォルダ)
        ├── Procfile(後ほど作成します)
        ├── app
        ├── artisan
        ├── bootstrap
        ├── ...
  • Laravelアプリは作成済み(/src配下)
  • Herokuは初導入

やり方

1. Herokuに登録

https://jp.heroku.com/
スクリーンショット 2020-08-22 23.11.15.png

2. Heroku CLI インストール。その後 heroku login で設定

インストールコマンド

  brew tap heroku/brew && brew install heroku

ログインコマンド

terminal
   $ heroku auth:login
   Enter your Heroku credentials:
   Email: [ユーザ登録したときのメールアドレス]
   Password: [ユーザ登録したときのパスワード]
   Logged in as [ユーザ登録したときのメールアドレス]

これでコマンドラインで操作できるようになりました。

3. アプリを作成

ここでつけた名前がURLの一部になります。

terminal
    $ heroku create [アプリケーション名]
    Creating ⬢ [アプリケーション名]... done
    https://git.heroku.com/[アプリケーション名].git

4. githubと連携

作成したアプリの画面から、Deplyの Deployment methodでGithubを指定して連携します。
Automatic Deployも設定してgit pushによる自動デプロイを設定します。

スクリーンショット 2020-08-22 23.14.45.png

5. 環境変数を設定

Laravelの .envファイルはgitignoreでバージョン管理に含めないのが普通です。
そのため .envに含まれる環境変数をHerokuに登録します。

方法1. CLI

terminal
        heroku config:set DB_CONNECTION=pgsql

のようにしてコマンドラインで登録します。

方法2. Herokuサイト

スクリーンショット 2020-08-22 13.59.26.png

ここの Config Varsを使って登録します。

Laravelの場合は APP_KEYは忘れずに登録しましょう。

6. DB連携

ローカル開発ではMySQLを使っていましたが、HerokuではPostgreSQLをおすすめしています。

フリープランは

  • MySQL 5MB(メガバイト)
  • PostgreSQL 1GB

    という雲泥の差だったのでPostgreを使います。

  • Heroku Postgresを追加する

    参考:https://devcenter.heroku.com/articles/heroku-postgresql

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

    でPostgreSQLを紐付けます。 hobby-devで無料プランを選択しています。

    もし、以下のようなエラーが出たら、

    terminal
        $ heroku addons:create heroku-postgresql:hobby-dev  
         ›   Error: Missing required flag:
         ›     -a, --app APP  app to run command against
         ›   See more help with --help
    

    -aでアプリの名前を追加してあげましょう。

    terminal
        heroku addons:create heroku-postgresql:hobby-dev -a アプリ名
    

    作成が完了すると、自動的に環境変数にこのデータベースのURLが登録されています。

    登録された環境変数は下のコマンドで確認できます。

    terminal
        heroku config -a アプリの名前
    

    DB設定を環境変数に入れます。

    terminal
        $ heroku config:set DB_CONNECTION=pgsql
        $ heroku config:set DB_HOST=[ホスト名]
        $ heroku config:set DB_PORT=[ポート]
        $ heroku config:set DB_DATABASE=[データベース名]
        $ heroku config:set DB_USERNAME=[ユーザ名]
        $ heroku config:set DB_PASSWORD=[パスワード]
    

7. Procfileを作成

プロジェクトのルートに↓の内容で Procfileというファイルを作ります。

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

これでheroku起動時にapacheサーバーが起動するようになります。

参考:https://devcenter.heroku.com/articles/php-support#web-servers

8. git pushしてデプロイ!

今回こちらの記事を参考にします。

Heroku buildpack to support deployment from subdirectory

これを使い、herokuにサブディレクトリ(/src)に置いたLaravelアプリだけをherokuに認識させます。
これによってDocker環境の他のファイルを無視してのデプロイが可能になります。

方法:まずこのbuildpackを導入します。

terminal
    heroku buildpacks:set https://github.com/timanovsky/subdir-heroku-buildpack

次にHeroku公式のbuildpack(今回はPHP)を導入するように追加します。

terminal
    heroku buildpacks:add heroku/php

サイト上で見るとこんな感じです。
スクリーンショット 2020-08-22 23.51.41.png

環境変数でデプロイさせたいフォルダ(src)を指定します。

terminal
    heroku config:set PROJECT_PATH=src/

最後にgit pushでデプロイされます!

アプリ名.herokuapp.comにアクセスして確認しましょう。

9. マイグレーション&シーディング

terminal
    heroku run "php artisan migrate" -a アプリ名
    heroku run "php artisan db:seed" -a アプリ名

以上でデプロイ完了です。
おつかれさまでした。

参考
Herokuで公開してみよう
次の3点を変更しています。

  • githubとの連携
  • 環境変数の登録方法
  • git pushしてデプロイする方法

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
17