【 Ruby on Rails 6.0 】AWS + Nginx + Unicornでデプロイ①


始めに

AWSをインフラとしてポートフォリオを本番環境にデプロイしました。
本シリーズではrailsアプリをデプロイし、独自ドメインを取得する過程までをアウトプットしたいと思います。

開発環境

  • macOS Catalina
  • Ruby 2.6.5
  • Ruby on Rails 6.0.0
  • AWS
  • nginx
  • unicorn
  • mariaDB(本番環境のデータベース)

目次

記載内容
セクション1 EC2インスタンス作成(今回の内容)
セクション2 Linuxサーバー構築
セクション3 データベース設定
セクション4 EC2上でGemをインストールし環境変数を設定
セクション5 Railsアプリを起動
セクション6 Nginxの導入
セクション7 自動デプロイ
セクション8 独自ドメイン取得

EC2インスタンス作成

まずはAWSのアカウントを作成しましょう。

EC2インスタンスとは、AWSで用意している仮想サーバーのことです。
この仮想サーバーを設定することでクライアントとアプリケーションがデータのやり取りを本番環境でできるようになります。

まず、サービスからEC2を選択し画面遷移しましょう。

次にインスタンスの起動をクリックします。

AMIの選択

AMIは、「Amazon Machine Image」の略語で、サーバのデータをまるごと保存したデ ータのことです。この中には、OSやWEBサーバなどが事前にインストールされているので自分でゼロからインストールする手間を削減することができます。
今回は「 Amazon Linux AMI 2 」という、AWSが独自にカスタマイズしたAMIを利用します。

EC2インスタンスのタイプ選択

EC2インスタンスのタイプを選択します。EC2ではさまざまなインスタンスタイプが用意 されており、CPUやメモリなどのスペックを柔軟に指定することができます。 今回は、無料枠で利用できる「t2.micro」を選択しましょう。


起動をクリックしましょう。

キーペアのダウンロード

内容を確認する際に、「キーペア」をダウンロードすることが出来ます。
これはインスタンスにSSHでログインする際に必要となる「秘密鍵」です。

SSHログインとは安全なリモートログインまたはその他の安全でないネットワーク上の安全なネットワークサービス用のプロトコルです。
これがないとEC2インスタ ンスにログインできないので、必ずダウンロードしてパソコンに保存しておきましょう。 また、間違って他人に渡さないよう気をつけてください。名前にスペースを含めるとエラーが起きるので注意してください。

キーペアのダウンロードが完了すると、クリック出来ない状態になっていた「インスタン スの作成」が、クリックできるように変更されます。そちらをクリックして、EC2インス タンスを作成しましょう。すると以下のような完了画面に遷移します。


インスタンス一覧画面に戻るので、作成した「インスタンスID」をコピーしてメモしておきます。

Elastic IPの作成と紐付けをしよう

先ほど作成したEC2インスタンスには、作成時にIPアドレスが自動で割り振られていま す。これをパブリックIPと言います。しかし、サーバーを再起動させるたびにこのパブリ ックIPが変わってしまうという欠点を持っています。IPが変わってしまうということは、 設定ファイル等をその都度書き換えなければいけません。これを解決してくれるの が、Elastic IPです。

Elastic IPとは

Elastic IPとは、AWSから割り振られた固定のパブリックIPアドレスのことを言います。 このパブリックIPアドレスをEC2インスタンスに紐付けることで、インスタンスの起動、 停止に関わらず常に同じIPアドレスで通信をすることが可能になります。


次に、取得したElastic IPアドレスを、作成したEC2インスタンスと紐付けましょう。


上の画像のようにインスタンスを選択すると、その下にあるプライベートIPアドレスが自 動で選択されます。
再びインスタンス一覧画面に戻り、作成したインスタンスの「Elastic IP」が設定されて いることを確認しましょう。

ポートを開く

立ち上げたばかりのEC2インスタンスはSSHでアクセスすることはできますが、HTTPなどの他の接続は一切つながりません。そのため、WEBサーバとして利用するEC2インスタンスは事前にHTTPがつながるように「ポート」を開放する必要があり ます。

セキュリティグループとは

ポートの設定をするためには、「セキュリティグループ」という設定を変更する必要があります。
セキュリティグループとは、EC2インスタンスが属するまとまりのようなもので、複数の EC2インスタンスのネットワーク設定を一括で行うためのものです。

セキュリティグループのポートを設定する

下図の手順に従って、セキュリティグループのポートを設定しましょう。 まず、EC2インスタンス一覧画面から、対象のインスタンスを選択し、「セキュリティグ
ループ」のリンクをクリックします。


すると、インスタンスの属するセキュリティグループの設定画面に移動するので、「インバウンドルール」タブの中の「インバウンドのルールの編集」をクリックします。


ページが切り替わるので、「ルールの追加」をクリックします。

タイプ HTTP
プロトコル TCP
ポート範囲 80
送信元 カスタム / 0.0.0.0/0, ::/0

「0.0.0.0」や「::/0」は「全てのアクセスを許可す る」という意味です。
もともと設定してあったSSHの設定は削除しないでください!


最後に、右下の「ルールを保存」を押します。
以上で、ポートの開放が完了です。
この作業が終わっていないと、次以降のカリキュラムでWEBサーバを起動した時にアクセ スできなくなるので注意してください。

以上でインスタンス作成の工程は終了です!

EC2インスタンスへのログインしてみよう

EC2インスタンスを作成すると、 ec2-userというユーザーと対応するSSH秘密鍵が生成されました。次にターミナル上でSSHログインをします。

ec2-userでログイン

ターミナル
#ホームディレクトリに移動
$ cd ~ 

#.sshというディレクトリを作成
# エラー『 mkdir: /Users/owner/.ssh: File exists 』と表示の場合、すでに存在しているのでスキップ
$ mkdir ~/.ssh  

# mvコマンドで、ダウンロードしたキーペア(ファイル名.pem)を .sshディレクトリに格納
$ mv Downloads/ファイル名.pem .ssh/

# .sshディレクトリに移動
$ cd .ssh/

# pemファイルが存在するか確認します
$ ls
キーペア名.pem

# パーミッションを設定
$ chmod 600 ダウンロードした鍵の名前.pem

# SSHログイン実行
$ ssh -i ダウンロードした鍵の名前.pem ec2-user@Elastic IPアドレス

初回ログインの場合、以下のように表示されます。

ターミナル
The authenticity of host '52.68.~~~~~~ (52.68.~~~~~~)' can't be established.
RSA key fingerprint is eb:7a:bd:e6:aa:da:~~~~~~~~~~~~~~~~~~~~~~~~.
Are you sure you want to continue connecting (yes/no)? 

ここでyesを押して以下の画像が表示されればログイン完了です!

終わりに

次回は本番環境に必要な設定ファイルをインストールしてデプロイを進めていきます。
お疲れさまでした。。

次回
Linuxサーバーの構築