デプロイ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/6ff087c5-54f6-32e9-c40f-f1a9585f309e.png)
１：デプロイとは
　ネットワークを通じてWebアプリケーションなどのシステムを公開し、利用可能な状態にすることを言います。

２：公開に使用するサービス
 Render
アプリケーションの公開、運用を行うためのプラットフォームを提供するサービスです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/e4b3b3be-93c4-0c1d-af81-92b4175b54a5.png)

Renderでのデプロイは、GitHubと連携させつつ以下の流れで作業を行います。

①ローカル開発環境（自分のPC）でWebアプリケーションを開発する
②GitHubにコードをプッシュする
③Renderでアプリの新規作成を行い、GitHubと連携させる
④GitHubからRenderにコードが自動的にプルされ、デプロイが実行される

①Webアプリケーションに関する制限
　無料プランでは、非アクティブ状態が 15 分間続くと自動的にアプリがスリープします。新しいリクエストが来るとスリープが解除されますが、最大30秒の応答遅延が発生する可能性があります。

　無料プランで使用できるのは、 1か月あたり750時間の実行時間と、100GBまでのデータ転送です。100GBを超える場合、0.10 USD/GBが課金されます。

　無料枠を超えると、サービスは自動的に中断され、有料プランにアップグレードされるか、無料枠がリセットされるまで、トラフィックを処理できなくなります。無料利用は毎月1日にリセットされます。

　通常、無料の Web サービスのビルドは、有料サービスのビルドよりも遅くなります。ビルドとデプロイの時間を短縮するには、有料プランにアップグレードしてください。

②データベースに関する制限
　Renderで推奨されるデータベースはPostgreSQLで、初期状態ではMySQLを使用できません。

　無料でデータベースを作成し利用することができますが、作成後90日でアクセスできなくなります。

　アクセスの停止から14 日間の猶予期間がありますが、この期間をすぎるとデータベースはデータと共に削除されます。

　無料のデータベースは、一度に１つだけアクティブにすることができます。


　無料枠についてさらに詳しく知りたい場合は、以下の公式サイトを参照してください。
https://render.com/docs/free

３：デプロイを行おう

①PostgreSQLをインストールしよう
　Renderで使用するデータベースはPostgreSQLです。デプロイ準備として、ローカルのMacにPostgreSQLをインストールします。

ターミナル
% brew install postgresql@14
インストールには時間がかかります。

ターミナルでの処理が止まったら、以下のコマンドを実行して正しくインストールできていることを確認します。

ターミナル
% psql --version
→ psql (PostgreSQL) 14.5 (Homebrew)のように、バージョンが表示されれば正常です。

４：デプロイするアプリに設定を追加しよう
 デプロイするアプリを開こう。ここから、デプロイするアプリに設定を追加していきます。
VSCodeでデプロイするアプリのコードを開きます。

 Gemを追加しよう
本番環境（Renderでの実行時）にPostgreSQLを使用できるようGemを追加します。

Gemfileの「末尾」に以下の記述を追加します。

Gemfile

　group :production do
　　  gem 'pg'
　end
続いてGemのインストールを行います。ターミナルで以下のコマンドを実行します。

ターミナル
% bundle install

５：デプロイ用の設定ファイルを追加します。Render用の設定ファイルを追加します。
以下の手順で作業を行います。

① binフォルダに、render-build.shという名称でファイルを新規作成する。
② 作成したファイルに、以下の記述を追加する。
bin/render-build.sh
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/78a8d3a8-1a97-efa1-2b2a-c667b7021577.png)

６：データベースの設定を変更します。
　本番環境ではPostgreSQLを使用するため、以下のようにdatabase.ymlの設定を変更していきます。
config/database.yml
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/488b468b-fca3-6ba4-9d6b-2969c1332d4b.png)

7:Gemfile.lockの設定を変更します。
　macOS上で開発したアプリケーションを、Linuxなど別のOSで動作しているサーバーにデプロイする場合は、設定の追加が必要な場合があります。

以下のコマンドを実行して、Gemfile.lockに設定を追加します。

ターミナル
% bundle lock --add-platform x86_64-linux

８：秘密情報管理用ファイルを作成します。
　通常、Railsで新規アプリケーションを作成すると秘密情報を管理するための以下２つのファイルが作成されます。

credentials.yml.enc
master.key
しかし、ダウンロードしたデプロイするアプリにはこれらのファイルが含まれないため、デプロイ前に新規作成が必要です。

以下の手順で追加を行います。

まずは、ターミナルのデプロイするアプリのディレクトリにて、下記のコマンドを入力します。

ターミナル
% EDITOR="vi" bin/rails credentials:edit

→ 秘密情報管理用のファイルがない状態でこのコマンドを実行すると、新たにファイルが作成されます。
そして、正しく作成されていれば、「escキー」→「:」→「q」と入力し、「enterキー」を押してファイルを閉じます。

９：GitHubにコードをプッシュします。
　Renderでデプロイを行う場合、あらかじめGitHubにコードをプッシュしておく必要があります。

　GitHub Desktopを使用して、AjaxAppをGitHubにプッシュします。

１０：Renderでアプリを作成
最初に、以下のリンクからRenderの公式ページへ移動しましょう。
https://render.com/

　①移動したら、トップページの「GET STARTED FOR FREE」をクリックします。

　②クリックするとサインアップ画面が表示されます。
　サインアップの方法を選択する必要があるので、「GitHub」をクリックします。

　③確認を求められるので、「Authorize Render」をクリックします。

　④「COMPLETE SIGN UP」をクリックして画面を進めます。

　⑤ここで表示されているアドレスに認証メールが送信されています。普段使用しているメールアプリを開きます。

　⑥以下のような認証メールを探して内容を表示します。
　メールの本文内に認証用のURLが表示されているのでクリックします。

　⑦アカウントの作成は完了です。

　⑧Renderでデータベースを作成

　⑨ヘッダーに表示されている「New +」のボタンをクリックします。

　🔟メニューが開くので、「PostgreSQL」を選択します。

　１１：作成するデータベースの名称を指定します。ここでは分かりやすいよう「例：ajaxapp_production」と入力します。

　１２：使用するリージョンを、以下のように「Ohio」に変更します。
　この変更は、デフォルトで設定されるOregonで障害の発生率が高いことから、それを回避するためのものです。

　１３：変更できたら、「Create Database」をクリックします。

　１４：データベースの作成が始まり、「Status」に「Creating」と表示されます。作成には少し時間がかかります。

　１５：Statusが「Available」に変わったらデータベースの作成は完了です。

　１６：画面を下にスクロールすると「Internal Database URL」という欄があります。
　後ほど、ここに記載されているURLが必要になるので、下図のようにアイコンをクリックしてクリップボードにコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/747d56ac-e095-d3e9-9039-4a49dfa171e5.png)

１１：Renderでアプリを新規作成
　次にRenderでアプリの新規作成を行います。
　ヘッダーにある「New +」のボタンをクリックします。

１２：メニューの中から「Web Service」を選択します。

１３：GitHubのリポジトリと連携させるための設定を行います。
　まずGitHubのアカウントと連携させるため、「Connect accout」と書かれた文字をクリックします。

１４：画面の指示に従って認証できると、リポジトリをどのように連携するか選択するダイアログが表示されます。
　All repositoriesを選択して、Installをクリックします。

１５：次に、どのリポジトリを連携するのか選択します。
リストの中から「例：ajax_app」を探し、その右にある「Connect」のボタンをクリックします。

１６：Name欄にアプリケーションの名称を入力します。

　アプリケーション名は、例：ajaxapp-123456というアプリケーション名になります。

　また、データベース作成時と同様に、リージョンを「Ohio」に変更します。
データベースとアプリのリージョンが異なるとエラーが発生します。リージョンの選択に誤りがないよう注意しましょう。

１７：アプリのデプロイや起動時のコマンドを入力します。
　以下２か所の欄を編集します。初期状態で入力されているコマンドを削除して、以下の内容を入力します。

入力欄：Build Command	入力内容：　./bin/render-build.sh
入力欄：Start Command	入力内容：　bundle exec puma -C config/puma.rb

１８：「Advanced」という文字が書かれているのでクリックします。

１９：これから環境変数の追加を行います。

「Add Environment Variable」をクリックします。

２０：これから２つの環境変数を設定します。
　１つ目は、マスターキーの設定です。以下のように２つの欄に入力を行います。

① 左側に、「RAILS_MASTER_KEY」と入力します。
② 右側にアプリケーションのマスターキーを入力します。マスターキーは、ローカルのアプリケーション内にあります。VSCodeで例：AjaxAppを表示させ、configフォルダにある「master.key」ファイルの内容をコピペします。

　２つ目は、データベースURLの設定です。
　環境変数の入力欄を追加するため、「Add Environment Variable」のボタンをクリックします。

以下のように２つの欄に入力を行います。

① 左側に「DATABASE_URL」と入力します。
② 右側に、先ほどデータベース作成時にコピーした「Internal Database URL」の内容をコピペします。

２１：ここまで入力できたら、画面の最下部にある「Create Web Service」のボタンをクリックします。

２２：以下のようにターミナルが表示され、デプロイ作業が開始されていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/687ee20c-e730-d43b-1679-4c29a52f8f95.png)

　デプロイには時間がかかります。デプロイが完了すると、緑色のアイコンで「Live」と表示され、ターミナルに「Puma starting in single mode...」という文字が見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457284/d1d6922a-08bf-819c-17ec-559ef581a31d.png)