LoginSignup
5
6

More than 3 years have passed since last update.

超初心者がherokuにPHPアプリを公開してみた!~デプロイ編~

Posted at

前回投稿したアカウント登録編の続きです。
実際にアプリケーションをherokuにデプロイ(上げる)してみたので、手順をまとめました。

デプロイしたもの

言語:PHP
FW:Laravel6.0
DB:MySQL
エディタ:Visual Studio Code

アプリケーションの作成

herokuにデプロイするアプリケーションを作成します。
アプリケーション名は前回登録したものと同じものにします。

image.png

又、Githubにも同名のリポジトリを作成します。
image.png

herokuにログイン

続いて、ターミナルからherokuにログインします。

$heroku login

すると、以下のようなコマンドが表れるので、「q」以外のキーボードをどれか適当に押します。

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

ブラウザにこのような画面が表れるので、「Log In」を押す。
image.png
無事herokuにログインができました!
ログインが完了したら閉じても大丈夫です。
image.png

herokuにアプリケーションを上げる

ログインが完了したら、作成したアプリケーションをherokuに上げてみましょう!
herokuのアプリケーションはGitを経由して上げられる為、gitコマンドを利用します。

$git init
Reinitialized existing Git repository in [アプリケーションが格納されているディレクトリ]

$ heroku git:remote -a [アプリケーション名]
set git remote heroku to https://git.heroku.com/アプリケーション名.git

$git add .
$git commit -m "任意のコメント"
$git push heroku master

ステージングする際は何かしらの変更を加えてから行うと、「add」以降の処理が行えます。
pushした後にわんさか処理のログが流れますが、「 * [new branch] master -> master」が最後に表れたらOKです。
実際にpushした後は、下図のようにダッシュボード画面のDeployバーにて、Githubと連携できたことが確認できます。
image.png

herokuにアプリケーションの設定

herokuに作ったアプリケーションにビルドパックを追加します。
ビルドパックとは、heroku上でアプリケーションを動かすために必要な機能やスクリプトを一式集めたもので、言語ごとに備わっています。
ビルドパックはアプリケーションをherokuにデプロイすると、アプリケーションに沿った言語のビルドパックが追加されます。
今回はPHPでアプリケーションを作った為、PHPのビルドパックが追加されています。
image.png

Procfileを作成する

アプリケーションが上げられたら、Procfileを作成しましょう。
Procfileとは、heroku上にあるアプリケーションをどうやって動かすのかを記載する、指示書のようなものです。
以下のコマンドをアプリケーションの直下ディレクトリで打ち込みます。

$touch Procfile

すると「Procfile」という名前の空のテキストファイルが作成される為、以下の表記を追記します。

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

今回はwebサーバーにApacheを使用した為、こちらの表記を使用します。
Procfileの内容はアプリケーションに使用する言語によって異なります。

varcharの文字数を191文字にする

Procfileを追加し、herokuへpush...の前に、データベースのvarchar型の191byteに変更します。
herokuの無料プランでは、通常の文字数である255byteだと規定のデータ量を超えてしまい、マイグレーションする際にエラーが発生してしまいます。(マイグレーションのロールバックやコミットの取消などを行う羽目になります。)
app>Providers直下にあるAppServiceProvider.phpを以下のように編集します。

AppServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
//この記述を追加しないと「Schemaなんてクラスが無いぞ!と怒られます

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        Schema::defaultStringLength(191);
    }

改行コードをCRLFに変更しないようにする

今度こそpushを...と思ったら、そのままステージングしようとしたら、以下のようなエラーががが。

warning: LF will be replaced by CRLF in app/Providers/AppServiceProvider.php.
The file will have its original line endings in your working directory

調べると、Gitが改行コードをCRLF形式に変更しようとしているらしい。
これはGitの特性なのか設定によるものなのかは調査中ですが、こちらを防ぐ為に、ステージング前に以下のコマンドを入力します。

$ git config --global core.autoCRLF false

herokuにpushする

これでようやくherokuにpushできます。

$git add -A
$git commit -m "任意のコメント"
$git push heroku master

ClearDBの追加

MySQLを使用する際は、アドオンとしてClearDBというものを使います。
ClearDBとはDBaaSと呼ばれるアプリケーションで、バックアップやメンテナンスなどの管理作業はプラットフォームが行ってくれます。
以下のコマンドを入力して、ClearDBを追加します。

$heroku addons:add cleardb
#実行後
Creating cleardb on ⬢ laraheroku-test... free
Created cleardb-pointy-89803 as CLEARDB_DATABASE_URL
Use heroku addons:docs cleardb to view documentation

URLの情報を確認

ClearDBのURLでこの後の環境変数の設定に必要な情報を確認します。

$ heroku config | grep CLEARDB_DATABASE_URL

ここで出力されるURLの見方は以下の通りです。
CLEARDB_DATABASE_URL: mysql://[ユーザー名]:[パスワード]@[ホスト名]/[データベース名]?reconnect=true

環境変数の設定

DBに接続するための環境変数をheroku configに設定します。
設定は先述のURLの情報をそれぞれの項目に設定します。

$ heroku config:set DB_DATABASE=[データベース名]
$ heroku config:set DB_HOST=[ホスト名]
$ heroku config:set DB_USERNAME=[ユーザー名]
$ heroku config:set DB_PASSWORD=[パスワード]
$ heroku config:set APP_KEY=$(php artisan key:generate --show)
$ heroku config:set APP_ENV=heroku
$ heroku config:set LANG=ja_JP.UTF-8 #言語コードの設定
$ heroku config:set TZ=Asia/Tokyo    #タイムゾーンの設定

マイグレーションの実行

以上の設定をマイグレーションします。

$ heroku run php artisan migrate

サイトを開く

マイグレーションが問題無くできましたら、いよいよサイトを開く時です!
以下のコマンドを入力すると、サイトが開きます。

$ heroku open

image.png

LaravelのWelcome画面を開くことに成功しました!!!!
ちなみに、herokuに上げられたサイトは「herokuapp」のドメインが与えられます。

まとめ

紆余曲折しましたが、アプリケーションをherokuに上げてみました。
サーバーにアプリケーションを公開することはWebアプリ開発の大きな目標の一つとしていたので、小さいながらも出来たことに達成感を味わいました。
これを皮切りに他に作った物をherokuに上げてみたり、他のサーバーにも触れていきたいと思います。
今回上げたものは以下のURLになります。
laraheroku-test

参考文献

Laravelをherokuにデプロイする(データベースはMySQL)
git addしたらCRLF will be replaced by LFなエラー
Herokuにデプロイ済みのMySQLのロールバック

5
6
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
5
6