むじんブログ ”3歩進んで2歩下がる”

37歳未経験からのエンジニア転職を目指す営業部長

学習のアウトプット(Herokuへのデプロイ)

【デプロイ】

WEBアプリケーションを世の中に公開すること。

具体的には、用意したサーバーにアプリケーションを乗せて、他の人が使える状態にすることを指す。

 

サーバーはAmazonGoogleなどの企業からレンタルすることもできるが手間がかかる。

Herokuを使うと簡単にデプロイが可能。

 

【Heroku】

WEBアプリケーションを簡単にデプロイできるサービス。

GitのレポジトリをHerokuへ反映させて、そこでアプリとして動かすことができる。

 

通常のフローでは・・・

サーバー管理用のPCを準備

→サーバー管理用のOSをインストールし環境構築

→対象のWEBアプリケーションをそのPCに入れる

という手順となり、時間とコストがかかる。

Herokuであればそのような手間がなくなり非常に便利。

 

【Heroku CLI

Herokuを使ったデプロイはターミナルで行う。

ターミナルでHerokuを使えるようにするために、Heroku CLIのインストールが必要。

完了するとターミナルでHerokuコマンドが利用可能になる。

 

Herokuにアプリケーションを作成

RDBMSMySQLに設定(HerokuではデフォルトではPostgle SQLになっており、開発環境と合わせるために変更する)

「ClearDBアドオン」というMySQLを使うためのツールを用いて設定する。

 

【暗号化と復号について】

サーバーのアクセスキーやAPIキーなどのセキュリティ上で重要となる情報は暗号化しての管理が望ましい。

 

これを実現するために、Railsではcredentials.yml.enc(ファイルに書かれているものを英数字表示にして、何が書かれているか分からなくする)という暗号化のためのファイルとmaster.keyという鍵ファイルがある。

※重要情報はcredentials.yml.encの中に記述するということ

 

credentials.yml.encとmaster.keyは1つずつが対になっているので、1つの鍵で複数の暗号を復号することはできない。

また、master.keyは非常に重要なファイルなので、Gitに管理されない(リモートリポジトリに反映されない)ようになっている。

※.gitignore内で管理することで、Gitの管理下から外している。

 

環境変数

どのファイル・どのディレクトリからも参照できる変数。

OSのデータ共有の仕組み。

この環境変数の中に、知られたくない情報を格納しておくことでセキュリティが保たれる。

今回はマスターキーを環境変数に入れた。

 

【heroku config】

環境変数の確認・追加・削除を行うコマンド。

今回はこれを用いて環境変数にマスターキーを入れた(設定した)。

 

環境変数にマスターキーを入れる作業はコミットをHerokuへプッシュする前に行わなければならない。

もし誤って先にHerokuへのプッシュを行ってしまった場合は、再度環境変数をプッシュする作業を行う必要がある。

(マスターキーは本番環境に設置しないとcredentials.yml.encの暗号を復号できない)

 

【Stack】

Heroku上でアプリケーションが動作するための環境。

今回はRubyのバージョンとデフォルトのStackバージョンの互換性がなかったため、

Stackのバージョン変更を行なった。

 

【デプロイ】

GitにプッシュしているレポジトリをHerokuに反映させる。

そのために、git push heroku masterというコマンドをターミナルに入力し、

Herokuに情報をプッシュする。

 

【heroku run】

heroku上でコマンドを実行する時には頭に「heroku run」を追加する。

例えばheroku run rails db:migrateなど。

 

デバッグ

デプロイ後のアプリケーションにエラーが発生した場合、エラーログを確認する。

(画面上ではエラー原因が表記されていないこともある)

 

heroku logsコマンドでログを確認することができるが、非常に長く表示される。

そこで、heroku logs --tailとすることで、最後の10行だけを抽出して確認できる。

 

【Herokuを使ったデプロイの一連の流れ】

Herokuのアカウント作成

(ターミナルのディレクトリは任意で良いが、ミス防止のためデプロイするアプリケーションのディレクトリで作業する)

 

→ターミナルでheroku CLIを設定(一度設定すればその後は設定不要)

 

→Herokuへターミナルからログイン

heroku login --interactiveと入力)

 

→Gitでマスターブランチへコミットする(タイミングはここでなくてもOK)

 

→Heroku上でアプリケーションを作成

(ターミナルでheroku create 作成したいアプリ名)

※アプリ名はアンダーバー使用NG(Herokuでは使えない)

 

→念の為にターミナルでgit config --list | grep herokuを実行し、作成できているか確認

(fatal: not in a git directory以外が表示されていればOK)

 

MySQLを使用できるように設定する

ターミナルでheroku addons:add cleardbを実行しClearDBアドオンを追加。

その後Railsの場合は

heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`を実行

→さらにheroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}を実行する。

(データベースのURL再設定を行っている)

 

→EDITOR="vi" bin/rails credentials:editを実行

credentials.yml.encをmaster.keyによって復号し、中身を確認・編集するためのコマンド。実際に暗号化されていない状態の中身が確認できる。

(開いた後はesc→:→qで閉じる)

VS CODEでconfig/credentials.yml.encを開いて確認した場合は、上記と異なり暗号化されており、何が書いてあるかわからない。

 

補足

Railsではファイルとキーはrails newで自動生成されているが、もし何かの理由で存在しない場合はこのコマンドで作成される。

 

→Heroku上で環境変数を設定する。

ターミナルでheroku config:set RAILS_MASTER_KEY=`cat config/master.key`を実行。

(その後にheroku configをターミナルで実行し、RAILES_MASTER_KEYが記載されていればOK)

 

→Stackの指定

heroku stack:set heroku-18 -a アプリケーション名 をターミナルで実行。

(デフォルトのStackは20だが、今開発で使っているRubyのバージョンと互換性がないため18で設定)

 

→GitのレポジトリをHerokuに反映させる

git push heroku masterをターミナルで実行。

(以降に追加実装を行なった場合、同様にGitへのコミット→プッシュ後にこのコマンドを実行する)

 

→Heroku上でマイグレーションファイルを反映させる

heroku run rails db:migrateをターミナルで実行。

(データベースにはまだマイグレーションファイルの情報が反映されていないため)

 

→公開を確認する

heroku apps:info 

表示された情報に記載されているURLにアクセスすれば、アプリケーションを開くことができる。

 

 

【アプリケーションの修正を加える場合】

修正をコミット

→マスターブランチにマージ

→Herokuにプッシュ

マイグレーションを実行